//A place to be creative and random. Be messy or organized. Let it flow. This is a place for deep, chaotic honesty. Peer behind the veil. Find the music. Find the diamonds and redpills in the rough. Be meta; find new categories; be free. Of course, this begins to look like its own projects page. But, I will not slip into that infinite regress, or at least it can be contained.//

* [[Deschloroketamine]]
* [[Ego]]
* [[Humanity]]
* [[If I Were Dictator]]
* [[Reputation]]
* [[Osha-10 Test]]
* [[Humans: Years 25-35]]
* [[Glasses]]
* [[DCK Ramble]]
* [[To: My Family]]
* [[Redpill Realtalk]]
* [[Do we have to trust ourselves when "we don't trust ourselves?"]]
* [[How many stairs are in a staircase?]]
* [[Why should I empathize with those who don't empathize with themselves?]]
* [[Doctor's Unions]]
* [[The Tree of Eudaimonia]]
* [[Lightbot MMOG]]
* [[VPN Interview]]
* [[FOSS]]
* [[DjinniOS (ˈGeniusˈ)]]
* [[Getting to Know Someone in X Questions]]
* [[I'm a revolutionary, not a reformist]]
* [[Open Source Decentralized Gaming Servers]]
* [[Vocation]]
* [[asdf]]
* [[Practical Computer Science]]
This wiki's symbol for [[logical equivalence|Logical Equivalence]]. You are looking at a technical, logical claim when you see this used in the wiki. I mean a lot by it.
```
                    7MM                7MM  7MM                                                7MM       7MM
                     MM                 MM   MM                                                 MM        MM
                     MMpMMMb.  .gP"Ya   MM   MM  ,j3d1h.      `7M'    ,A    `MF',pW"Wq. 7Mb,od8 MM   ,1uxb0x
                     MM    MM ,M'   Yb  MM   MM 6W'   `Wb       VA   ,VAA   ,V 6W'   `Wb MM' "' MM ,AP    MM
                     MM    MM 8Mk0sh3k  MM   MM 8M     M8        VA ,V  VA ,V  8M     M8 MM     MM 8MI    MM
                     MM    MM YM.    ,  MM   MM YA.   ,A9         VVV    VVV   YA.   ,A9 MM     MM `Mb    MM
                    JMML  JMML `Mbmmd' JMML JMML `Ybmd9'           W      W     `Ybmd9' JMML   h0p3 `Wbmd"MML
```

@@display:block;text-align:center;
!!🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 🢔⦗[[Focus|Current Focus of Projects on this Wiki]]⦘🢖 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 🢔⦗[[Vault|The Vault of h0p3]]⦘🢖 
@@

----------------

@@display:block;text-align:right;

!!!!!🢔⦗[[Help|Help: On this Wiki]]⦘🢖 🢔⦗[[Connect|Ways to Connect to this Wiki]]⦘🢖 🢔⦗[[Verify|Cryptographic Verification]]⦘🢖 🢔⦗[[Contact]]⦘🢖 🢔⦗[[Legal|Legal Notice]]⦘🢖

@@
$:/core/ui/SideBar/Open
show
show
show
show
permaview
yes
YYYY.0MM.0DD -- 
hide
hide
show
hide
show
show
hide
show
hide
hide
hide
hide
hide
hide
hide
no
yes
yes
tc-btn-invisible
yes
no
{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "type": "text/vnd.tiddlywiki",
            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
        },
        "$:/core/copyright.txt": {
            "title": "$:/core/copyright.txt",
            "type": "text/plain",
            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright © Jeremy Ruston 2004-2007\nCopyright © UnaMesa Association 2007-2016\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\nRedistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\nRedistributions in binary form must reproduce the above copyright notice, this\nlist of conditions and the following disclaimer in the documentation and/or other\nmaterials provided with the distribution.\n\nNeither the name of the UnaMesa Association nor the names of its contributors may be\nused to endorse or promote products derived from this software without specific\nprior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\nBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\nANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n"
        },
        "$:/core/icon": {
            "title": "$:/core/icon",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-advanced-search-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M74.5651535,87.9848361 C66.9581537,93.0488876 57.8237115,96 48,96 C21.490332,96 0,74.509668 0,48 C0,21.490332 21.490332,0 48,0 C74.509668,0 96,21.490332 96,48 C96,57.8541369 93.0305793,67.0147285 87.9377231,74.6357895 L122.284919,108.982985 C125.978897,112.676963 125.973757,118.65366 122.284271,122.343146 C118.593975,126.033442 112.613238,126.032921 108.92411,122.343793 L74.5651535,87.9848361 Z M48,80 C65.673112,80 80,65.673112 80,48 C80,30.326888 65.673112,16 48,16 C30.326888,16 16,30.326888 16,48 C16,65.673112 30.326888,80 48,80 Z\"></path>\n        <circle cx=\"48\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"28\" cy=\"48\" r=\"8\"></circle>\n        <circle cx=\"68\" cy=\"48\" r=\"8\"></circle>\n    </g>\n</svg>"
        },
        "$:/core/images/auto-height": {
            "title": "$:/core/images/auto-height",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-auto-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M67.9867828,114.356363 L67.9579626,99.8785426 C67.9550688,98.4248183 67.1636987,97.087107 65.8909901,96.3845863 L49.9251455,87.5716209 L47.992126,95.0735397 L79.8995411,95.0735397 C84.1215894,95.0735397 85.4638131,89.3810359 81.686497,87.4948823 L49.7971476,71.5713518 L48.0101917,79.1500092 L79.992126,79.1500092 C84.2093753,79.1500092 85.5558421,73.4676733 81.7869993,71.5753162 L49.805065,55.517008 L48.0101916,63.0917009 L79.9921259,63.0917015 C84.2035118,63.0917016 85.5551434,57.4217887 81.7966702,55.5218807 L65.7625147,47.4166161 L67.9579705,50.9864368 L67.9579705,35.6148245 L77.1715737,44.8284272 C78.7336709,46.3905243 81.2663308,46.3905243 82.8284279,44.8284271 C84.390525,43.2663299 84.390525,40.7336699 82.8284278,39.1715728 L66.8284271,23.1715728 C65.2663299,21.6094757 62.73367,21.6094757 61.1715729,23.1715729 L45.1715729,39.1715729 C43.6094757,40.73367 43.6094757,43.26633 45.1715729,44.8284271 C46.73367,46.3905243 49.26633,46.3905243 50.8284271,44.8284271 L59.9579705,35.6988837 L59.9579705,50.9864368 C59.9579705,52.495201 60.806922,53.8755997 62.1534263,54.5562576 L78.1875818,62.6615223 L79.9921261,55.0917015 L48.0101917,55.0917009 C43.7929424,55.0917008 42.4464755,60.7740368 46.2153183,62.6663939 L78.1972526,78.7247021 L79.992126,71.1500092 L48.0101917,71.1500092 C43.7881433,71.1500092 42.4459197,76.842513 46.2232358,78.7286665 L78.1125852,94.6521971 L79.8995411,87.0735397 L47.992126,87.0735397 C43.8588276,87.0735397 42.4404876,92.5780219 46.0591064,94.5754586 L62.024951,103.388424 L59.9579785,99.8944677 L59.9867142,114.32986 L50.8284271,105.171573 C49.26633,103.609476 46.73367,103.609476 45.1715729,105.171573 C43.6094757,106.73367 43.6094757,109.26633 45.1715729,110.828427 L61.1715729,126.828427 C62.73367,128.390524 65.2663299,128.390524 66.8284271,126.828427 L82.8284278,110.828427 C84.390525,109.26633 84.390525,106.73367 82.8284279,105.171573 C81.2663308,103.609476 78.7336709,103.609476 77.1715737,105.171573 L67.9867828,114.356363 L67.9867828,114.356363 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n</svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\"></svg>"
        },
        "$:/core/images/bold": {
            "title": "$:/core/images/bold",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-bold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.1456583,51.8095238 L41.1456583,21.8711485 L67.4985994,21.8711485 C70.0084159,21.8711485 72.4285598,22.0802967 74.7591036,22.4985994 C77.0896475,22.9169022 79.1512515,23.6638602 80.9439776,24.7394958 C82.7367036,25.8151314 84.170863,27.3090474 85.2464986,29.2212885 C86.3221342,31.1335296 86.859944,33.5835518 86.859944,36.5714286 C86.859944,41.9496067 85.2465147,45.8337882 82.0196078,48.2240896 C78.792701,50.614391 74.6694929,51.8095238 69.6498599,51.8095238 L41.1456583,51.8095238 Z M13,0 L13,128 L75.0280112,128 C80.7647346,128 86.3519803,127.28292 91.789916,125.848739 C97.2278517,124.414559 102.068139,122.203563 106.310924,119.215686 C110.553709,116.22781 113.929959,112.373506 116.439776,107.652661 C118.949592,102.931816 120.204482,97.3445701 120.204482,90.8907563 C120.204482,82.8832466 118.262391,76.0411115 114.378151,70.3641457 C110.493911,64.6871798 104.607883,60.7133634 96.719888,58.442577 C102.456611,55.6937304 106.788968,52.1680887 109.717087,47.8655462 C112.645206,43.5630037 114.109244,38.1849062 114.109244,31.7310924 C114.109244,25.7553389 113.123259,20.7357813 111.151261,16.6722689 C109.179262,12.6087565 106.400578,9.35201972 102.815126,6.90196078 C99.2296739,4.45190185 94.927196,2.68908101 89.907563,1.61344538 C84.8879301,0.537809748 79.3305627,0 73.2352941,0 L13,0 Z M41.1456583,106.128852 L41.1456583,70.9915966 L71.8011204,70.9915966 C77.896389,70.9915966 82.7964334,72.3958776 86.5014006,75.2044818 C90.2063677,78.0130859 92.0588235,82.7039821 92.0588235,89.2773109 C92.0588235,92.6237329 91.4911355,95.3725383 90.3557423,97.5238095 C89.2203491,99.6750808 87.6965548,101.378145 85.7843137,102.633053 C83.8720726,103.887961 81.661077,104.784311 79.1512605,105.322129 C76.641444,105.859947 74.0121519,106.128852 71.2633053,106.128852 L41.1456583,106.128852 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n\t<g fill-rule=\"evenodd\">\n\t    <path d=\"M64,76.3137085 L47.0294734,93.2842351 C43.9038742,96.4098343 38.8399231,96.4084656 35.7157288,93.2842712 C32.5978915,90.166434 32.5915506,85.0947409 35.7157649,81.9705266 L52.6862915,65 L35.7157649,48.0294734 C32.5901657,44.9038742 32.5915344,39.8399231 35.7157288,36.7157288 C38.833566,33.5978915 43.9052591,33.5915506 47.0294734,36.7157649 L64,53.6862915 L80.9705266,36.7157649 C84.0961258,33.5901657 89.1600769,33.5915344 92.2842712,36.7157288 C95.4021085,39.833566 95.4084494,44.9052591 92.2842351,48.0294734 L75.3137085,65 L92.2842351,81.9705266 C95.4098343,85.0961258 95.4084656,90.1600769 92.2842712,93.2842712 C89.166434,96.4021085 84.0947409,96.4084494 80.9705266,93.2842351 L64,76.3137085 Z M64,129 C99.346224,129 128,100.346224 128,65 C128,29.653776 99.346224,1 64,1 C28.653776,1 1.13686838e-13,29.653776 1.13686838e-13,65 C1.13686838e-13,100.346224 28.653776,129 64,129 Z M64,113 C90.509668,113 112,91.509668 112,65 C112,38.490332 90.509668,17 64,17 C37.490332,17 16,38.490332 16,65 C16,91.509668 37.490332,113 64,113 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-down tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 40.500000) rotate(-270.000000) translate(-64.000000, -40.500000) translate(-22.500000, -26.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-left tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\" version=\"1.1\">\n    <g fill-rule=\"evenodd\" transform=\"translate(92.500000, 64.000000) rotate(-180.000000) translate(-92.500000, -64.000000) translate(6.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-right tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-48.000000, -3.000000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-chevron-up tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n\t<g fill-rule=\"evenodd\" transform=\"translate(64.000000, 89.500000) rotate(-90.000000) translate(-64.000000, -89.500000) translate(-22.500000, 22.500000)\">\n        <path d=\"M112.743107,112.12741 C111.310627,113.561013 109.331747,114.449239 107.145951,114.449239 L27.9777917,114.449239 C23.6126002,114.449239 20.0618714,110.904826 20.0618714,106.532572 C20.0618714,102.169214 23.6059497,98.6159054 27.9777917,98.6159054 L99.2285381,98.6159054 L99.2285381,27.365159 C99.2285381,22.9999675 102.77295,19.4492387 107.145205,19.4492387 C111.508562,19.4492387 115.061871,22.993317 115.061871,27.365159 L115.061871,106.533318 C115.061871,108.71579 114.175869,110.694669 112.743378,112.127981 Z\" transform=\"translate(67.561871, 66.949239) rotate(-45.000000) translate(-67.561871, -66.949239) \"></path>\n        <path d=\"M151.35638,112.12741 C149.923899,113.561013 147.94502,114.449239 145.759224,114.449239 L66.5910645,114.449239 C62.225873,114.449239 58.6751442,110.904826 58.6751442,106.532572 C58.6751442,102.169214 62.2192225,98.6159054 66.5910645,98.6159054 L137.841811,98.6159054 L137.841811,27.365159 C137.841811,22.9999675 141.386223,19.4492387 145.758478,19.4492387 C150.121835,19.4492387 153.675144,22.993317 153.675144,27.365159 L153.675144,106.533318 C153.675144,108.71579 152.789142,110.694669 151.356651,112.127981 Z\" transform=\"translate(106.175144, 66.949239) rotate(-45.000000) translate(-106.175144, -66.949239) \"></path>\n\t</g>\n</svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-clone-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M32.2650915,96 L32.2650915,120.002359 C32.2650915,124.419334 35.8432884,128 40.2627323,128 L120.002359,128 C124.419334,128 128,124.421803 128,120.002359 L128,40.2627323 C128,35.8457573 124.421803,32.2650915 120.002359,32.2650915 L96,32.2650915 L96,48 L108.858899,48 C110.519357,48 111.853018,49.3405131 111.853018,50.9941198 L111.853018,108.858899 C111.853018,110.519357 110.512505,111.853018 108.858899,111.853018 L50.9941198,111.853018 C49.333661,111.853018 48,110.512505 48,108.858899 L48,96 L32.2650915,96 Z\"></path>\n        <path d=\"M40,56 L32.0070969,56 C27.5881712,56 24,52.418278 24,48 C24,43.5907123 27.5848994,40 32.0070969,40 L40,40 L40,32.0070969 C40,27.5881712 43.581722,24 48,24 C52.4092877,24 56,27.5848994 56,32.0070969 L56,40 L63.9929031,40 C68.4118288,40 72,43.581722 72,48 C72,52.4092877 68.4151006,56 63.9929031,56 L56,56 L56,63.9929031 C56,68.4118288 52.418278,72 48,72 C43.5907123,72 40,68.4151006 40,63.9929031 L40,56 Z M7.9992458,0 C3.58138434,0 0,3.5881049 0,7.9992458 L0,88.0007542 C0,92.4186157 3.5881049,96 7.9992458,96 L88.0007542,96 C92.4186157,96 96,92.4118951 96,88.0007542 L96,7.9992458 C96,3.58138434 92.4118951,0 88.0007542,0 L7.9992458,0 Z M19.0010118,16 C17.3435988,16 16,17.336731 16,19.0010118 L16,76.9989882 C16,78.6564012 17.336731,80 19.0010118,80 L76.9989882,80 C78.6564012,80 80,78.663269 80,76.9989882 L80,19.0010118 C80,17.3435988 78.663269,16 76.9989882,16 L19.0010118,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-close-all-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\" transform=\"translate(-23.000000, -23.000000)\">\n        <path d=\"M43,131 L22.9976794,131 C18.5827987,131 15,127.418278 15,123 C15,118.590712 18.5806831,115 22.9976794,115 L43,115 L43,94.9976794 C43,90.5827987 46.581722,87 51,87 C55.4092877,87 59,90.5806831 59,94.9976794 L59,115 L79.0023206,115 C83.4172013,115 87,118.581722 87,123 C87,127.409288 83.4193169,131 79.0023206,131 L59,131 L59,151.002321 C59,155.417201 55.418278,159 51,159 C46.5907123,159 43,155.419317 43,151.002321 L43,131 Z\" transform=\"translate(51.000000, 123.000000) rotate(-45.000000) translate(-51.000000, -123.000000) \"></path>\n        <path d=\"M43,59 L22.9976794,59 C18.5827987,59 15,55.418278 15,51 C15,46.5907123 18.5806831,43 22.9976794,43 L43,43 L43,22.9976794 C43,18.5827987 46.581722,15 51,15 C55.4092877,15 59,18.5806831 59,22.9976794 L59,43 L79.0023206,43 C83.4172013,43 87,46.581722 87,51 C87,55.4092877 83.4193169,59 79.0023206,59 L59,59 L59,79.0023206 C59,83.4172013 55.418278,87 51,87 C46.5907123,87 43,83.4193169 43,79.0023206 L43,59 Z\" transform=\"translate(51.000000, 51.000000) rotate(-45.000000) translate(-51.000000, -51.000000) \"></path>\n        <path d=\"M115,59 L94.9976794,59 C90.5827987,59 87,55.418278 87,51 C87,46.5907123 90.5806831,43 94.9976794,43 L115,43 L115,22.9976794 C115,18.5827987 118.581722,15 123,15 C127.409288,15 131,18.5806831 131,22.9976794 L131,43 L151.002321,43 C155.417201,43 159,46.581722 159,51 C159,55.4092877 155.419317,59 151.002321,59 L131,59 L131,79.0023206 C131,83.4172013 127.418278,87 123,87 C118.590712,87 115,83.4193169 115,79.0023206 L115,59 Z\" transform=\"translate(123.000000, 51.000000) rotate(-45.000000) translate(-123.000000, -51.000000) \"></path>\n        <path d=\"M115,131 L94.9976794,131 C90.5827987,131 87,127.418278 87,123 C87,118.590712 90.5806831,115 94.9976794,115 L115,115 L115,94.9976794 C115,90.5827987 118.581722,87 123,87 C127.409288,87 131,90.5806831 131,94.9976794 L131,115 L151.002321,115 C155.417201,115 159,118.581722 159,123 C159,127.409288 155.419317,131 151.002321,131 L131,131 L131,151.002321 C131,155.417201 127.418278,159 123,159 C118.590712,159 115,155.419317 115,151.002321 L115,131 Z\" transform=\"translate(123.000000, 123.000000) rotate(-45.000000) translate(-123.000000, -123.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M65.0864256,75.4091629 L14.9727349,125.522854 C11.8515951,128.643993 6.78104858,128.64922 3.65685425,125.525026 C0.539017023,122.407189 0.5336324,117.334539 3.65902635,114.209145 L53.7727171,64.0954544 L3.65902635,13.9817637 C0.537886594,10.8606239 0.532659916,5.79007744 3.65685425,2.6658831 C6.77469148,-0.451954124 11.8473409,-0.457338747 14.9727349,2.66805521 L65.0864256,52.7817459 L115.200116,2.66805521 C118.321256,-0.453084553 123.391803,-0.458311231 126.515997,2.6658831 C129.633834,5.78372033 129.639219,10.8563698 126.513825,13.9817637 L76.4001341,64.0954544 L126.513825,114.209145 C129.634965,117.330285 129.640191,122.400831 126.515997,125.525026 C123.39816,128.642863 118.32551,128.648248 115.200116,125.522854 L65.0864256,75.4091629 L65.0864256,75.4091629 Z\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-close-others-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z M64,96 C81.673112,96 96,81.673112 96,64 C96,46.326888 81.673112,32 64,32 C46.326888,32 32,46.326888 32,64 C32,81.673112 46.326888,96 64,96 Z M64,80 C72.836556,80 80,72.836556 80,64 C80,55.163444 72.836556,48 64,48 C55.163444,48 48,55.163444 48,64 C48,72.836556 55.163444,80 64,80 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\" transform=\"translate(12.000000, 0.000000)\">\n        <rect x=\"0\" y=\"11\" width=\"105\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"28\" y=\"0\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"8\" y=\"112\" width=\"88\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"56\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n        <rect x=\"32\" y=\"16\" width=\"16\" height=\"112\" rx=\"8\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M3.52445141,76.8322939 C2.07397484,75.3828178 1.17514421,73.3795385 1.17514421,71.1666288 L1.17514421,23.1836596 C1.17514421,18.7531992 4.75686621,15.1751442 9.17514421,15.1751442 C13.5844319,15.1751442 17.1751442,18.7606787 17.1751442,23.1836596 L17.1751442,63.1751442 L119.173716,63.1751442 C123.590457,63.1751442 127.175144,66.7568662 127.175144,71.1751442 C127.175144,75.5844319 123.592783,79.1751442 119.173716,79.1751442 L9.17657227,79.1751442 C6.96796403,79.1751442 4.9674142,78.279521 3.51911285,76.8315312 Z\" id=\"Rectangle-285\" transform=\"translate(64.175144, 47.175144) rotate(-45.000000) translate(-64.175144, -47.175144) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <path d=\"M109.35638,81.3533152 C107.923899,82.7869182 105.94502,83.6751442 103.759224,83.6751442 L24.5910645,83.6751442 C20.225873,83.6751442 16.6751442,80.1307318 16.6751442,75.7584775 C16.6751442,71.3951199 20.2192225,67.8418109 24.5910645,67.8418109 L95.8418109,67.8418109 L95.8418109,-3.40893546 C95.8418109,-7.77412698 99.3862233,-11.3248558 103.758478,-11.3248558 C108.121835,-11.3248558 111.675144,-7.78077754 111.675144,-3.40893546 L111.675144,75.7592239 C111.675144,77.9416955 110.789142,79.9205745 109.356651,81.3538862 Z\" transform=\"translate(64.175144, 36.175144) rotate(45.000000) translate(-64.175144, -36.175144) \"></path>\n</svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-download-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path class=\"tc-image-download-button-ring\" d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"/><path d=\"M34.3496823,66.4308767 L61.2415823,93.634668 C63.0411536,95.4551107 65.9588502,95.4551107 67.7584215,93.634668 L94.6503215,66.4308767 C96.4498928,64.610434 96.4498928,61.6588981 94.6503215,59.8384554 C93.7861334,58.9642445 92.6140473,58.4731195 91.3919019,58.4731195 L82.9324098,58.4731195 C80.3874318,58.4731195 78.3243078,56.3860674 78.3243078,53.8115729 L78.3243078,38.6615466 C78.3243078,36.0870521 76.2611837,34 73.7162058,34 L55.283798,34 C52.7388201,34 50.675696,36.0870521 50.675696,38.6615466 L50.675696,38.6615466 L50.675696,53.8115729 C50.675696,56.3860674 48.612572,58.4731195 46.0675941,58.4731195 L37.608102,58.4731195 C35.063124,58.4731195 33,60.5601716 33,63.134666 C33,64.3709859 33.4854943,65.5566658 34.3496823,66.4308767 L34.3496823,66.4308767 Z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M116.870058,45.3431458 L108.870058,45.3431458 L108.870058,45.3431458 L108.870058,61.3431458 L116.870058,61.3431458 L116.870058,45.3431458 Z M124.870058,45.3431458 L127.649881,45.3431458 C132.066101,45.3431458 135.656854,48.9248678 135.656854,53.3431458 C135.656854,57.7524334 132.07201,61.3431458 127.649881,61.3431458 L124.870058,61.3431458 L124.870058,45.3431458 Z M100.870058,45.3431458 L15.6638275,45.3431458 C15.5064377,45.3431458 15.3501085,45.3476943 15.1949638,45.3566664 L15.1949638,45.3566664 C15.0628002,45.3477039 14.928279,45.3431458 14.7913977,45.3431458 C6.68160973,45.3431458 -8.34314575,53.3431458 -8.34314575,53.3431458 C-8.34314575,53.3431458 6.85614548,61.3431458 14.7913977,61.3431458 C14.9266533,61.3431458 15.0596543,61.3384973 15.190398,61.3293588 C15.3470529,61.3385075 15.5049057,61.3431458 15.6638275,61.3431458 L100.870058,61.3431458 L100.870058,45.3431458 L100.870058,45.3431458 Z\" transform=\"translate(63.656854, 53.343146) rotate(-45.000000) translate(-63.656854, -53.343146) \"></path>\n        <path d=\"M35.1714596,124.189544 C41.9594858,123.613403 49.068777,121.917633 58.85987,118.842282 C60.6854386,118.268877 62.4306907,117.705515 65.1957709,116.802278 C81.1962861,111.575575 87.0734839,109.994907 93.9414474,109.655721 C102.29855,109.242993 107.795169,111.785371 111.520478,118.355045 C112.610163,120.276732 115.051363,120.951203 116.97305,119.861518 C118.894737,118.771832 119.569207,116.330633 118.479522,114.408946 C113.146151,105.003414 104.734907,101.112919 93.5468356,101.66546 C85.6716631,102.054388 79.4899908,103.716944 62.7116783,109.197722 C59.9734132,110.092199 58.2519873,110.64787 56.4625698,111.20992 C37.002649,117.322218 25.6914684,118.282267 16.8654804,112.957098 C14.9739614,111.815848 12.5154166,112.424061 11.3741667,114.31558 C10.2329168,116.207099 10.84113,118.665644 12.7326489,119.806894 C19.0655164,123.627836 26.4866335,124.926678 35.1714596,124.189544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/erase": {
            "title": "$:/core/images/erase",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-erase tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60.0870401,127.996166 L123.102318,64.980888 C129.636723,58.4464827 129.629513,47.8655877 123.098967,41.3350425 L99.4657866,17.7018617 C92.927448,11.1635231 82.3486358,11.1698163 75.8199411,17.698511 L4.89768189,88.6207702 C-1.63672343,95.1551755 -1.6295126,105.736071 4.90103262,112.266616 L20.6305829,127.996166 L60.0870401,127.996166 Z M25.1375576,120.682546 L10.812569,106.357558 C7.5455063,103.090495 7.54523836,97.793808 10.8048093,94.5342371 L46.2691086,59.0699377 L81.7308914,94.5317205 L55.5800654,120.682546 L25.1375576,120.682546 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/excise": {
            "title": "$:/core/images/excise",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-excise tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M56,107.313709 L53.6568542,109.656854 C50.5326599,112.781049 45.4673401,112.781049 42.3431457,109.656854 C39.2189514,106.53266 39.2189514,101.46734 42.3431458,98.3431457 L58.3431458,82.3431457 C61.4673401,79.2189514 66.5326599,79.2189514 69.6568542,82.3431458 L85.6568542,98.3431458 C88.7810486,101.46734 88.7810486,106.53266 85.6568542,109.656854 C82.5326599,112.781049 77.4673401,112.781049 74.3431458,109.656854 L72,107.313708 L72,121.597798 C72,125.133636 68.418278,128 64,128 C59.581722,128 56,125.133636 56,121.597798 L56,107.313709 Z M0,40.0070969 C0,35.5848994 3.59071231,32 8,32 C12.418278,32 16,35.5881712 16,40.0070969 L16,71.9929031 C16,76.4151006 12.4092877,80 8,80 C3.581722,80 0,76.4118288 0,71.9929031 L0,40.0070969 Z M32,40.0070969 C32,35.5848994 35.5907123,32 40,32 C44.418278,32 48,35.5881712 48,40.0070969 L48,71.9929031 C48,76.4151006 44.4092877,80 40,80 C35.581722,80 32,76.4118288 32,71.9929031 L32,40.0070969 Z M80,40.0070969 C80,35.5848994 83.5907123,32 88,32 C92.418278,32 96,35.5881712 96,40.0070969 L96,71.9929031 C96,76.4151006 92.4092877,80 88,80 C83.581722,80 80,76.4118288 80,71.9929031 L80,40.0070969 Z M56,8.00709688 C56,3.58489938 59.5907123,0 64,0 C68.418278,0 72,3.58817117 72,8.00709688 L72,39.9929031 C72,44.4151006 68.4092877,48 64,48 C59.581722,48 56,44.4118288 56,39.9929031 L56,8.00709688 Z M112,40.0070969 C112,35.5848994 115.590712,32 120,32 C124.418278,32 128,35.5881712 128,40.0070969 L128,71.9929031 C128,76.4151006 124.409288,80 120,80 C115.581722,80 112,76.4118288 112,71.9929031 L112,40.0070969 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-export-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00348646,127.999999 C8.00464867,128 8.00581094,128 8.00697327,128 L119.993027,128 C122.205254,128 124.207939,127.101378 125.657096,125.651198 L125.656838,125.65759 C127.104563,124.210109 128,122.21009 128,119.999949 L128,56.0000511 C128,51.5817449 124.409288,48 120,48 C115.581722,48 112,51.5797863 112,56.0000511 L112,112 L16,112 L16,56.0000511 C16,51.5817449 12.4092877,48 8,48 C3.581722,48 7.10542736e-15,51.5797863 7.10542736e-15,56.0000511 L7.10542736e-15,119.999949 C7.10542736e-15,124.418255 3.59071231,128 8,128 C8.00116233,128 8.0023246,128 8.00348681,127.999999 Z M56.6235633,27.3113724 L47.6580188,36.2769169 C44.5333664,39.4015692 39.4634864,39.4061295 36.339292,36.2819351 C33.2214548,33.1640979 33.2173444,28.0901742 36.3443103,24.9632084 L58.9616908,2.34582788 C60.5248533,0.782665335 62.5748436,0.000361191261 64.624516,2.38225238e-14 L64.6193616,0.00151809229 C66.6695374,0.000796251595 68.7211167,0.781508799 70.2854358,2.34582788 L92.9028163,24.9632084 C96.0274686,28.0878607 96.0320289,33.1577408 92.9078345,36.2819351 C89.7899973,39.3997724 84.7160736,39.4038827 81.5891078,36.2769169 L72.6235633,27.3113724 L72.6235633,88.5669606 C72.6235633,92.9781015 69.0418413,96.5662064 64.6235633,96.5662064 C60.2142756,96.5662064 56.6235633,92.984822 56.6235633,88.5669606 L56.6235633,27.3113724 L56.6235633,27.3113724 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/file": {
            "title": "$:/core/images/file",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-file tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M111.96811,30.5 L112,30.5 L112,119.999079 C112,124.417866 108.419113,128 104.000754,128 L23.9992458,128 C19.5813843,128 16,124.417687 16,119.999079 L16,8.00092105 C16,3.58213437 19.5808867,0 23.9992458,0 L81,0 L81,0.0201838424 C83.1589869,-0.071534047 85.3482153,0.707077645 86.9982489,2.35711116 L109.625176,24.9840387 C111.151676,26.510538 111.932942,28.4998414 111.96811,30.5 L111.96811,30.5 Z M81,8 L24,8 L24,120 L104,120 L104,30.5 L89.0003461,30.5 C84.5818769,30.5 81,26.9216269 81,22.4996539 L81,8 Z\"></path>\n        <rect x=\"32\" y=\"36\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"52\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"68\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"84\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"100\" width=\"64\" height=\"8\" rx=\"4\"></rect>\n        <rect x=\"32\" y=\"20\" width=\"40\" height=\"8\" rx=\"4\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/fixed-height": {
            "title": "$:/core/images/fixed-height",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fixed-height tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60,35.6568542 L50.8284271,44.8284271 C49.26633,46.3905243 46.73367,46.3905243 45.1715729,44.8284271 C43.6094757,43.26633 43.6094757,40.73367 45.1715729,39.1715729 L61.1715729,23.1715729 C62.73367,21.6094757 65.2663299,21.6094757 66.8284271,23.1715728 L82.8284278,39.1715728 C84.390525,40.7336699 84.390525,43.2663299 82.8284279,44.8284271 C81.2663308,46.3905243 78.7336709,46.3905243 77.1715737,44.8284272 L68,35.6568539 L68,93.3431461 L77.1715737,84.1715728 C78.7336709,82.6094757 81.2663308,82.6094757 82.8284279,84.1715729 C84.390525,85.7336701 84.390525,88.2663301 82.8284278,89.8284272 L66.8284271,105.828427 C65.2663299,107.390524 62.73367,107.390524 61.1715729,105.828427 L45.1715729,89.8284271 C43.6094757,88.26633 43.6094757,85.73367 45.1715729,84.1715729 C46.73367,82.6094757 49.26633,82.6094757 50.8284271,84.1715729 L60,93.3431458 L60,35.6568542 L60,35.6568542 Z M16,116 L112,116 C114.209139,116 116,114.209139 116,112 C116,109.790861 114.209139,108 112,108 L16,108 C13.790861,108 12,109.790861 12,112 C12,114.209139 13.790861,116 16,116 L16,116 Z M16,20 L112,20 C114.209139,20 116,18.209139 116,16 C116,13.790861 114.209139,12 112,12 L16,12 C13.790861,12 12,13.790861 12,16 C12,18.209139 13.790861,20 16,20 L16,20 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-all-button": {
            "title": "$:/core/images/fold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,58.6235628 C61.9791013,58.6242848 59.9275217,57.8435723 58.3632024,56.279253 L35.7458219,33.6618725 C32.6211696,30.5372202 32.6166093,25.4673401 35.7408036,22.3431458 C38.8586409,19.2253085 43.9325646,19.2211982 47.0595304,22.348164 L64.0250749,39.3137085 L80.9906194,22.348164 C84.1152717,19.2235117 89.1851518,19.2189514 92.3093461,22.3431458 C95.4271834,25.460983 95.4312937,30.5349067 92.3043279,33.6618725 L69.6869474,56.279253 C68.1237851,57.8424153 66.0737951,58.6247195 64.0241231,58.6250809 Z\" transform=\"translate(64.024316, 39.313708) scale(1, -1) translate(-64.024316, -39.313708) \"></path>\n        <path d=\"M64.0292774,123.621227 C61.9791013,123.621949 59.9275217,122.841236 58.3632024,121.276917 L35.7458219,98.6595365 C32.6211696,95.5348842 32.6166093,90.4650041 35.7408036,87.3408098 C38.8586409,84.2229725 43.9325646,84.2188622 47.0595304,87.345828 L64.0250749,104.311373 L80.9906194,87.345828 C84.1152717,84.2211757 89.1851518,84.2166154 92.3093461,87.3408098 C95.4271834,90.458647 95.4312937,95.5325707 92.3043279,98.6595365 L69.6869474,121.276917 C68.1237851,122.840079 66.0737951,123.622383 64.0241231,123.622745 Z\" transform=\"translate(64.024316, 104.311372) scale(1, -1) translate(-64.024316, -104.311372) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-button": {
            "title": "$:/core/images/fold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M64.0292774,63.6235628 C61.9791013,63.6242848 59.9275217,62.8435723 58.3632024,61.279253 L35.7458219,38.6618725 C32.6211696,35.5372202 32.6166093,30.4673401 35.7408036,27.3431458 C38.8586409,24.2253085 43.9325646,24.2211982 47.0595304,27.348164 L64.0250749,44.3137085 L80.9906194,27.348164 C84.1152717,24.2235117 89.1851518,24.2189514 92.3093461,27.3431458 C95.4271834,30.460983 95.4312937,35.5349067 92.3043279,38.6618725 L69.6869474,61.279253 C68.1237851,62.8424153 66.0737951,63.6247195 64.0241231,63.6250809 Z\" transform=\"translate(64.024316, 44.313708) scale(1, -1) translate(-64.024316, -44.313708) \"></path>\n        <path d=\"M64.0049614,105.998482 C61.9547853,105.999204 59.9032057,105.218491 58.3388864,103.654172 L35.7215059,81.0367916 C32.5968535,77.9121393 32.5922933,72.8422592 35.7164876,69.7180649 C38.8343248,66.6002276 43.9082485,66.5961173 47.0352144,69.7230831 L64.0007589,86.6886276 L80.9663034,69.7230831 C84.0909557,66.5984308 89.1608358,66.5938705 92.2850301,69.7180649 C95.4028673,72.8359021 95.4069777,77.9098258 92.2800119,81.0367916 L69.6626314,103.654172 C68.099469,105.217334 66.0494791,105.999639 63.999807,106 Z\" transform=\"translate(64.000000, 86.688628) scale(1, -1) translate(-64.000000, -86.688628) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/fold-others-button": {
            "title": "$:/core/images/fold-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-fold-others tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"56.0314331\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M101.657101,104.948818 C100.207918,103.498614 98.2051847,102.599976 95.9929031,102.599976 L72,102.599976 L72,78.6070725 C72,76.3964271 71.1036108,74.3936927 69.6545293,72.9441002 L69.6571005,72.9488183 C68.2079177,71.4986143 66.2051847,70.5999756 63.9929031,70.5999756 L32.0070969,70.5999756 C27.5881712,70.5999756 24,74.1816976 24,78.5999756 C24,83.0092633 27.5848994,86.5999756 32.0070969,86.5999756 L56,86.5999756 L56,110.592879 C56,112.803524 56.8963895,114.806259 58.3454713,116.255852 L58.3429,116.251133 C59.7920828,117.701337 61.7948156,118.599976 64.0070969,118.599976 L88,118.599976 L88,142.592879 C88,147.011804 91.581722,150.599976 96,150.599976 C100.409288,150.599976 104,147.015076 104,142.592879 L104,110.607072 C104,108.396427 103.103611,106.393693 101.654529,104.9441 Z\" transform=\"translate(64.000000, 110.599976) rotate(-45.000000) translate(-64.000000, -110.599976) \"></path>\n        <path d=\"M101.725643,11.7488671 C100.27646,10.2986632 98.2737272,9.40002441 96.0614456,9.40002441 L72.0685425,9.40002441 L72.0685425,-14.5928787 C72.0685425,-16.8035241 71.1721533,-18.8062584 69.7230718,-20.255851 L69.725643,-20.2511329 C68.2764602,-21.7013368 66.2737272,-22.5999756 64.0614456,-22.5999756 L32.0756394,-22.5999756 C27.6567137,-22.5999756 24.0685425,-19.0182536 24.0685425,-14.5999756 C24.0685425,-10.1906879 27.6534419,-6.59997559 32.0756394,-6.59997559 L56.0685425,-6.59997559 L56.0685425,17.3929275 C56.0685425,19.6035732 56.964932,21.6063078 58.4140138,23.0559004 L58.4114425,23.0511823 C59.8606253,24.5013859 61.8633581,25.4000244 64.0756394,25.4000244 L88.0685425,25.4000244 L88.0685425,49.3929275 C88.0685425,53.8118532 91.6502645,57.4000244 96.0685425,57.4000244 C100.47783,57.4000244 104.068542,53.815125 104.068542,49.3929275 L104.068542,17.4071213 C104.068542,15.1964759 103.172153,13.1937416 101.723072,11.744149 Z\" transform=\"translate(64.068542, 17.400024) scale(1, -1) rotate(-45.000000) translate(-64.068542, -17.400024) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/folder": {
            "title": "$:/core/images/folder",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-folder tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.6943257,128.000004 L7.99859666,128.000004 C3.5810937,128.000004 0,124.413822 0,119.996384 L0,48.0036243 C0,43.5833471 3.58387508,40.0000044 7.99859666,40.0000044 L16,40.0000044 L16,31.9999914 C16,27.5817181 19.5783731,24 24.0003461,24 L55.9996539,24 C60.4181231,24 64,27.5800761 64,31.9999914 L64,40.0000044 L104.001403,40.0000044 C108.418906,40.0000044 112,43.5861868 112,48.0036243 L112,59.8298353 L104,59.7475921 L104,51.9994189 C104,49.7887607 102.207895,48.0000044 99.9972215,48.0000044 L56,48.0000044 L56,36.0000255 C56,33.7898932 54.2072328,32 51.9957423,32 L28.0042577,32 C25.7890275,32 24,33.7908724 24,36.0000255 L24,48.0000044 L12.0027785,48.0000044 C9.78987688,48.0000044 8,49.7906032 8,51.9994189 L8,116.00059 C8,118.211248 9.79210499,120.000004 12.0027785,120.000004 L58.7630167,120.000004 L55.6943257,128.000004 L55.6943257,128.000004 Z\"></path>\n        <path d=\"M23.8728955,55.5 L119.875702,55.5 C124.293205,55.5 126.87957,59.5532655 125.650111,64.5630007 L112.305967,118.936999 C111.077582,123.942356 106.497904,128 102.083183,128 L6.08037597,128 C1.66287302,128 -0.923492342,123.946735 0.305967145,118.936999 L13.650111,64.5630007 C14.878496,59.5576436 19.4581739,55.5 23.8728955,55.5 L23.8728955,55.5 L23.8728955,55.5 Z M25.6530124,64 L113.647455,64 C115.858129,64 117.151473,66.0930612 116.538306,68.6662267 L105.417772,115.333773 C104.803671,117.910859 102.515967,120 100.303066,120 L12.3086228,120 C10.0979492,120 8.8046054,117.906939 9.41777189,115.333773 L20.5383062,68.6662267 C21.1524069,66.0891409 23.4401107,64 25.6530124,64 L25.6530124,64 L25.6530124,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-full-screen-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g>\n        <g>\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 104.000000) rotate(-180.000000) translate(-104.000000, -104.000000) translate(80.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(24.000000, 104.000000) rotate(-90.000000) translate(-24.000000, -104.000000) translate(0.000000, 80.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n        <g transform=\"translate(104.000000, 24.000000) rotate(90.000000) translate(-104.000000, -24.000000) translate(80.000000, 0.000000)\">\n            <path d=\"M5.29777586e-31,8 C1.59060409e-15,3.581722 3.581722,0 8,0 L40,0 C44.418278,0 48,3.581722 48,8 C48,12.418278 44.418278,16 40,16 L16,16 L16,40 C16,44.418278 12.418278,48 8,48 C3.581722,48 -3.55271368e-15,44.418278 0,40 L3.55271368e-15,8 Z\"></path>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-github tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n        <g fill-rule=\"evenodd\">\n            <path d=\"M63.9383506,1.60695328 C28.6017227,1.60695328 -0.055756057,30.2970814 -0.055756057,65.6906208 C-0.055756057,94.003092 18.2804728,118.019715 43.7123154,126.493393 C46.9143781,127.083482 48.0812647,125.104717 48.0812647,123.405261 C48.0812647,121.886765 48.02626,117.85449 47.9948287,112.508284 C30.1929317,116.379268 26.4368926,103.916587 26.4368926,103.916587 C23.5255693,96.5129372 19.3294921,94.5420399 19.3294921,94.5420399 C13.5186324,90.5687739 19.7695302,90.6474524 19.7695302,90.6474524 C26.1933001,91.099854 29.5721638,97.2525155 29.5721638,97.2525155 C35.2808718,107.044059 44.5531024,104.215566 48.1991321,102.575118 C48.7806109,98.4366275 50.4346826,95.612068 52.2616263,94.0109598 C38.0507543,92.3941159 23.1091047,86.8944862 23.1091047,62.3389152 C23.1091047,55.3443933 25.6039634,49.6205298 29.6978889,45.1437211 C29.0378318,43.5229433 26.8415704,37.0044266 30.3265147,28.1845627 C30.3265147,28.1845627 35.6973364,26.4615028 47.9241083,34.7542205 C53.027764,33.330139 58.5046663,32.6220321 63.9462084,32.5944947 C69.3838216,32.6220321 74.856795,33.330139 79.9683085,34.7542205 C92.1872225,26.4615028 97.5501864,28.1845627 97.5501864,28.1845627 C101.042989,37.0044266 98.8467271,43.5229433 98.190599,45.1437211 C102.292382,49.6205298 104.767596,55.3443933 104.767596,62.3389152 C104.767596,86.9574291 89.8023734,92.3744463 75.5482834,93.9598188 C77.8427675,95.9385839 79.8897303,99.8489072 79.8897303,105.828476 C79.8897303,114.392635 79.8111521,121.304544 79.8111521,123.405261 C79.8111521,125.120453 80.966252,127.114954 84.2115327,126.489459 C109.623731,117.996111 127.944244,93.9952241 127.944244,65.6906208 C127.944244,30.2970814 99.2867652,1.60695328 63.9383506,1.60695328\"></path>\n        </g>\n    </svg>\n"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-globe tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M72.8111354,37.1275855 C72.8111354,37.9789875 72.8111354,38.8303894 72.8111354,39.6817913 C72.8111354,41.8784743 73.7885604,46.5631866 72.8111354,48.5143758 C71.3445471,51.4420595 68.1617327,52.0543531 66.4170946,54.3812641 C65.2352215,55.9575873 61.7987417,64.9821523 62.7262858,67.3005778 C66.6959269,77.2228204 74.26087,70.4881886 80.6887657,76.594328 C81.5527211,77.415037 83.5758191,78.8666631 83.985137,79.8899578 C87.2742852,88.1128283 76.4086873,94.8989524 87.7419325,106.189751 C88.9872885,107.430443 91.555495,102.372895 91.8205061,101.575869 C92.6726866,99.0129203 98.5458765,96.1267309 100.908882,94.5234439 C102.928056,93.1534443 105.782168,91.8557166 107.236936,89.7775886 C109.507391,86.5342557 108.717505,82.2640435 110.334606,79.0328716 C112.473794,74.7585014 114.163418,69.3979002 116.332726,65.0674086 C120.230862,57.2857361 121.054075,67.1596684 121.400359,67.5059523 C121.757734,67.8633269 122.411167,67.5059523 122.916571,67.5059523 C123.011132,67.5059523 124.364019,67.6048489 124.432783,67.5059523 C125.0832,66.5705216 123.390209,49.5852316 123.114531,48.2089091 C121.710578,41.1996597 116.17083,32.4278331 111.249523,27.7092761 C104.975994,21.6942076 104.160516,11.5121686 92.9912146,12.7547535 C92.7872931,12.7774397 87.906794,22.9027026 85.2136766,26.2672064 C81.486311,30.9237934 82.7434931,22.1144904 78.6876623,22.1144904 C78.6065806,22.1144904 77.5045497,22.0107615 77.4353971,22.1144904 C76.8488637,22.9942905 75.9952305,26.0101404 75.1288269,26.5311533 C74.8635477,26.6906793 73.4071369,26.2924966 73.2826811,26.5311533 C71.0401728,30.8313939 81.5394677,28.7427264 79.075427,34.482926 C76.7225098,39.9642538 72.747373,32.4860199 72.747373,43.0434079\"></path>\n        <path d=\"M44.4668556,7.01044608 C54.151517,13.1403033 45.1489715,19.2084878 47.1611905,23.2253896 C48.8157833,26.5283781 51.4021933,28.6198851 48.8753629,33.038878 C46.8123257,36.6467763 42.0052989,37.0050492 39.251679,39.7621111 C36.2115749,42.8060154 33.7884281,48.7028116 32.4624592,52.6732691 C30.8452419,57.5158356 47.0088721,59.5388126 44.5246867,63.6811917 C43.1386839,65.9923513 37.7785192,65.1466282 36.0880227,63.8791519 C34.9234453,63.0059918 32.4946425,63.3331166 31.6713597,62.0997342 C29.0575851,58.1839669 29.4107339,54.0758543 28.0457962,49.9707786 C27.1076833,47.1493864 21.732611,47.8501656 20.2022714,49.3776393 C19.6790362,49.8998948 19.8723378,51.1703278 19.8723378,51.8829111 C19.8723378,57.1682405 26.9914913,55.1986414 26.9914913,58.3421973 C26.9914913,72.9792302 30.9191897,64.8771867 38.1313873,69.6793121 C48.1678018,76.3618966 45.9763926,76.981595 53.0777543,84.0829567 C56.7511941,87.7563965 60.8192437,87.7689005 62.503478,93.3767069 C64.1046972,98.7081071 53.1759798,98.7157031 50.786754,100.825053 C49.663965,101.816317 47.9736094,104.970571 46.5680513,105.439676 C44.7757187,106.037867 43.334221,105.93607 41.6242359,107.219093 C39.1967302,109.040481 37.7241465,112.151588 37.6034934,112.030935 C35.4555278,109.88297 34.0848666,96.5511248 33.7147244,93.7726273 C33.1258872,89.3524817 28.1241923,88.2337027 26.7275443,84.7420826 C25.1572737,80.8164061 28.2518481,75.223612 25.599097,70.9819941 C19.0797019,60.557804 13.7775712,56.4811506 10.2493953,44.6896152 C9.3074899,41.5416683 13.5912267,38.1609942 15.1264825,35.8570308 C17.0029359,33.0410312 17.7876232,30.0028946 19.8723378,27.2224065 C22.146793,24.1888519 40.8551166,9.46076832 43.8574051,8.63490613 L44.4668556,7.01044608 Z\"></path>\n        <path d=\"M64,126 C98.2416545,126 126,98.2416545 126,64 C126,29.7583455 98.2416545,2 64,2 C29.7583455,2 2,29.7583455 2,64 C2,98.2416545 29.7583455,126 64,126 Z M64,120 C94.927946,120 120,94.927946 120,64 C120,33.072054 94.927946,8 64,8 C33.072054,8 8,33.072054 8,64 C8,94.927946 33.072054,120 64,120 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-1": {
            "title": "$:/core/images/heading-1",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-1 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M14,30 L27.25,30 L27.25,60.104 L61.7,60.104 L61.7,30 L74.95,30 L74.95,105.684 L61.7,105.684 L61.7,71.552 L27.25,71.552 L27.25,105.684 L14,105.684 L14,30 Z M84.3350766,43.78 C86.8790893,43.78 89.3523979,43.5680021 91.7550766,43.144 C94.1577553,42.7199979 96.3307336,42.0133383 98.2740766,41.024 C100.21742,40.0346617 101.87807,38.7626744 103.256077,37.208 C104.634084,35.6533256 105.535075,33.7453446 105.959077,31.484 L115.817077,31.484 L115.817077,105.684 L102.567077,105.684 L102.567077,53.32 L84.3350766,53.32 L84.3350766,43.78 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-2": {
            "title": "$:/core/images/heading-2",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-2 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M125.519077,105.684 L74.8510766,105.684 C74.9217436,99.5359693 76.4057288,94.1653563 79.3030766,89.572 C82.2004244,84.9786437 86.1577182,80.986017 91.1750766,77.594 C93.5777553,75.8273245 96.0863969,74.113675 98.7010766,72.453 C101.315756,70.792325 103.718399,69.0080095 105.909077,67.1 C108.099754,65.1919905 109.901736,63.1250111 111.315077,60.899 C112.728417,58.6729889 113.47041,56.1113478 113.541077,53.214 C113.541077,51.8713266 113.382078,50.4403409 113.064077,48.921 C112.746075,47.4016591 112.127748,45.9883399 111.209077,44.681 C110.290405,43.3736601 109.018418,42.2783377 107.393077,41.395 C105.767735,40.5116622 103.647756,40.07 101.033077,40.07 C98.6303979,40.07 96.6340846,40.5469952 95.0440766,41.501 C93.4540687,42.4550048 92.1820814,43.762325 91.2280766,45.423 C90.2740719,47.083675 89.5674123,49.0446554 89.1080766,51.306 C88.648741,53.5673446 88.3837436,56.0053203 88.3130766,58.62 L76.2290766,58.62 C76.2290766,54.5213128 76.7767378,50.7230175 77.8720766,47.225 C78.9674154,43.7269825 80.610399,40.7060127 82.8010766,38.162 C84.9917542,35.6179873 87.6593942,33.6216739 90.8040766,32.173 C93.948759,30.7243261 97.6057224,30 101.775077,30 C106.297766,30 110.078395,30.7419926 113.117077,32.226 C116.155758,33.7100074 118.611401,35.5826554 120.484077,37.844 C122.356753,40.1053446 123.681739,42.5609868 124.459077,45.211 C125.236414,47.8610133 125.625077,50.3873213 125.625077,52.79 C125.625077,55.7580148 125.165748,58.4433213 124.247077,60.846 C123.328405,63.2486787 122.091751,65.4569899 120.537077,67.471 C118.982402,69.4850101 117.215753,71.3399915 115.237077,73.036 C113.2584,74.7320085 111.209087,76.3219926 109.089077,77.806 C106.969066,79.2900074 104.849087,80.7033266 102.729077,82.046 C100.609066,83.3886734 98.6480856,84.7313266 96.8460766,86.074 C95.0440676,87.4166734 93.47175,88.8123261 92.1290766,90.261 C90.7864032,91.7096739 89.8677458,93.2466585 89.3730766,94.872 L125.519077,94.872 L125.519077,105.684 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-3": {
            "title": "$:/core/images/heading-3",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-3 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M94.8850766,62.224 C96.8637532,62.294667 98.8424001,62.1533351 100.821077,61.8 C102.799753,61.4466649 104.566402,60.8283378 106.121077,59.945 C107.675751,59.0616623 108.930072,57.8426744 109.884077,56.288 C110.838081,54.7333256 111.315077,52.8253446 111.315077,50.564 C111.315077,47.3839841 110.237421,44.8400095 108.082077,42.932 C105.926733,41.0239905 103.153094,40.07 99.7610766,40.07 C97.641066,40.07 95.8037511,40.4939958 94.2490766,41.342 C92.6944022,42.1900042 91.4047484,43.3383261 90.3800766,44.787 C89.3554048,46.2356739 88.5957458,47.860991 88.1010766,49.663 C87.6064075,51.465009 87.3944096,53.3199905 87.4650766,55.228 L75.3810766,55.228 C75.5224107,51.623982 76.1937373,48.2850154 77.3950766,45.211 C78.596416,42.1369846 80.2393995,39.4693446 82.3240766,37.208 C84.4087537,34.9466554 86.9350618,33.1800064 89.9030766,31.908 C92.8710915,30.6359936 96.2277246,30 99.9730766,30 C102.870424,30 105.714729,30.4239958 108.506077,31.272 C111.297424,32.1200042 113.806065,33.3566585 116.032077,34.982 C118.258088,36.6073415 120.042403,38.6743208 121.385077,41.183 C122.72775,43.6916792 123.399077,46.5713171 123.399077,49.822 C123.399077,53.5673521 122.551085,56.8356527 120.855077,59.627 C119.159068,62.4183473 116.509095,64.4499936 112.905077,65.722 L112.905077,65.934 C117.145098,66.7820042 120.448731,68.8843166 122.816077,72.241 C125.183422,75.5976835 126.367077,79.6786426 126.367077,84.484 C126.367077,88.017351 125.660417,91.1796527 124.247077,93.971 C122.833736,96.7623473 120.925755,99.129657 118.523077,101.073 C116.120398,103.016343 113.329093,104.517995 110.149077,105.578 C106.969061,106.638005 103.612428,107.168 100.079077,107.168 C95.7683884,107.168 92.005426,106.549673 88.7900766,105.313 C85.5747272,104.076327 82.8894207,102.327345 80.7340766,100.066 C78.5787325,97.8046554 76.9357489,95.0840159 75.8050766,91.904 C74.6744043,88.7239841 74.0737436,85.1906861 74.0030766,81.304 L86.0870766,81.304 C85.9457426,85.8266893 87.0587315,89.5896517 89.4260766,92.593 C91.7934218,95.5963483 95.3443863,97.098 100.079077,97.098 C104.107097,97.098 107.481396,95.9496782 110.202077,93.653 C112.922757,91.3563219 114.283077,88.0880212 114.283077,83.848 C114.283077,80.9506522 113.717749,78.6540085 112.587077,76.958 C111.456404,75.2619915 109.972419,73.9723378 108.135077,73.089 C106.297734,72.2056623 104.230755,71.6580011 101.934077,71.446 C99.6373985,71.2339989 97.2877553,71.163333 94.8850766,71.234 L94.8850766,62.224 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-4": {
            "title": "$:/core/images/heading-4",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-4 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8,30 L21.25,30 L21.25,60.104 L55.7,60.104 L55.7,30 L68.95,30 L68.95,105.684 L55.7,105.684 L55.7,71.552 L21.25,71.552 L21.25,105.684 L8,105.684 L8,30 Z M84.5890766,78.548 L107.061077,78.548 L107.061077,45.9 L106.849077,45.9 L84.5890766,78.548 Z M128.049077,88.088 L118.509077,88.088 L118.509077,105.684 L107.061077,105.684 L107.061077,88.088 L75.2610766,88.088 L75.2610766,76.11 L107.061077,31.484 L118.509077,31.484 L118.509077,78.548 L128.049077,78.548 L128.049077,88.088 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-5": {
            "title": "$:/core/images/heading-5",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-5 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M83.7550766,31.484 L122.127077,31.484 L122.127077,42.296 L92.7650766,42.296 L88.9490766,61.164 L89.1610766,61.376 C90.7864181,59.5386575 92.8533974,58.1430048 95.3620766,57.189 C97.8707558,56.2349952 100.361731,55.758 102.835077,55.758 C106.509762,55.758 109.795729,56.3763272 112.693077,57.613 C115.590424,58.8496729 118.0284,60.5809889 120.007077,62.807 C121.985753,65.0330111 123.487405,67.6653181 124.512077,70.704 C125.536748,73.7426819 126.049077,77.028649 126.049077,80.562 C126.049077,83.5300148 125.572081,86.5863176 124.618077,89.731 C123.664072,92.8756824 122.144754,95.7376538 120.060077,98.317 C117.9754,100.896346 115.30776,103.016325 112.057077,104.677 C108.806394,106.337675 104.919766,107.168 100.397077,107.168 C96.7930586,107.168 93.454092,106.691005 90.3800766,105.737 C87.3060613,104.782995 84.6030883,103.35201 82.2710766,101.444 C79.939065,99.5359905 78.0840835,97.1863473 76.7060766,94.395 C75.3280697,91.6036527 74.5684107,88.3353521 74.4270766,84.59 L86.5110766,84.59 C86.8644117,88.6180201 88.2423979,91.7096559 90.6450766,93.865 C93.0477553,96.0203441 96.2277235,97.098 100.185077,97.098 C102.729089,97.098 104.884401,96.6740042 106.651077,95.826 C108.417752,94.9779958 109.848738,93.8120074 110.944077,92.328 C112.039415,90.8439926 112.816741,89.1126766 113.276077,87.134 C113.735412,85.1553234 113.965077,83.0353446 113.965077,80.774 C113.965077,78.7246564 113.682413,76.763676 113.117077,74.891 C112.55174,73.018324 111.703749,71.3753404 110.573077,69.962 C109.442404,68.5486596 107.976086,67.4180042 106.174077,66.57 C104.372068,65.7219958 102.269755,65.298 99.8670766,65.298 C97.3230639,65.298 94.9380878,65.7749952 92.7120766,66.729 C90.4860655,67.6830048 88.8784149,69.4673203 87.8890766,72.082 L75.8050766,72.082 L83.7550766,31.484 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/heading-6": {
            "title": "$:/core/images/heading-6",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-heading-6 tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M6,30 L19.25,30 L19.25,60.104 L53.7,60.104 L53.7,30 L66.95,30 L66.95,105.684 L53.7,105.684 L53.7,71.552 L19.25,71.552 L19.25,105.684 L6,105.684 L6,30 Z M112.587077,50.246 C112.304409,47.2073181 111.226753,44.751676 109.354077,42.879 C107.481401,41.006324 104.955093,40.07 101.775077,40.07 C99.584399,40.07 97.6940846,40.4763293 96.1040766,41.289 C94.5140687,42.1016707 93.1714154,43.1793266 92.0760766,44.522 C90.9807378,45.8646734 90.0974133,47.401658 89.4260766,49.133 C88.7547399,50.864342 88.2070787,52.6839905 87.7830766,54.592 C87.3590745,56.5000095 87.0587442,58.390324 86.8820766,60.263 C86.7054091,62.135676 86.5464107,63.8846585 86.4050766,65.51 L86.6170766,65.722 C88.2424181,62.7539852 90.4860623,60.5456739 93.3480766,59.097 C96.2100909,57.6483261 99.3017267,56.924 102.623077,56.924 C106.297762,56.924 109.583729,57.5599936 112.481077,58.832 C115.378424,60.1040064 117.834067,61.8529889 119.848077,64.079 C121.862087,66.3050111 123.399071,68.9373181 124.459077,71.976 C125.519082,75.0146819 126.049077,78.300649 126.049077,81.834 C126.049077,85.438018 125.466082,88.7769846 124.300077,91.851 C123.134071,94.9250154 121.455754,97.6103219 119.265077,99.907 C117.074399,102.203678 114.459758,103.987994 111.421077,105.26 C108.382395,106.532006 105.025762,107.168 101.351077,107.168 C95.9097161,107.168 91.4400941,106.16101 87.9420766,104.147 C84.4440591,102.13299 81.6880867,99.3770175 79.6740766,95.879 C77.6600666,92.3809825 76.2644138,88.2823568 75.4870766,83.583 C74.7097394,78.8836432 74.3210766,73.8133605 74.3210766,68.372 C74.3210766,63.9199777 74.7980719,59.4326893 75.7520766,54.91 C76.7060814,50.3873107 78.278399,46.2710186 80.4690766,42.561 C82.6597542,38.8509815 85.5393921,35.8300117 89.1080766,33.498 C92.6767611,31.1659883 97.0757171,30 102.305077,30 C105.273091,30 108.064397,30.4946617 110.679077,31.484 C113.293756,32.4733383 115.608067,33.8513245 117.622077,35.618 C119.636087,37.3846755 121.27907,39.5046543 122.551077,41.978 C123.823083,44.4513457 124.529743,47.2073181 124.671077,50.246 L112.587077,50.246 Z M100.927077,97.098 C103.117754,97.098 105.025735,96.6563378 106.651077,95.773 C108.276418,94.8896623 109.636738,93.7413404 110.732077,92.328 C111.827415,90.9146596 112.640074,89.271676 113.170077,87.399 C113.700079,85.526324 113.965077,83.6006766 113.965077,81.622 C113.965077,79.6433234 113.700079,77.7353425 113.170077,75.898 C112.640074,74.0606575 111.827415,72.4530069 110.732077,71.075 C109.636738,69.6969931 108.276418,68.5840042 106.651077,67.736 C105.025735,66.8879958 103.117754,66.464 100.927077,66.464 C98.736399,66.464 96.8107516,66.8703293 95.1500766,67.683 C93.4894017,68.4956707 92.0937489,69.5909931 90.9630766,70.969 C89.8324043,72.3470069 88.9844128,73.9546575 88.4190766,75.792 C87.8537405,77.6293425 87.5710766,79.5726564 87.5710766,81.622 C87.5710766,83.6713436 87.8537405,85.6146575 88.4190766,87.452 C88.9844128,89.2893425 89.8324043,90.9323261 90.9630766,92.381 C92.0937489,93.8296739 93.4894017,94.9779958 95.1500766,95.826 C96.8107516,96.6740042 98.736399,97.098 100.927077,97.098 L100.927077,97.098 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-help tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M36.0548906,111.44117 C30.8157418,115.837088 20.8865444,118.803477 9.5,118.803477 C7.86465619,118.803477 6.25937294,118.742289 4.69372699,118.624467 C12.612543,115.984876 18.7559465,110.02454 21.0611049,102.609942 C8.74739781,92.845129 1.04940554,78.9359851 1.04940554,63.5 C1.04940554,33.9527659 29.2554663,10 64.0494055,10 C98.8433448,10 127.049406,33.9527659 127.049406,63.5 C127.049406,93.0472341 98.8433448,117 64.0494055,117 C53.9936953,117 44.48824,114.999337 36.0548906,111.44117 L36.0548906,111.44117 Z M71.4042554,77.5980086 C71.406883,77.2865764 71.4095079,76.9382011 71.4119569,76.5610548 C71.4199751,75.3262169 71.4242825,74.0811293 71.422912,72.9158546 C71.4215244,71.736154 71.4143321,70.709635 71.4001396,69.8743525 C71.4078362,68.5173028 71.9951951,67.7870427 75.1273009,65.6385471 C75.2388969,65.5619968 76.2124091,64.8981068 76.5126553,64.6910879 C79.6062455,62.5580654 81.5345849,60.9050204 83.2750652,58.5038955 C85.6146327,55.2762841 86.8327108,51.426982 86.8327108,46.8554323 C86.8327108,33.5625756 76.972994,24.9029551 65.3778484,24.9029551 C54.2752771,24.9029551 42.8794554,34.5115163 41.3121702,47.1975534 C40.9043016,50.4989536 43.2499725,53.50591 46.5513726,53.9137786 C49.8527728,54.3216471 52.8597292,51.9759763 53.2675978,48.6745761 C54.0739246,42.1479456 60.2395837,36.9492759 65.3778484,36.9492759 C70.6427674,36.9492759 74.78639,40.5885487 74.78639,46.8554323 C74.78639,50.4892974 73.6853224,52.008304 69.6746221,54.7736715 C69.4052605,54.9593956 68.448509,55.6118556 68.3131127,55.7047319 C65.6309785,57.5445655 64.0858213,58.803255 62.6123358,60.6352315 C60.5044618,63.2559399 59.3714208,66.3518252 59.3547527,69.9487679 C59.3684999,70.8407274 59.3752803,71.8084521 59.3765995,72.9300232 C59.3779294,74.0607297 59.3737237,75.2764258 59.36589,76.482835 C59.3634936,76.8518793 59.3609272,77.1924914 59.3583633,77.4963784 C59.3568319,77.6778944 59.3556368,77.8074256 59.3549845,77.8730928 C59.3219814,81.1994287 61.9917551,83.9227111 65.318091,83.9557142 C68.644427,83.9887173 71.3677093,81.3189435 71.4007124,77.9926076 C71.4014444,77.9187458 71.402672,77.7856841 71.4042554,77.5980086 Z M65.3778489,102.097045 C69.5359735,102.097045 72.9067994,98.7262189 72.9067994,94.5680944 C72.9067994,90.4099698 69.5359735,87.0391439 65.3778489,87.0391439 C61.2197243,87.0391439 57.8488984,90.4099698 57.8488984,94.5680944 C57.8488984,98.7262189 61.2197243,102.097045 65.3778489,102.097045 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112.9847,119.501583 C112.99485,119.336814 113,119.170705 113,119.003406 L113,67.56802 C116.137461,70.5156358 121.076014,70.4518569 124.133985,67.3938855 C127.25818,64.2696912 127.260618,59.2068102 124.131541,56.0777326 L70.3963143,2.34250601 C68.8331348,0.779326498 66.7828947,-0.000743167069 64.7337457,1.61675364e-05 C62.691312,-0.00409949529 60.6426632,0.777559815 59.077717,2.34250601 L33,28.420223 L33,28.420223 L33,8.00697327 C33,3.58484404 29.4092877,0 25,0 C20.581722,0 17,3.59075293 17,8.00697327 L17,44.420223 L5.3424904,56.0777326 C2.21694607,59.2032769 2.22220878,64.2760483 5.34004601,67.3938855 C8.46424034,70.5180798 13.5271213,70.5205187 16.6561989,67.3914411 L17,67.04764 L17,119.993027 C17,119.994189 17.0000002,119.995351 17.0000007,119.996514 C17.0000002,119.997675 17,119.998838 17,120 C17,124.418278 20.5881049,128 24.9992458,128 L105.000754,128 C109.418616,128 113,124.409288 113,120 C113,119.832611 112.99485,119.666422 112.9847,119.501583 Z M97,112 L97,51.5736087 L97,51.5736087 L64.7370156,19.3106244 L33,51.04764 L33,112 L97,112 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-import-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M105.449437,94.2138951 C105.449437,94.2138951 110.049457,94.1897106 110.049457,99.4026111 C110.049457,104.615512 105.163246,104.615511 105.163246,104.615511 L45.0075072,105.157833 C45.0075072,105.157833 0.367531803,106.289842 0.367532368,66.6449212 C0.367532934,27.0000003 45.0428249,27.0000003 45.0428249,27.0000003 L105.532495,27.0000003 C105.532495,27.0000003 138.996741,25.6734987 138.996741,55.1771866 C138.996741,84.6808745 105.727102,82.8457535 105.727102,82.8457535 L56.1735087,82.8457535 C56.1735087,82.8457535 22.6899229,85.1500223 22.6899229,66.0913753 C22.6899229,47.0327282 56.1735087,49.3383013 56.1735087,49.3383013 L105.727102,49.3383013 C105.727102,49.3383013 111.245209,49.3383024 111.245209,54.8231115 C111.245209,60.3079206 105.727102,60.5074524 105.727102,60.5074524 L56.1735087,60.5074524 C56.1735087,60.5074524 37.48913,60.5074528 37.48913,66.6449195 C37.48913,72.7823862 56.1735087,71.6766023 56.1735087,71.6766023 L105.727102,71.6766029 C105.727102,71.6766029 127.835546,73.1411469 127.835546,55.1771866 C127.835546,35.5304025 105.727102,38.3035317 105.727102,38.3035317 L45.0428249,38.3035317 C45.0428249,38.3035317 11.5287276,38.3035313 11.5287276,66.6449208 C11.5287276,94.9863103 45.0428244,93.9579678 45.0428244,93.9579678 L105.449437,94.2138951 Z\" transform=\"translate(69.367532, 66.000000) rotate(-45.000000) translate(-69.367532, -66.000000) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <g transform=\"translate(0.049406, 0.000000)\">\n            <path d=\"M64,128 C99.346224,128 128,99.346224 128,64 C128,28.653776 99.346224,0 64,0 C28.653776,0 0,28.653776 0,64 C0,99.346224 28.653776,128 64,128 Z M64,112 C90.509668,112 112,90.509668 112,64 C112,37.490332 90.509668,16 64,16 C37.490332,16 16,37.490332 16,64 C16,90.509668 37.490332,112 64,112 Z\"></path>\n            <circle cx=\"64\" cy=\"32\" r=\"8\"></circle>\n            <rect x=\"56\" y=\"48\" width=\"16\" height=\"56\" rx=\"8\"></rect>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/italic": {
            "title": "$:/core/images/italic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-italic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n         <polygon points=\"66.7114846 0 89.1204482 0 62.4089636 128 40 128\"></polygon>\n    </g>\n</svg>"
        },
        "$:/core/images/left-arrow": {
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/left-arrow",
            "text": "<svg class=\"tc-image-left-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path transform=\"rotate(135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25075c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056z\"/>\n</svg>\n"
        },
        "$:/core/images/line-width": {
            "title": "$:/core/images/line-width",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-line-width tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M128,-97 L112.992786,-97 C112.452362,-97 112,-96.5522847 112,-96 C112,-95.4438648 112.444486,-95 112.992786,-95 L128,-95 L128,-97 Z M128,-78.6794919 L111.216185,-88.3696322 C110.748163,-88.6398444 110.132549,-88.4782926 109.856406,-88 C109.578339,-87.5183728 109.741342,-86.9117318 110.216185,-86.6375814 L128,-76.3700908 L128,-78.6794919 Z M78.6794919,-128 L88.3696322,-111.216185 C88.6437826,-110.741342 88.4816272,-110.134474 88,-109.856406 C87.5217074,-109.580264 86.9077936,-109.748163 86.6375814,-110.216185 L76.3700908,-128 L78.6794919,-128 Z M97,-128 L97,-112.992786 C97,-112.444486 96.5561352,-112 96,-112 C95.4477153,-112 95,-112.452362 95,-112.992786 L95,-128 L97,-128 Z M115.629909,-128 L105.362419,-110.216185 C105.088268,-109.741342 104.481627,-109.578339 104,-109.856406 C103.521707,-110.132549 103.360156,-110.748163 103.630368,-111.216185 L113.320508,-128 L115.629909,-128 Z M128,-113.320508 L111.216185,-103.630368 C110.741342,-103.356217 110.134474,-103.518373 109.856406,-104 C109.580264,-104.478293 109.748163,-105.092206 110.216185,-105.362419 L128,-115.629909 L128,-113.320508 Z M48,-96 C48,-96.5522847 48.4523621,-97 48.9927864,-97 L79.0072136,-97 C79.5555144,-97 80,-96.5561352 80,-96 C80,-95.4477153 79.5476379,-95 79.0072136,-95 L48.9927864,-95 C48.4444856,-95 48,-95.4438648 48,-96 Z M54.4307806,-120 C54.706923,-120.478293 55.3225377,-120.639844 55.7905589,-120.369632 L81.7838153,-105.362419 C82.2586577,-105.088268 82.4216611,-104.481627 82.1435935,-104 C81.8674512,-103.521707 81.2518365,-103.360156 80.7838153,-103.630368 L54.7905589,-118.637581 C54.3157165,-118.911732 54.152713,-119.518373 54.4307806,-120 Z M104,-82.1435935 C104.478293,-82.4197359 105.092206,-82.2518365 105.362419,-81.7838153 L120.369632,-55.7905589 C120.643783,-55.3157165 120.481627,-54.7088482 120,-54.4307806 C119.521707,-54.1546382 118.907794,-54.3225377 118.637581,-54.7905589 L103.630368,-80.7838153 C103.356217,-81.2586577 103.518373,-81.865526 104,-82.1435935 Z M96,-80 C96.5522847,-80 97,-79.5476379 97,-79.0072136 L97,-48.9927864 C97,-48.4444856 96.5561352,-48 96,-48 C95.4477153,-48 95,-48.4523621 95,-48.9927864 L95,-79.0072136 C95,-79.5555144 95.4438648,-80 96,-80 Z M88,-82.1435935 C88.4782926,-81.8674512 88.6398444,-81.2518365 88.3696322,-80.7838153 L73.3624186,-54.7905589 C73.0882682,-54.3157165 72.4816272,-54.152713 72,-54.4307806 C71.5217074,-54.706923 71.3601556,-55.3225377 71.6303678,-55.7905589 L86.6375814,-81.7838153 C86.9117318,-82.2586577 87.5183728,-82.4216611 88,-82.1435935 Z M82.1435935,-88 C82.4197359,-87.5217074 82.2518365,-86.9077936 81.7838153,-86.6375814 L55.7905589,-71.6303678 C55.3157165,-71.3562174 54.7088482,-71.5183728 54.4307806,-72 C54.1546382,-72.4782926 54.3225377,-73.0922064 54.7905589,-73.3624186 L80.7838153,-88.3696322 C81.2586577,-88.6437826 81.865526,-88.4816272 82.1435935,-88 Z M1.30626177e-08,-41.9868843 L15.0170091,-57.9923909 L20.7983821,-52.9749272 L44.7207091,-81.2095939 L73.4260467,-42.1002685 L85.984793,-56.6159488 L104.48741,-34.0310661 L127.969109,-47.4978019 L127.969109,7.99473128e-07 L1.30626177e-08,7.99473128e-07 L1.30626177e-08,-41.9868843 Z M96,-84 C102.627417,-84 108,-89.372583 108,-96 C108,-102.627417 102.627417,-108 96,-108 C89.372583,-108 84,-102.627417 84,-96 C84,-89.372583 89.372583,-84 96,-84 Z\"></path>\n        <path d=\"M16,18 L112,18 C113.104569,18 114,17.1045695 114,16 C114,14.8954305 113.104569,14 112,14 L16,14 C14.8954305,14 14,14.8954305 14,16 C14,17.1045695 14.8954305,18 16,18 L16,18 Z M16,35 L112,35 C114.209139,35 116,33.209139 116,31 C116,28.790861 114.209139,27 112,27 L16,27 C13.790861,27 12,28.790861 12,31 C12,33.209139 13.790861,35 16,35 L16,35 Z M16,56 L112,56 C115.313708,56 118,53.3137085 118,50 C118,46.6862915 115.313708,44 112,44 L16,44 C12.6862915,44 10,46.6862915 10,50 C10,53.3137085 12.6862915,56 16,56 L16,56 Z M16,85 L112,85 C117.522847,85 122,80.5228475 122,75 C122,69.4771525 117.522847,65 112,65 L16,65 C10.4771525,65 6,69.4771525 6,75 C6,80.5228475 10.4771525,85 16,85 L16,85 Z M16,128 L112,128 C120.836556,128 128,120.836556 128,112 C128,103.163444 120.836556,96 112,96 L16,96 C7.163444,96 0,103.163444 0,112 C0,120.836556 7.163444,128 16,128 L16,128 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/link": {
            "title": "$:/core/images/link",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-link tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M128.719999,57.568543 C130.219553,53.8628171 131.045202,49.8121445 131.045202,45.5685425 C131.045202,27.8915447 116.718329,13.5685425 99.0452364,13.5685425 L67.0451674,13.5685425 C49.3655063,13.5685425 35.0452019,27.8954305 35.0452019,45.5685425 C35.0452019,63.2455403 49.3720745,77.5685425 67.0451674,77.5685425 L99.0452364,77.5685425 C100.406772,77.5685425 101.748384,77.4835732 103.065066,77.3186499 C96.4792444,73.7895096 91.1190212,68.272192 87.7873041,61.5685425 L67.0506214,61.5685425 C58.2110723,61.5685425 51.0452019,54.4070414 51.0452019,45.5685425 C51.0452019,36.7319865 58.2005234,29.5685425 67.0506214,29.5685425 L99.0397824,29.5685425 C107.879331,29.5685425 115.045202,36.7300436 115.045202,45.5685425 C115.045202,48.9465282 113.99957,52.0800164 112.21335,54.6623005 C114.314383,56.4735917 117.050039,57.5685425 120.041423,57.5685425 L128.720003,57.5685425 Z\" transform=\"translate(83.045202, 45.568542) rotate(-225.000000) translate(-83.045202, -45.568542)\"></path>\n        <path d=\"M-0.106255113,71.0452019 C-1.60580855,74.7509276 -2.43145751,78.8016001 -2.43145751,83.0452019 C-2.43145751,100.7222 11.8954151,115.045202 29.568508,115.045202 L61.568577,115.045202 C79.2482381,115.045202 93.5685425,100.718314 93.5685425,83.0452019 C93.5685425,65.3682041 79.2416699,51.0452019 61.568577,51.0452019 L29.568508,51.0452019 C28.206973,51.0452019 26.8653616,51.1301711 25.5486799,51.2950943 C32.1345,54.8242347 37.4947231,60.3415524 40.8264403,67.0452019 L61.563123,67.0452019 C70.4026721,67.0452019 77.5685425,74.206703 77.5685425,83.0452019 C77.5685425,91.8817579 70.413221,99.0452019 61.563123,99.0452019 L29.573962,99.0452019 C20.7344129,99.0452019 13.5685425,91.8837008 13.5685425,83.0452019 C13.5685425,79.6672162 14.6141741,76.533728 16.4003949,73.9514439 C14.2993609,72.1401527 11.5637054,71.0452019 8.5723215,71.0452019 L-0.106255113,71.0452019 Z\" transform=\"translate(45.568542, 83.045202) rotate(-225.000000) translate(-45.568542, -83.045202)\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/list-bullet": {
            "title": "$:/core/images/list-bullet",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-list-bullet tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M11.6363636,40.2727273 C18.0629498,40.2727273 23.2727273,35.0629498 23.2727273,28.6363636 C23.2727273,22.2097775 18.0629498,17 11.6363636,17 C5.20977746,17 0,22.2097775 0,28.6363636 C0,35.0629498 5.20977746,40.2727273 11.6363636,40.2727273 Z M11.6363636,75.1818182 C18.0629498,75.1818182 23.2727273,69.9720407 23.2727273,63.5454545 C23.2727273,57.1188684 18.0629498,51.9090909 11.6363636,51.9090909 C5.20977746,51.9090909 0,57.1188684 0,63.5454545 C0,69.9720407 5.20977746,75.1818182 11.6363636,75.1818182 Z M11.6363636,110.090909 C18.0629498,110.090909 23.2727273,104.881132 23.2727273,98.4545455 C23.2727273,92.0279593 18.0629498,86.8181818 11.6363636,86.8181818 C5.20977746,86.8181818 0,92.0279593 0,98.4545455 C0,104.881132 5.20977746,110.090909 11.6363636,110.090909 Z M34.9090909,22.8181818 L128,22.8181818 L128,34.4545455 L34.9090909,34.4545455 L34.9090909,22.8181818 Z M34.9090909,57.7272727 L128,57.7272727 L128,69.3636364 L34.9090909,69.3636364 L34.9090909,57.7272727 Z M34.9090909,92.6363636 L128,92.6363636 L128,104.272727 L34.9090909,104.272727 L34.9090909,92.6363636 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/list-number": {
            "title": "$:/core/images/list-number",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-list-number tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M33.8390805,22.3563218 L128,22.3563218 L128,34.1264368 L33.8390805,34.1264368 L33.8390805,22.3563218 Z M33.8390805,57.6666667 L128,57.6666667 L128,69.4367816 L33.8390805,69.4367816 L33.8390805,57.6666667 Z M33.8390805,92.9770115 L128,92.9770115 L128,104.747126 L33.8390805,104.747126 L33.8390805,92.9770115 Z M0.379509711,42.6307008 L0.379509711,40.4082314 L1.37821948,40.4082314 C2.20382368,40.4082314 2.82301754,40.268077 3.23581964,39.9877642 C3.64862174,39.7074513 3.85501969,39.0400498 3.85501969,37.9855395 L3.85501969,22.7686318 C3.85501969,21.3270228 3.66193774,20.4327047 3.27576803,20.0856507 C2.88959832,19.7385967 1.79768657,19.5650723 0,19.5650723 L0,17.4226919 C3.50215975,17.2758613 6.25191314,16.4683055 8.24934266,15 L10.3666074,15 L10.3666074,37.865406 C10.3666074,38.786434 10.5164123,39.4404875 10.8160268,39.8275862 C11.1156412,40.2146849 11.764796,40.4082314 12.7635108,40.4082314 L13.7622206,40.4082314 L13.7622206,42.6307008 L0.379509711,42.6307008 Z M0.0798967812,77.9873934 L0.0798967812,76.0852799 C7.27064304,69.5312983 10.8659622,63.5046623 10.8659622,58.005191 C10.8659622,56.4434479 10.5397203,55.195407 9.88722667,54.2610308 C9.23473303,53.3266546 8.36253522,52.8594735 7.27060709,52.8594735 C6.3784219,52.8594735 5.61608107,53.1764892 4.98356173,53.8105302 C4.35104238,54.4445712 4.03478745,55.1753759 4.03478745,56.0029663 C4.03478745,56.9773871 4.28113339,57.8316611 4.77383268,58.5658139 C4.88036225,58.7259926 4.93362624,58.8461249 4.93362624,58.9262143 C4.93362624,59.0730449 4.77383427,59.2065252 4.45424555,59.3266593 C4.2411864,59.4067486 3.70188852,59.6336652 2.83633573,60.0074156 C1.99741533,60.3811661 1.47809145,60.5680386 1.2783485,60.5680386 C1.03865696,60.5680386 0.765679018,60.1976307 0.459406492,59.4568039 C0.153133966,58.715977 0,57.9184322 0,57.0641453 C0,55.1153036 0.848894811,53.5202138 2.5467099,52.2788283 C4.24452499,51.0374428 6.34512352,50.4167594 8.84856852,50.4167594 C11.3120649,50.4167594 13.3793735,51.0874979 15.0505562,52.4289952 C16.7217389,53.7704924 17.5573177,55.5224215 17.5573177,57.684835 C17.5573177,58.9662652 17.2743527,60.2076321 16.7084144,61.4089729 C16.142476,62.6103138 14.7875733,64.4623531 12.6436656,66.9651465 C10.4997579,69.4679398 8.40914641,71.7804862 6.3717683,73.902855 L17.8169822,73.902855 L16.7982982,79.6292176 L14.6810335,79.6292176 C14.7609307,79.3489048 14.8008787,79.0952922 14.8008787,78.8683723 C14.8008787,78.4812736 14.7010087,78.237672 14.5012658,78.1375603 C14.3015228,78.0374485 13.9020429,77.9873934 13.3028141,77.9873934 L0.0798967812,77.9873934 Z M12.2042333,97.1935484 C13.9486551,97.2335931 15.4400468,97.8309175 16.6784531,98.9855395 C17.9168594,100.140162 18.5360532,101.75861 18.5360532,103.840934 C18.5360532,106.830938 17.4041935,109.233584 15.14044,111.048943 C12.8766866,112.864303 10.1402492,113.771969 6.93104577,113.771969 C4.92030005,113.771969 3.26245842,113.388213 1.95747114,112.62069 C0.652483855,111.853166 0,110.848727 0,109.607341 C0,108.833144 0.26964894,108.209124 0.808954909,107.735261 C1.34826088,107.261399 1.93749375,107.024472 2.57667119,107.024472 C3.21584864,107.024472 3.73850152,107.224692 4.14464552,107.625139 C4.55078953,108.025586 4.92696644,108.67964 5.27318756,109.587319 C5.73925445,110.855401 6.51158227,111.489433 7.59019421,111.489433 C8.85523291,111.489433 9.87723568,111.012241 10.6562332,110.057842 C11.4352307,109.103444 11.8247236,107.371536 11.8247236,104.862069 C11.8247236,103.153495 11.7048796,101.838714 11.4651881,100.917686 C11.2254966,99.9966584 10.6728827,99.5361513 9.80732989,99.5361513 C9.22141723,99.5361513 8.62219737,99.843156 8.00965231,100.457175 C7.51695303,100.951059 7.07752513,101.197998 6.69135542,101.197998 C6.3584505,101.197998 6.08880156,101.051169 5.88240051,100.757508 C5.67599946,100.463847 5.57280049,100.183539 5.57280049,99.916574 C5.57280049,99.5962164 5.67599946,99.3225818 5.88240051,99.0956618 C6.08880156,98.8687419 6.57150646,98.5016711 7.33052967,97.9944383 C10.2068282,96.0722929 11.6449559,93.9766521 11.6449559,91.7074527 C11.6449559,90.5194601 11.3386879,89.615131 10.7261429,88.9944383 C10.1135978,88.3737455 9.37455999,88.0634038 8.5090072,88.0634038 C7.71003539,88.0634038 6.98431355,88.3270274 6.33181991,88.8542825 C5.67932627,89.3815377 5.35308434,90.0122321 5.35308434,90.7463849 C5.35308434,91.3871 5.60608828,91.9810874 6.11210376,92.5283648 C6.28521432,92.7285883 6.3717683,92.8954387 6.3717683,93.028921 C6.3717683,93.1490551 5.80250943,93.4560598 4.6639746,93.9499444 C3.52543978,94.4438289 2.80970494,94.6907675 2.51674861,94.6907675 C2.10394651,94.6907675 1.76771758,94.3570667 1.50805174,93.6896552 C1.24838591,93.0222436 1.11855494,92.4082342 1.11855494,91.8476085 C1.11855494,90.0989901 2.04734573,88.6240327 3.90495518,87.4226919 C5.76256463,86.2213511 7.86982116,85.6206897 10.226788,85.6206897 C12.2907985,85.6206897 14.0784711,86.0678487 15.5898594,86.9621802 C17.1012478,87.8565117 17.8569306,89.0778566 17.8569306,90.6262514 C17.8569306,91.987771 17.2876717,93.2491599 16.1491369,94.4104561 C15.0106021,95.5717522 13.6956474,96.4994404 12.2042333,97.1935484 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-locked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M96.4723753,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L32.0000269,64 C32.0028554,48.2766389 32.3030338,16.2688026 64.1594984,16.2688041 C95.9543927,16.2688056 96.4648869,48.325931 96.4723753,64 Z M80.5749059,64 L48.4413579,64 C48.4426205,47.71306 48.5829272,31.9999996 64.1595001,31.9999996 C79.8437473,31.9999996 81.1369461,48.1359182 80.5749059,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mail tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M122.826782,104.894066 C121.945525,105.22777 120.990324,105.41043 119.993027,105.41043 L8.00697327,105.41043 C7.19458381,105.41043 6.41045219,105.289614 5.67161357,105.064967 L5.67161357,105.064967 L39.8346483,70.9019325 L60.6765759,91.7438601 C61.6118278,92.679112 62.8865166,93.0560851 64.0946097,92.8783815 C65.2975108,93.0473238 66.5641085,92.6696979 67.4899463,91.7438601 L88.5941459,70.6396605 C88.6693095,70.7292352 88.7490098,70.8162939 88.8332479,70.9005321 L122.826782,104.894066 Z M127.903244,98.6568194 C127.966933,98.2506602 128,97.8343714 128,97.4103789 L128,33.410481 C128,32.7414504 127.917877,32.0916738 127.763157,31.4706493 L94.2292399,65.0045665 C94.3188145,65.0797417 94.4058701,65.1594458 94.4901021,65.2436778 L127.903244,98.6568194 Z M0.205060636,99.2178117 C0.0709009529,98.6370366 0,98.0320192 0,97.4103789 L0,33.410481 C0,32.694007 0.0944223363,31.9995312 0.27147538,31.3387595 L0.27147538,31.3387595 L34.1777941,65.2450783 L0.205060636,99.2178117 L0.205060636,99.2178117 Z M5.92934613,25.6829218 C6.59211333,25.5051988 7.28862283,25.4104299 8.00697327,25.4104299 L119.993027,25.4104299 C120.759109,25.4104299 121.500064,25.5178649 122.201605,25.7184927 L122.201605,25.7184927 L64.0832611,83.8368368 L5.92934613,25.6829218 L5.92934613,25.6829218 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <rect x=\"0\" y=\"16\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"56\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n    <rect x=\"0\" y=\"96\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n</svg>"
        },
        "$:/core/images/mono-block": {
            "title": "$:/core/images/mono-block",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mono-block tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M23.9653488,32.9670593 L24.3217888,32.9670593 C25.0766067,32.9670593 25.6497006,33.1592554 26.0410876,33.5436534 C26.4324747,33.9280514 26.6281653,34.4906619 26.6281653,35.2315017 C26.6281653,36.0562101 26.4219913,36.6502709 26.009637,37.0137017 C25.5972828,37.3771326 24.9158602,37.5588453 23.9653488,37.5588453 L17.6542639,37.5588453 C16.6897744,37.5588453 16.0048573,37.380627 15.5994921,37.0241852 C15.1941269,36.6677435 14.9914474,36.0701882 14.9914474,35.2315017 C14.9914474,34.4207713 15.1941269,33.8406885 15.5994921,33.4912358 C16.0048573,33.141783 16.6897744,32.9670593 17.6542639,32.9670593 L18.388111,32.9670593 L17.5284616,30.5139133 L8.47069195,30.5139133 L7.5691084,32.9670593 L8.30295547,32.9670593 C9.25346691,32.9670593 9.93488953,33.1452775 10.3472438,33.5017193 C10.759598,33.8581611 10.965772,34.4347494 10.965772,35.2315017 C10.965772,36.0562101 10.759598,36.6502709 10.3472438,37.0137017 C9.93488953,37.3771326 9.25346691,37.5588453 8.30295547,37.5588453 L2.89345418,37.5588453 C1.92896463,37.5588453 1.24404754,37.3771326 0.838682371,37.0137017 C0.433317198,36.6502709 0.230637652,36.0562101 0.230637652,35.2315017 C0.230637652,34.4906619 0.426328248,33.9280514 0.817715312,33.5436534 C1.20910238,33.1592554 1.78219626,32.9670593 2.53701417,32.9670593 L2.89345418,32.9670593 L8.51262607,17.3256331 L6.83526132,17.3256331 C5.88474988,17.3256331 5.20332727,17.1439204 4.79097304,16.7804895 C4.37861882,16.4170587 4.1724448,15.8299869 4.1724448,15.0192565 C4.1724448,14.1945481 4.37861882,13.6004873 4.79097304,13.2370565 C5.20332727,12.8736257 5.88474988,12.691913 6.83526132,12.691913 L14.6979086,12.691913 C15.9419603,12.691913 16.815579,13.3628521 17.318791,14.7047506 L17.318791,14.7676518 L23.9653488,32.9670593 Z M12.9786097,17.3256331 L9.9383861,26.1737321 L16.0188333,26.1737321 L12.9786097,17.3256331 Z M35.3809383,26.6979086 L35.3809383,33.0928616 L38.5259972,33.0928616 C40.7485166,33.0928616 42.3140414,32.8482484 43.2226185,32.3590146 C44.1311956,31.8697807 44.5854773,31.0520736 44.5854773,29.9058686 C44.5854773,28.7456855 44.1521624,27.9209895 43.2855197,27.4317556 C42.4188769,26.9425218 40.9022748,26.6979086 38.7356678,26.6979086 L35.3809383,26.6979086 Z M46.0741385,24.370565 C47.5977525,24.9296893 48.7159844,25.6949794 49.428868,26.666458 C50.1417516,27.6379366 50.498188,28.8784752 50.498188,30.388111 C50.498188,31.6601189 50.1906743,32.8202846 49.5756374,33.8686428 C48.9606006,34.917001 48.0799929,35.7766419 46.933788,36.4475911 C46.2628387,36.8389782 45.5115266,37.1220307 44.6798291,37.296757 C43.8481316,37.4714834 42.6704935,37.5588453 41.1468796,37.5588453 L39.3856466,37.5588453 L30.2020747,37.5588453 C29.2795194,37.5588453 28.6190637,37.3771326 28.2206876,37.0137017 C27.8223114,36.6502709 27.6231264,36.0562101 27.6231264,35.2315017 C27.6231264,34.4906619 27.811828,33.9280514 28.189237,33.5436534 C28.5666459,33.1592554 29.118773,32.9670593 29.8456347,32.9670593 L30.2020747,32.9670593 L30.2020747,17.3256331 L29.8456347,17.3256331 C29.118773,17.3256331 28.5666459,17.1299425 28.189237,16.7385554 C27.811828,16.3471683 27.6231264,15.7740744 27.6231264,15.0192565 C27.6231264,14.2085262 27.8258059,13.6179599 28.2311711,13.24754 C28.6365363,12.8771201 29.2934976,12.691913 30.2020747,12.691913 L39.8469219,12.691913 C42.796303,12.691913 45.0362615,13.2650068 46.5668644,14.4112118 C48.0974674,15.5574168 48.8627574,17.2347648 48.8627574,19.443306 C48.8627574,20.5335986 48.6286276,21.4945792 48.1603609,22.3262767 C47.6920943,23.1579742 46.9966938,23.8393968 46.0741385,24.370565 L46.0741385,24.370565 Z M35.3809383,17.1998307 L35.3809383,22.4835296 L38.2114913,22.4835296 C39.9307988,22.4835296 41.1433816,22.2808501 41.8492761,21.8754849 C42.5551706,21.4701197 42.9081126,20.7852027 42.9081126,19.8207131 C42.9081126,18.912136 42.5901154,18.2481858 41.9541114,17.8288425 C41.3181074,17.4094992 40.2872373,17.1998307 38.8614701,17.1998307 L35.3809383,17.1998307 Z M71.244119,13.3838259 C71.5236812,12.880614 71.8102281,12.5241775 72.1037684,12.3145059 C72.3973087,12.1048342 72.7677231,12 73.2150226,12 C73.8999499,12 74.3856819,12.1817127 74.6722332,12.5451435 C74.9587844,12.9085744 75.1020579,13.5305909 75.1020579,14.4112118 L75.143992,19.8626472 C75.143992,20.8271368 74.9867406,21.4771091 74.6722332,21.8125837 C74.3577257,22.1480584 73.7881263,22.3157932 72.9634178,22.3157932 C72.3763372,22.3157932 71.92555,22.1760142 71.6110425,21.896452 C71.2965351,21.6168898 71.0274605,21.0997075 70.8038107,20.3448896 C70.4403799,19.0169692 69.8602971,18.0629775 69.0635448,17.482886 C68.2667926,16.9027945 67.1625385,16.612753 65.7507494,16.612753 C63.5981206,16.612753 61.9487284,17.3396038 60.8025235,18.7933272 C59.6563185,20.2470506 59.0832246,22.3507245 59.0832246,25.104412 C59.0832246,27.8441215 59.6633074,29.9477954 60.8234905,31.4154969 C61.9836736,32.8831984 63.6400547,33.6170381 65.7926836,33.6170381 C67.2603851,33.6170381 68.878327,33.1278116 70.6465578,32.149344 C72.4147886,31.1708763 73.5295261,30.6816498 73.9908037,30.6816498 C74.53595,30.6816498 74.9937262,30.9122852 75.3641461,31.3735628 C75.734566,31.8348404 75.9197732,32.4079343 75.9197732,33.0928616 C75.9197732,34.3229353 74.836486,35.4831009 72.669879,36.5733935 C70.5032721,37.663686 68.0641285,38.2088241 65.3523753,38.2088241 C61.6901107,38.2088241 58.7267959,36.9997358 56.4623422,34.5815228 C54.1978885,32.1633099 53.0656786,29.0043046 53.0656786,25.104412 C53.0656786,21.3443006 54.2118664,18.22024 56.5042763,15.7321366 C58.7966863,13.2440331 61.7040894,12 65.226573,12 C66.2190187,12 67.1974717,12.1118232 68.1619613,12.3354729 C69.1264508,12.5591227 70.1538264,12.9085702 71.244119,13.3838259 L71.244119,13.3838259 Z M81.4645862,32.9670593 L81.4645862,17.3256331 L81.1081461,17.3256331 C80.3533282,17.3256331 79.7802344,17.1299425 79.3888473,16.7385554 C78.9974602,16.3471683 78.8017696,15.7740744 78.8017696,15.0192565 C78.8017696,14.2085262 79.0114381,13.6179599 79.4307814,13.24754 C79.8501247,12.8771201 80.5280528,12.691913 81.4645862,12.691913 L85.4063933,12.691913 L86.6434498,12.691913 C89.5648747,12.691913 91.7034933,12.8177141 93.0593699,13.06932 C94.4152465,13.320926 95.5684233,13.740263 96.5189347,14.3273436 C98.210286,15.3337675 99.5067362,16.7699967 100.408324,18.6360743 C101.309912,20.5021519 101.7607,22.6582429 101.7607,25.104412 C101.7607,27.6903623 101.247012,29.9512876 100.219621,31.8872557 C99.1922296,33.8232239 97.7350336,35.2874089 95.8479888,36.2798546 C94.9953241,36.7271541 93.9959043,37.0521403 92.8496993,37.2548229 C91.7034944,37.4575055 89.9981906,37.5588453 87.7337369,37.5588453 L85.4063933,37.5588453 L81.4645862,37.5588453 C80.5000966,37.5588453 79.8151795,37.380627 79.4098143,37.0241852 C79.0044492,36.6677435 78.8017696,36.0701882 78.8017696,35.2315017 C78.8017696,34.4906619 78.9974602,33.9280514 79.3888473,33.5436534 C79.7802344,33.1592554 80.3533282,32.9670593 81.1081461,32.9670593 L81.4645862,32.9670593 Z M86.8740874,17.2417648 L86.8740874,32.9670593 L88.0692098,32.9670593 C90.7110725,32.9670593 92.6609895,32.3205814 93.9190194,31.0276063 C95.1770492,29.7346312 95.8060547,27.7462749 95.8060547,25.0624779 C95.8060547,22.4206153 95.1665658,20.4497314 93.8875688,19.1497672 C92.6085718,17.849803 90.6831161,17.1998307 88.1111439,17.1998307 C87.7756693,17.1998307 87.5205727,17.2033252 87.3458463,17.2103142 C87.1711199,17.2173033 87.0138685,17.2277867 86.8740874,17.2417648 L86.8740874,17.2417648 Z M121.94052,17.1159625 L112.190837,17.1159625 L112.190837,22.4835296 L115.88104,22.4835296 L115.88104,22.2319249 C115.88104,21.4351727 116.055763,20.841112 116.405216,20.4497249 C116.754669,20.0583378 117.285829,19.8626472 117.998713,19.8626472 C118.627728,19.8626472 119.141415,20.0408655 119.539792,20.3973072 C119.938168,20.753749 120.137353,21.2045363 120.137353,21.7496826 C120.137353,21.7776388 120.144342,21.8684951 120.15832,22.0222543 C120.172298,22.1760135 120.179287,22.3297704 120.179287,22.4835296 L120.179287,26.8237109 C120.179287,27.7602442 120.011552,28.4311834 119.676077,28.8365486 C119.340603,29.2419138 118.795465,29.4445933 118.040647,29.4445933 C117.327763,29.4445933 116.789614,29.2558917 116.426183,28.8784827 C116.062752,28.5010738 115.88104,27.9419578 115.88104,27.201118 L115.88104,26.8237109 L112.190837,26.8237109 L112.190837,33.0928616 L121.94052,33.0928616 L121.94052,30.5977816 C121.94052,29.6612482 122.118738,28.9903091 122.47518,28.5849439 C122.831622,28.1795787 123.415199,27.9768992 124.225929,27.9768992 C125.022682,27.9768992 125.592281,28.1760842 125.934745,28.5744604 C126.277208,28.9728365 126.448438,29.6472701 126.448438,30.5977816 L126.448438,35.6718099 C126.448438,36.4266278 126.30167,36.9298322 126.008129,37.1814382 C125.714589,37.4330442 125.134506,37.5588453 124.267863,37.5588453 L107.095842,37.5588453 C106.173287,37.5588453 105.512831,37.3771326 105.114455,37.0137017 C104.716079,36.6502709 104.516894,36.0562101 104.516894,35.2315017 C104.516894,34.4906619 104.705595,33.9280514 105.083004,33.5436534 C105.460413,33.1592554 106.01254,32.9670593 106.739402,32.9670593 L107.095842,32.9670593 L107.095842,17.3256331 L106.739402,17.3256331 C106.026518,17.3256331 105.477886,17.126448 105.093488,16.7280719 C104.70909,16.3296957 104.516894,15.7600963 104.516894,15.0192565 C104.516894,14.2085262 104.719573,13.6179599 105.124938,13.24754 C105.530304,12.8771201 106.187265,12.691913 107.095842,12.691913 L124.267863,12.691913 C125.120528,12.691913 125.697116,12.8212085 125.997646,13.0798036 C126.298175,13.3383986 126.448438,13.8520864 126.448438,14.6208824 L126.448438,19.3175037 C126.448438,20.2680151 126.273714,20.9494377 125.924261,21.361792 C125.574808,21.7741462 125.008703,21.9803202 124.225929,21.9803202 C123.415199,21.9803202 122.831622,21.7706517 122.47518,21.3513084 C122.118738,20.9319652 121.94052,20.254037 121.94052,19.3175037 L121.94052,17.1159625 Z M19.7719369,47.6405477 C20.037521,47.1373358 20.3205734,46.7808993 20.6211028,46.5712277 C20.9216322,46.361556 21.295541,46.2567218 21.7428405,46.2567218 C22.4277678,46.2567218 22.9134998,46.4384345 23.2000511,46.8018653 C23.4866023,47.1652962 23.6298758,47.7873127 23.6298758,48.6679336 L23.6718099,54.119369 C23.6718099,55.0838586 23.5145586,55.7338309 23.2000511,56.0693055 C22.8855436,56.4047802 22.3089553,56.572515 21.4702687,56.572515 C20.8831881,56.572515 20.4254119,56.4292415 20.0969263,56.1426902 C19.7684407,55.856139 19.4993662,55.3424512 19.2896945,54.6016114 C18.9122856,53.2597129 18.3322027,52.3022267 17.5494286,51.7291243 C16.7666545,51.1560218 15.6693894,50.8694748 14.2576003,50.8694748 C12.1049715,50.8694748 10.4590738,51.5963256 9.31985785,53.050049 C8.18064193,54.5037724 7.61104252,56.6074463 7.61104252,59.3611338 C7.61104252,62.1148214 8.20859773,64.2429566 9.40372609,65.7456034 C10.5988544,67.2482501 12.2936748,67.9995623 14.488238,67.9995623 C14.9914499,67.9995623 15.5645438,67.9401562 16.2075368,67.8213423 C16.8505299,67.7025283 17.6053364,67.5173212 18.4719792,67.2657152 L18.4719792,63.9529198 L16.1027015,63.9529198 C15.1521901,63.9529198 14.4777564,63.7781961 14.0793803,63.4287433 C13.6810042,63.0792906 13.4818191,62.4992078 13.4818191,61.6884774 C13.4818191,60.8497908 13.6810042,60.2522356 14.0793803,59.8957938 C14.4777564,59.5393521 15.1521901,59.3611338 16.1027015,59.3611338 L23.6718099,59.3611338 C24.6502776,59.3611338 25.3386891,59.5358576 25.7370653,59.8853103 C26.1354414,60.2347631 26.3346265,60.8218348 26.3346265,61.6465433 C26.3346265,62.3873831 26.1354414,62.9569825 25.7370653,63.3553586 C25.3386891,63.7537347 24.7621008,63.9529198 24.0072829,63.9529198 L23.6718099,63.9529198 L23.6718099,68.9430799 L23.6718099,69.1946846 C23.6718099,69.6419841 23.6228873,69.9529924 23.5250405,70.1277188 C23.4271937,70.3024451 23.2315031,70.4806634 22.9379628,70.6623788 C22.1412106,71.1376345 20.8762107,71.5569715 19.1429251,71.9204023 C17.4096396,72.2838332 15.6554131,72.4655459 13.8801932,72.4655459 C10.2179286,72.4655459 7.25461383,71.2564576 4.99016011,68.8382446 C2.72570638,66.4200317 1.59349651,63.2610264 1.59349651,59.3611338 C1.59349651,55.6010224 2.73968428,52.4769618 5.03209423,49.9888583 C7.32450417,47.5007549 10.2319073,46.2567218 13.7543909,46.2567218 C14.7328585,46.2567218 15.7078171,46.368545 16.6792957,46.5921947 C17.6507743,46.8158445 18.6816444,47.165292 19.7719369,47.6405477 L19.7719369,47.6405477 Z M35.611576,51.5823548 L35.611576,56.4047785 L42.4678043,56.4047785 L42.4678043,51.5823548 L42.1323314,51.5823548 C41.3775135,51.5823548 40.8009251,51.3866642 40.402549,50.9952772 C40.0041729,50.6038901 39.8049878,50.0307962 39.8049878,49.2759783 C39.8049878,48.4512699 40.0111618,47.8572091 40.4235161,47.4937783 C40.8358703,47.1303474 41.5172929,46.9486347 42.4678043,46.9486347 L47.8773056,46.9486347 C48.8278171,46.9486347 49.5022507,47.1303474 49.9006269,47.4937783 C50.299003,47.8572091 50.498188,48.4512699 50.498188,49.2759783 C50.498188,50.0307962 50.3059919,50.6038901 49.9215939,50.9952772 C49.5371959,51.3866642 48.9745854,51.5823548 48.2337456,51.5823548 L47.8773056,51.5823548 L47.8773056,67.2237811 L48.2337456,67.2237811 C48.9885636,67.2237811 49.5616574,67.4159772 49.9530445,67.8003752 C50.3444316,68.1847732 50.5401222,68.7473837 50.5401222,69.4882235 C50.5401222,70.3129319 50.3374426,70.9069927 49.9320774,71.2704235 C49.5267123,71.6338543 48.8417952,71.815567 47.8773056,71.815567 L42.4678043,71.815567 C41.5033148,71.815567 40.8183977,71.6373488 40.4130325,71.280907 C40.0076674,70.9244652 39.8049878,70.32691 39.8049878,69.4882235 C39.8049878,68.7473837 40.0041729,68.1847732 40.402549,67.8003752 C40.8009251,67.4159772 41.3775135,67.2237811 42.1323314,67.2237811 L42.4678043,67.2237811 L42.4678043,61.0384986 L35.611576,61.0384986 L35.611576,67.2237811 L35.9470489,67.2237811 C36.7018668,67.2237811 37.2784552,67.4159772 37.6768313,67.8003752 C38.0752074,68.1847732 38.2743925,68.7473837 38.2743925,69.4882235 C38.2743925,70.3129319 38.0682185,70.9069927 37.6558642,71.2704235 C37.24351,71.6338543 36.5620874,71.815567 35.611576,71.815567 L30.2020747,71.815567 C29.2375851,71.815567 28.552668,71.6373488 28.1473029,71.280907 C27.7419377,70.9244652 27.5392581,70.32691 27.5392581,69.4882235 C27.5392581,68.7473837 27.7349487,68.1847732 28.1263358,67.8003752 C28.5177229,67.4159772 29.0908168,67.2237811 29.8456347,67.2237811 L30.2020747,67.2237811 L30.2020747,51.5823548 L29.8456347,51.5823548 C29.1047949,51.5823548 28.5421844,51.3866642 28.1577864,50.9952772 C27.7733884,50.6038901 27.5811923,50.0307962 27.5811923,49.2759783 C27.5811923,48.4512699 27.7803773,47.8572091 28.1787534,47.4937783 C28.5771296,47.1303474 29.2515632,46.9486347 30.2020747,46.9486347 L35.611576,46.9486347 C36.5481093,46.9486347 37.2260374,47.1303474 37.6453807,47.4937783 C38.064724,47.8572091 38.2743925,48.4512699 38.2743925,49.2759783 C38.2743925,50.0307962 38.0752074,50.6038901 37.6768313,50.9952772 C37.2784552,51.3866642 36.7018668,51.5823548 35.9470489,51.5823548 L35.611576,51.5823548 Z M67.365213,51.5823548 L67.365213,67.2237811 L70.887679,67.2237811 C71.8381904,67.2237811 72.519613,67.4019993 72.9319673,67.7584411 C73.3443215,68.1148829 73.5504955,68.6914712 73.5504955,69.4882235 C73.5504955,70.2989538 73.340827,70.8895201 72.9214837,71.25994 C72.5021404,71.6303599 71.8242123,71.815567 70.887679,71.815567 L58.4332458,71.815567 C57.4827343,71.815567 56.8013117,71.6338543 56.3889575,71.2704235 C55.9766033,70.9069927 55.7704292,70.3129319 55.7704292,69.4882235 C55.7704292,68.6774931 55.9731088,68.0974103 56.378474,67.7479575 C56.7838391,67.3985048 57.4687562,67.2237811 58.4332458,67.2237811 L61.9557117,67.2237811 L61.9557117,51.5823548 L58.4332458,51.5823548 C57.4827343,51.5823548 56.8013117,51.4006421 56.3889575,51.0372113 C55.9766033,50.6737805 55.7704292,50.0867087 55.7704292,49.2759783 C55.7704292,48.4512699 55.9731088,47.8641981 56.378474,47.5147453 C56.7838391,47.1652926 57.4687562,46.9905689 58.4332458,46.9905689 L70.887679,46.9905689 C71.8801247,46.9905689 72.5720308,47.1652926 72.9634178,47.5147453 C73.3548049,47.8641981 73.5504955,48.4512699 73.5504955,49.2759783 C73.5504955,50.0867087 73.347816,50.6737805 72.9424508,51.0372113 C72.5370856,51.4006421 71.8521685,51.5823548 70.887679,51.5823548 L67.365213,51.5823548 Z M97.8608265,51.5823548 L97.8608265,63.1771386 L97.8608265,63.5755127 C97.8608265,65.4485794 97.7385199,66.8044357 97.493903,67.6431222 C97.2492861,68.4818088 96.8404325,69.2296264 96.26733,69.8865976 C95.5264902,70.7392623 94.4991146,71.3822457 93.1851723,71.815567 C91.87123,72.2488884 90.2917273,72.4655459 88.4466169,72.4655459 C87.1466527,72.4655459 85.8921362,72.3397448 84.6830298,72.0881388 C83.4739233,71.8365328 82.3102631,71.4591296 81.1920144,70.9559176 C80.5769776,70.6763554 80.175113,70.31293 79.9864085,69.8656305 C79.797704,69.418331 79.7033532,68.6914802 79.7033532,67.6850564 L79.7033532,63.3658422 C79.7033532,62.1637247 79.8780769,61.3250508 80.2275297,60.849795 C80.5769824,60.3745393 81.185021,60.136915 82.0516638,60.136915 C83.2957156,60.136915 83.9806326,61.0524675 84.1064356,62.8835998 C84.1204137,63.2050963 84.1413806,63.4497096 84.1693368,63.6174469 C84.3370741,65.2389076 84.7144774,66.3466561 85.301558,66.9407258 C85.8886386,67.5347954 86.8251579,67.8318258 88.1111439,67.8318258 C89.7046484,67.8318258 90.8263749,67.4089943 91.476357,66.5633187 C92.126339,65.7176431 92.4513252,64.1765796 92.4513252,61.9400821 L92.4513252,51.5823548 L88.9288593,51.5823548 C87.9783478,51.5823548 87.2969252,51.4006421 86.884571,51.0372113 C86.4722168,50.6737805 86.2660427,50.0867087 86.2660427,49.2759783 C86.2660427,48.4512699 86.4652278,47.8641981 86.8636039,47.5147453 C87.26198,47.1652926 87.9503916,46.9905689 88.9288593,46.9905689 L99.6220595,46.9905689 C100.600527,46.9905689 101.288939,47.1652926 101.687315,47.5147453 C102.085691,47.8641981 102.284876,48.4512699 102.284876,49.2759783 C102.284876,50.0867087 102.078702,50.6737805 101.666348,51.0372113 C101.253994,51.4006421 100.572571,51.5823548 99.6220595,51.5823548 L97.8608265,51.5823548 Z M112.505343,51.5823548 L112.505343,57.9353738 L118.984165,51.4565525 C118.257303,51.3726838 117.747109,51.1665098 117.453569,50.8380242 C117.160029,50.5095387 117.013261,49.9888619 117.013261,49.2759783 C117.013261,48.4512699 117.212446,47.8572091 117.610822,47.4937783 C118.009198,47.1303474 118.683632,46.9486347 119.634143,46.9486347 L124.771073,46.9486347 C125.721584,46.9486347 126.396018,47.1303474 126.794394,47.4937783 C127.19277,47.8572091 127.391955,48.4512699 127.391955,49.2759783 C127.391955,50.0447743 127.19277,50.6213627 126.794394,51.0057607 C126.396018,51.3901587 125.812441,51.5823548 125.043645,51.5823548 L124.561402,51.5823548 L118.459988,57.641835 C119.592215,58.4805215 120.626579,59.5812811 121.563113,60.9441468 C122.499646,62.3070125 123.596911,64.400203 124.854941,67.2237811 L125.127513,67.2237811 L125.546854,67.2237811 C126.371563,67.2237811 126.98659,67.4124827 127.391955,67.7898917 C127.79732,68.1673006 128,68.7334056 128,69.4882235 C128,70.3129319 127.793826,70.9069927 127.381472,71.2704235 C126.969118,71.6338543 126.287695,71.815567 125.337183,71.815567 L122.758235,71.815567 C121.626008,71.815567 120.710456,71.0537715 120.01155,69.5301576 C119.885747,69.2505954 119.787902,69.026949 119.718012,68.8592117 C118.795456,66.9022764 117.949793,65.3926632 117.180997,64.3303269 C116.412201,63.2679906 115.510627,62.2965265 114.476247,61.4159056 L112.505343,63.302941 L112.505343,67.2237811 L112.840816,67.2237811 C113.595634,67.2237811 114.172222,67.4159772 114.570599,67.8003752 C114.968975,68.1847732 115.16816,68.7473837 115.16816,69.4882235 C115.16816,70.3129319 114.961986,70.9069927 114.549631,71.2704235 C114.137277,71.6338543 113.455855,71.815567 112.505343,71.815567 L107.095842,71.815567 C106.131352,71.815567 105.446435,71.6373488 105.04107,71.280907 C104.635705,70.9244652 104.433025,70.32691 104.433025,69.4882235 C104.433025,68.7473837 104.628716,68.1847732 105.020103,67.8003752 C105.41149,67.4159772 105.984584,67.2237811 106.739402,67.2237811 L107.095842,67.2237811 L107.095842,51.5823548 L106.739402,51.5823548 C105.998562,51.5823548 105.435952,51.3866642 105.051554,50.9952772 C104.667156,50.6038901 104.474959,50.0307962 104.474959,49.2759783 C104.474959,48.4512699 104.674145,47.8572091 105.072521,47.4937783 C105.470897,47.1303474 106.14533,46.9486347 107.095842,46.9486347 L112.505343,46.9486347 C113.441877,46.9486347 114.119805,47.1303474 114.539148,47.4937783 C114.958491,47.8572091 115.16816,48.4512699 115.16816,49.2759783 C115.16816,50.0307962 114.968975,50.6038901 114.570599,50.9952772 C114.172222,51.3866642 113.595634,51.5823548 112.840816,51.5823548 L112.505343,51.5823548 Z M13.439885,96.325622 L17.4445933,84.4372993 C17.6961993,83.6545252 18.0456468,83.0849258 18.4929463,82.728484 C18.9402458,82.3720422 19.5343065,82.193824 20.2751463,82.193824 L23.5460076,82.193824 C24.496519,82.193824 25.1779416,82.3755367 25.5902958,82.7389675 C26.0026501,83.1023984 26.2088241,83.6964591 26.2088241,84.5211676 C26.2088241,85.2759855 26.009639,85.8490794 25.6112629,86.2404664 C25.2128868,86.6318535 24.6362984,86.8275441 23.8814805,86.8275441 L23.5460076,86.8275441 L24.1330852,102.46897 L24.4895252,102.46897 C25.2443431,102.46897 25.8104481,102.661166 26.187857,103.045564 C26.565266,103.429962 26.7539676,103.992573 26.7539676,104.733413 C26.7539676,105.558121 26.5547826,106.152182 26.1564064,106.515613 C25.7580303,106.879044 25.0835967,107.060756 24.1330852,107.060756 L19.4154969,107.060756 C18.4649855,107.060756 17.7905518,106.882538 17.3921757,106.526096 C16.9937996,106.169654 16.7946145,105.572099 16.7946145,104.733413 C16.7946145,103.992573 16.9868106,103.429962 17.3712086,103.045564 C17.7556066,102.661166 18.325206,102.46897 19.0800239,102.46897 L19.4154969,102.46897 L19.1219581,89.6790642 L16.0607674,99.1981091 C15.8371177,99.9109927 15.5191204,100.42468 15.1067662,100.739188 C14.694412,101.053695 14.1248126,101.210947 13.3979509,101.210947 C12.6710892,101.210947 12.0945008,101.053695 11.6681685,100.739188 C11.2418362,100.42468 10.91685,99.9109927 10.6932002,99.1981091 L7.65297664,89.6790642 L7.35943781,102.46897 L7.69491075,102.46897 C8.44972866,102.46897 9.01932808,102.661166 9.40372609,103.045564 C9.78812409,103.429962 9.98032022,103.992573 9.98032022,104.733413 C9.98032022,105.558121 9.77764067,106.152182 9.3722755,106.515613 C8.96691032,106.879044 8.29597114,107.060756 7.35943781,107.060756 L2.62088241,107.060756 C1.68434908,107.060756 1.01340989,106.879044 0.608044719,106.515613 C0.202679546,106.152182 0,105.558121 0,104.733413 C0,103.992573 0.192196121,103.429962 0.57659413,103.045564 C0.960992139,102.661166 1.53059155,102.46897 2.28540946,102.46897 L2.62088241,102.46897 L3.22892713,86.8275441 L2.89345418,86.8275441 C2.13863627,86.8275441 1.56204791,86.6318535 1.16367179,86.2404664 C0.765295672,85.8490794 0.5661106,85.2759855 0.5661106,84.5211676 C0.5661106,83.6964591 0.772284622,83.1023984 1.18463885,82.7389675 C1.59699308,82.3755367 2.27841569,82.193824 3.22892713,82.193824 L6.49978838,82.193824 C7.22665007,82.193824 7.81022738,82.3685477 8.25053783,82.7180005 C8.69084827,83.0674532 9.05077919,83.6405471 9.33034138,84.4372993 L13.439885,96.325622 Z M43.8935644,98.3803938 L43.8935644,86.8275441 L42.7403761,86.8275441 C41.8178209,86.8275441 41.1573651,86.6458314 40.758989,86.2824006 C40.3606129,85.9189697 40.1614278,85.3318979 40.1614278,84.5211676 C40.1614278,83.7104372 40.3606129,83.119871 40.758989,82.7494511 C41.1573651,82.3790312 41.8178209,82.193824 42.7403761,82.193824 L48.6950209,82.193824 C49.6035981,82.193824 50.2605593,82.3790312 50.6659245,82.7494511 C51.0712897,83.119871 51.2739692,83.7104372 51.2739692,84.5211676 C51.2739692,85.2620074 51.0817731,85.8316068 50.6973751,86.2299829 C50.3129771,86.628359 49.7643445,86.8275441 49.051461,86.8275441 L48.6950209,86.8275441 L48.6950209,105.865634 C48.6950209,106.522605 48.6251315,106.934953 48.4853504,107.10269 C48.3455693,107.270428 48.0310665,107.354295 47.5418327,107.354295 L45.4451268,107.354295 C44.7741775,107.354295 44.3024234,107.284406 44.0298503,107.144625 C43.7572771,107.004843 43.5231473,106.76023 43.3274538,106.410777 L34.6051571,91.0838571 L34.6051571,102.46897 L35.8212466,102.46897 C36.7298237,102.46897 37.379796,102.643694 37.7711831,102.993147 C38.1625701,103.3426 38.3582607,103.922682 38.3582607,104.733413 C38.3582607,105.558121 38.1590757,106.152182 37.7606995,106.515613 C37.3623234,106.879044 36.7158456,107.060756 35.8212466,107.060756 L29.8037005,107.060756 C28.8951234,107.060756 28.2381621,106.879044 27.832797,106.515613 C27.4274318,106.152182 27.2247522,105.558121 27.2247522,104.733413 C27.2247522,103.992573 27.4134539,103.429962 27.7908629,103.045564 C28.1682718,102.661166 28.7273878,102.46897 29.4682276,102.46897 L29.8037005,102.46897 L29.8037005,86.8275441 L29.4682276,86.8275441 C28.755344,86.8275441 28.203217,86.628359 27.8118299,86.2299829 C27.4204428,85.8316068 27.2247522,85.2620074 27.2247522,84.5211676 C27.2247522,83.7104372 27.4309263,83.119871 27.8432805,82.7494511 C28.2556347,82.3790312 28.9091015,82.193824 29.8037005,82.193824 L33.2422983,82.193824 C34.0670067,82.193824 34.6261227,82.3021527 34.919663,82.5188134 C35.2132033,82.7354741 35.5416839,83.1722835 35.9051148,83.8292546 L43.8935644,98.3803938 Z M64.6604624,86.3662688 C62.8572863,86.3662688 61.4420239,87.0931196 60.4146329,88.546843 C59.3872418,90.0005663 58.873554,92.0203728 58.873554,94.6063231 C58.873554,97.1922733 59.3907363,99.2190688 60.4251164,100.68677 C61.4594965,102.154472 62.8712644,102.888312 64.6604624,102.888312 C66.4636385,102.888312 67.8823953,102.157966 68.9167754,100.697254 C69.9511555,99.2365414 70.4683378,97.2062514 70.4683378,94.6063231 C70.4683378,92.0203728 69.95465,90.0005663 68.9272589,88.546843 C67.8998679,87.0931196 66.4776166,86.3662688 64.6604624,86.3662688 L64.6604624,86.3662688 Z M64.6604624,81.501911 C68.0990773,81.501911 70.929602,82.7319662 73.1521214,85.1921135 C75.3746408,87.6522607 76.4858838,90.7902992 76.4858838,94.6063231 C76.4858838,98.4503032 75.3816297,101.595331 73.1730884,104.0415 C70.9645471,106.487669 68.1270335,107.710735 64.6604624,107.710735 C61.2358256,107.710735 58.4053009,106.477185 56.1688034,104.010049 C53.9323059,101.542913 52.8140739,98.4083688 52.8140739,94.6063231 C52.8140739,90.7763211 53.9218224,87.6347881 56.1373528,85.1816299 C58.3528831,82.7284717 61.1938912,81.501911 64.6604624,81.501911 L64.6604624,81.501911 Z M87.4611651,98.1707232 L87.4611651,102.46897 L89.6207722,102.46897 C90.5293493,102.46897 91.1758272,102.643694 91.5602252,102.993147 C91.9446232,103.3426 92.1368193,103.922682 92.1368193,104.733413 C92.1368193,105.558121 91.9411287,106.152182 91.5497417,106.515613 C91.1583546,106.879044 90.5153712,107.060756 89.6207722,107.060756 L82.3661697,107.060756 C81.4436145,107.060756 80.7831587,106.879044 80.3847826,106.515613 C79.9864065,106.152182 79.7872214,105.558121 79.7872214,104.733413 C79.7872214,103.992573 79.9759231,103.429962 80.353332,103.045564 C80.730741,102.661166 81.282868,102.46897 82.0097297,102.46897 L82.3661697,102.46897 L82.3661697,86.8275441 L82.0097297,86.8275441 C81.2968461,86.8275441 80.7482136,86.628359 80.3638155,86.2299829 C79.9794175,85.8316068 79.7872214,85.2620074 79.7872214,84.5211676 C79.7872214,83.7104372 79.989901,83.119871 80.3952661,82.7494511 C80.8006313,82.3790312 81.4575926,82.193824 82.3661697,82.193824 L91.0255652,82.193824 C94.450202,82.193824 97.0396079,82.8507853 98.7938606,84.1647276 C100.548113,85.4786699 101.425227,87.414609 101.425227,89.972603 C101.425227,92.6703781 100.551608,94.7111515 98.8043442,96.0949843 C97.0570805,97.4788171 94.4641801,98.1707232 91.0255652,98.1707232 L87.4611651,98.1707232 Z M87.4611651,86.8275441 L87.4611651,93.4531348 L90.4384875,93.4531348 C92.0879044,93.4531348 93.328443,93.1735768 94.1601405,92.6144525 C94.9918381,92.0553281 95.4076806,91.2166541 95.4076806,90.0984053 C95.4076806,89.0500471 94.9778602,88.2428234 94.1182064,87.67671 C93.2585527,87.1105966 92.031992,86.8275441 90.4384875,86.8275441 L87.4611651,86.8275441 Z M114.727851,107.396229 L113.092421,109.03166 C113.69348,108.835966 114.284046,108.689198 114.864137,108.591352 C115.444229,108.493505 116.013828,108.444582 116.572953,108.444582 C117.677223,108.444582 118.840883,108.608823 120.063968,108.937308 C121.287053,109.265794 122.031376,109.430034 122.29696,109.430034 C122.744259,109.430034 123.327837,109.279772 124.047709,108.979242 C124.767582,108.678713 125.253314,108.52845 125.50492,108.52845 C126.02211,108.52845 126.45193,108.727636 126.794394,109.126012 C127.136858,109.524388 127.308087,110.024098 127.308087,110.625156 C127.308087,111.421909 126.836333,112.099837 125.892811,112.658961 C124.949288,113.218086 123.792617,113.497643 122.422762,113.497643 C121.486229,113.497643 120.28413,113.277492 118.816428,112.837181 C117.348727,112.396871 116.286406,112.176719 115.629435,112.176719 C114.636989,112.176719 113.518757,112.449288 112.274706,112.994434 C111.030654,113.53958 110.261869,113.812149 109.968329,113.812149 C109.36727,113.812149 108.857077,113.612964 108.437734,113.214588 C108.01839,112.816212 107.808722,112.337469 107.808722,111.778345 C107.808722,111.386958 107.941512,110.971115 108.207096,110.530805 C108.47268,110.090494 108.94094,109.520895 109.611889,108.821989 L111.729562,106.683349 C109.395218,105.830685 107.536157,104.29661 106.152324,102.08108 C104.768491,99.8655494 104.076585,97.3180772 104.076585,94.4385866 C104.076585,90.6365409 105.180839,87.5299526 107.389381,85.1187288 C109.597922,82.7075049 112.442425,81.501911 115.922974,81.501911 C119.389545,81.501911 122.227059,82.7109994 124.4356,85.1292123 C126.644141,87.5474252 127.748395,90.650519 127.748395,94.4385866 C127.748395,98.2126762 126.65113,101.322759 124.456567,103.768928 C122.262004,106.215097 119.480402,107.438163 116.111677,107.438163 C115.888028,107.438163 115.660887,107.434669 115.430248,107.42768 C115.199609,107.420691 114.965479,107.410207 114.727851,107.396229 L114.727851,107.396229 Z M115.922974,86.3662688 C114.119798,86.3662688 112.704535,87.0931196 111.677144,88.546843 C110.649753,90.0005663 110.136065,92.0203728 110.136065,94.6063231 C110.136065,97.1922733 110.653248,99.2190688 111.687628,100.68677 C112.722008,102.154472 114.133776,102.888312 115.922974,102.888312 C117.72615,102.888312 119.144907,102.157966 120.179287,100.697254 C121.213667,99.2365414 121.730849,97.2062514 121.730849,94.6063231 C121.730849,92.0203728 121.217161,90.0005663 120.18977,88.546843 C119.162379,87.0931196 117.740128,86.3662688 115.922974,86.3662688 L115.922974,86.3662688 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/mono-line": {
            "title": "$:/core/images/mono-line",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-mono-line tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M60.4374591,84.522627 L61.3450888,84.522627 C63.2671377,84.522627 64.7264493,85.0120303 65.7230673,85.9908515 C66.7196852,86.9696727 67.2179868,88.4022896 67.2179868,90.288745 C67.2179868,92.3887615 66.6929905,93.9014625 65.6429823,94.8268935 C64.5929741,95.7523244 62.857817,96.215033 60.4374591,96.215033 L44.3670747,96.215033 C41.9111232,96.215033 40.1670679,95.7612227 39.1348565,94.8535884 C38.102645,93.9459542 37.586547,92.424355 37.586547,90.288745 C37.586547,88.2243221 38.102645,86.747214 39.1348565,85.8573766 C40.1670679,84.9675391 41.9111232,84.522627 44.3670747,84.522627 L46.235724,84.522627 L44.0467348,78.2759992 L20.9822627,78.2759992 L18.6864935,84.522627 L20.5551429,84.522627 C22.9755008,84.522627 24.7106579,84.9764373 25.7606661,85.8840716 C26.8106743,86.7917058 27.3356705,88.2599156 27.3356705,90.288745 C27.3356705,92.3887615 26.8106743,93.9014625 25.7606661,94.8268935 C24.7106579,95.7523244 22.9755008,96.215033 20.5551429,96.215033 L6.78052766,96.215033 C4.32457622,96.215033 2.58052094,95.7523244 1.54830946,94.8268935 C0.516097994,93.9014625 0,92.3887615 0,90.288745 C0,88.4022896 0.498301511,86.9696727 1.49491948,85.9908515 C2.49153745,85.0120303 3.95084902,84.522627 5.87289797,84.522627 L6.78052766,84.522627 L21.0890427,44.6937008 L16.8178442,44.6937008 C14.3974863,44.6937008 12.6623292,44.2309922 11.612321,43.3055613 C10.5623128,42.3801303 10.0373165,40.8852258 10.0373165,38.8208028 C10.0373165,36.7207864 10.5623128,35.2080854 11.612321,34.2826544 C12.6623292,33.3572234 14.3974863,32.8945149 16.8178442,32.8945149 L36.8390873,32.8945149 C40.0069087,32.8945149 42.231469,34.6029772 43.512835,38.0199531 L43.512835,38.180123 L60.4374591,84.522627 Z M32.4611088,44.6937008 L24.7195615,67.224273 L40.2026561,67.224273 L32.4611088,44.6937008 Z M89.5058233,68.5590225 L89.5058233,84.8429669 L97.5143205,84.8429669 C103.173687,84.8429669 107.160099,84.22009 109.473676,82.9743176 C111.787254,81.7285451 112.944025,79.6463566 112.944025,76.7276897 C112.944025,73.7734293 111.840643,71.6734444 109.633846,70.4276719 C107.427049,69.1818994 103.565213,68.5590225 98.0482204,68.5590225 L89.5058233,68.5590225 Z M116.734714,62.6327346 C120.614405,64.0564746 123.461842,66.0051894 125.277111,68.4789376 C127.092379,70.9526857 128,74.1115614 128,77.9556593 C128,81.1946677 127.216955,84.1488838 125.650841,86.8183962 C124.084727,89.4879087 121.84237,91.676876 118.923703,93.385364 C117.215215,94.3819819 115.302093,95.1027395 113.18428,95.5476582 C111.066467,95.9925769 108.06776,96.215033 104.188068,96.215033 L99.7033098,96.215033 L76.3184979,96.215033 C73.9693269,96.215033 72.2875593,95.7523244 71.2731446,94.8268935 C70.2587299,93.9014625 69.7515301,92.3887615 69.7515301,90.288745 C69.7515301,88.4022896 70.2320352,86.9696727 71.1930596,85.9908515 C72.1540841,85.0120303 73.5600062,84.522627 75.4108682,84.522627 L76.3184979,84.522627 L76.3184979,44.6937008 L75.4108682,44.6937008 C73.5600062,44.6937008 72.1540841,44.1953993 71.1930596,43.1987813 C70.2320352,42.2021633 69.7515301,40.7428518 69.7515301,38.8208028 C69.7515301,36.7563799 70.2676281,35.2525771 71.2998396,34.3093494 C72.3320511,33.3661217 74.0049204,32.8945149 76.3184979,32.8945149 L100.877889,32.8945149 C108.388118,32.8945149 114.09189,34.3538264 117.989378,37.2724934 C121.886867,40.1911603 123.835581,44.4623161 123.835581,50.0860889 C123.835581,52.8623819 123.239399,55.3093982 122.047017,57.4272114 C120.854635,59.5450246 119.083885,61.2801816 116.734714,62.6327346 L116.734714,62.6327346 Z M89.5058233,44.3733609 L89.5058233,57.8276363 L96.7134708,57.8276363 C101.091471,57.8276363 104.179161,57.3115383 105.976633,56.2793268 C107.774104,55.2471153 108.672827,53.50306 108.672827,51.0471086 C108.672827,48.7335312 107.863087,47.0428653 106.243583,45.9750604 C104.624078,44.9072554 101.999097,44.3733609 98.3685602,44.3733609 L89.5058233,44.3733609 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M56,72 L8.00697327,72 C3.59075293,72 0,68.418278 0,64 C0,59.5907123 3.58484404,56 8.00697327,56 L56,56 L56,8.00697327 C56,3.59075293 59.581722,0 64,0 C68.4092877,0 72,3.58484404 72,8.00697327 L72,56 L119.993027,56 C124.409247,56 128,59.581722 128,64 C128,68.4092877 124.415156,72 119.993027,72 L72,72 L72,119.993027 C72,124.409247 68.418278,128 64,128 C59.5907123,128 56,124.415156 56,119.993027 L56,72 L56,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-here-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n    \t<g transform=\"translate(52.233611, 64.389922) rotate(75.000000) translate(-52.233611, -64.389922) translate(-7.734417, 3.702450)\">\n\t        <path d=\"M18.9270186,45.959338 L18.9080585,49.6521741 C18.8884833,53.4648378 21.0574548,58.7482162 23.7526408,61.4434022 L78.5671839,116.257945 C81.2617332,118.952495 85.6348701,118.950391 88.3334363,116.251825 L115.863237,88.7220241 C118.555265,86.0299959 118.564544,81.6509578 115.869358,78.9557717 L61.0548144,24.1412286 C58.3602652,21.4466794 53.0787224,19.2788426 49.2595808,19.3006519 L25.9781737,19.4336012 C22.1633003,19.4553862 19.0471195,22.5673232 19.0275223,26.3842526 L18.9871663,34.2443819 C19.0818862,34.255617 19.1779758,34.2665345 19.2754441,34.2771502 C22.6891275,34.6489512 27.0485594,34.2348566 31.513244,33.2285542 C31.7789418,32.8671684 32.075337,32.5211298 32.4024112,32.1940556 C34.8567584,29.7397084 38.3789778,29.0128681 41.4406288,30.0213822 C41.5958829,29.9543375 41.7503946,29.8866669 41.9041198,29.8183808 L42.1110981,30.2733467 C43.1114373,30.6972371 44.0473796,31.3160521 44.8614145,32.1300869 C48.2842088,35.5528813 48.2555691,41.130967 44.7974459,44.5890903 C41.4339531,47.952583 36.0649346,48.0717177 32.6241879,44.9262969 C27.8170558,45.8919233 23.0726921,46.2881596 18.9270186,45.959338 Z\"></path>\n\t        <path d=\"M45.4903462,38.8768094 C36.7300141,42.6833154 26.099618,44.7997354 18.1909048,43.9383587 C7.2512621,42.7468685 1.50150083,35.8404432 4.66865776,24.7010202 C7.51507386,14.6896965 15.4908218,6.92103848 24.3842626,4.38423012 C34.1310219,1.60401701 42.4070208,6.15882777 42.4070209,16.3101169 L34.5379395,16.310117 C34.5379394,11.9285862 31.728784,10.3825286 26.5666962,11.8549876 C20.2597508,13.6540114 14.3453742,19.4148216 12.2444303,26.8041943 C10.4963869,32.9523565 12.6250796,35.5092726 19.0530263,36.2093718 C25.5557042,36.9176104 35.0513021,34.9907189 42.7038419,31.5913902 L42.7421786,31.6756595 C44.3874154,31.5384763 47.8846101,37.3706354 45.9274416,38.6772897 L45.9302799,38.6835285 C45.9166992,38.6895612 45.9031139,38.6955897 45.8895238,38.7016142 C45.8389288,38.7327898 45.7849056,38.7611034 45.7273406,38.7863919 C45.6506459,38.8200841 45.571574,38.8501593 45.4903462,38.8768094 Z\"></path>\n        </g>\n        <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n        <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n    </g>\n    </g>\n</svg>"
        },
        "$:/core/images/new-image-button": {
            "title": "$:/core/images/new-image-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.3619177,73.6270062 L97.1875317,46.2162388 C97.91364,44.9585822 97.4824378,43.3533085 96.2260476,42.6279312 L46.2162388,13.7547547 C44.9585822,13.0286463 43.3533085,13.4598485 42.6279312,14.7162388 L30.0575956,36.4886988 L40.0978909,31.2276186 C43.1404959,29.6333041 46.8692155,31.3421319 47.6479264,34.6877101 L51.2545483,52.3903732 L61.1353556,53.2399953 C63.2899974,53.4346096 65.1046382,54.9309951 65.706105,57.0091178 C65.7395572,57.1246982 65.8069154,57.3539875 65.9047035,57.6813669 C66.0696435,58.2335608 66.2581528,58.852952 66.4667073,59.5238092 C67.0618822,61.4383079 67.6960725,63.3742727 68.3393254,65.2021174 C68.5462918,65.7902259 68.7511789,66.3583016 68.953259,66.9034738 C69.5777086,68.5881157 70.1617856,70.0172008 70.6783305,71.110045 C70.9334784,71.6498566 71.1627732,72.0871602 71.4035746,72.5373068 C71.6178999,72.7492946 71.9508843,72.9623307 72.4151452,73.1586945 C73.5561502,73.6412938 75.1990755,73.899146 77.0720271,73.9171651 C77.9355886,73.9254732 78.7819239,73.8832103 79.5638842,73.8072782 C80.0123946,73.7637257 80.3172916,73.7224469 80.4352582,73.7027375 C80.7503629,73.6500912 81.0598053,73.6256267 81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 L81.3619177,73.6270062 Z M37.4707881,2.64867269 C38.9217993,0.135447653 42.1388058,-0.723707984 44.6486727,0.725364314 L108.293614,37.4707881 C110.806839,38.9217993 111.665994,42.1388058 110.216922,44.6486727 L73.4714982,108.293614 C72.0204871,110.806839 68.8034805,111.665994 66.2936136,110.216922 L2.64867269,73.4714982 C0.135447653,72.0204871 -0.723707984,68.8034805 0.725364314,66.2936136 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 L37.4707881,2.64867269 Z M80.3080975,53.1397764 C82.8191338,54.5895239 86.0299834,53.7291793 87.4797308,51.218143 C88.9294783,48.7071068 88.0691338,45.4962571 85.5580975,44.0465097 C83.0470612,42.5967622 79.8362116,43.4571068 78.3864641,45.968143 C76.9367166,48.4791793 77.7970612,51.6900289 80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 L80.3080975,53.1397764 Z M96,112 L88.0070969,112 C83.5881712,112 80,108.418278 80,104 C80,99.5907123 83.5848994,96 88.0070969,96 L96,96 L96,88.0070969 C96,83.5881712 99.581722,80 104,80 C108.409288,80 112,83.5848994 112,88.0070969 L112,96 L119.992903,96 C124.411829,96 128,99.581722 128,104 C128,108.409288 124.415101,112 119.992903,112 L112,112 L112,119.992903 C112,124.411829 108.418278,128 104,128 C99.5907123,128 96,124.415101 96,119.992903 L96,112 L96,112 Z M33.3471097,51.7910932 C40.7754579,59.7394511 42.3564368,62.4818351 40.7958321,65.1848818 C39.2352273,67.8879286 26.9581062,62.8571718 24.7019652,66.7649227 C22.4458242,70.6726735 23.7947046,70.0228006 22.2648667,72.6725575 L41.9944593,84.0634431 C41.9944593,84.0634431 36.3904568,75.8079231 37.7602356,73.4353966 C40.2754811,69.0788636 46.5298923,72.1787882 48.1248275,69.4162793 C50.538989,65.234829 43.0222016,59.7770885 33.3471097,51.7910932 L33.3471097,51.7910932 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-new-journal-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.545455,112.818182 L102.545455,124.636364 L102.545455,124.636364 L102.545455,124.636364 C102.545455,125.941761 103.630828,127 104.969697,127 L111.030303,127 C112.369172,127 113.454545,125.941761 113.454545,124.636364 L113.454545,112.818182 L125.575758,112.818182 C126.914626,112.818182 128,111.759982 128,110.454545 L128,104.545455 C128,103.240018 126.914626,102.181818 125.575758,102.181818 L113.454545,102.181818 L113.454545,90.3636364 C113.454545,89.0582 112.369172,88 111.030303,88 L104.969697,88 L104.969697,88 C103.630828,88 102.545455,89.0582 102.545455,90.3636364 L102.545455,102.181818 L90.4242424,102.181818 L90.4242424,102.181818 C89.0853705,102.181818 88,103.240018 88,104.545455 L88,110.454545 L88,110.454545 L88,110.454545 C88,111.759982 89.0853705,112.818182 90.4242424,112.818182 L102.545455,112.818182 Z\"></path>\n        <g transform=\"translate(59.816987, 64.316987) rotate(30.000000) translate(-59.816987, -64.316987) translate(20.316987, 12.816987)\">\n            <g transform=\"translate(0.000000, 0.000000)\">\n                <path d=\"M9.99631148,0 C4.4755011,0 -2.27373675e-13,4.48070044 -2.27373675e-13,9.99759461 L-2.27373675e-13,91.6128884 C-2.27373675e-13,97.1344074 4.46966773,101.610483 9.99631148,101.610483 L68.9318917,101.610483 C74.4527021,101.610483 78.9282032,97.1297826 78.9282032,91.6128884 L78.9282032,9.99759461 C78.9282032,4.47607557 74.4585355,0 68.9318917,0 L9.99631148,0 Z M20.8885263,26 C24.2022348,26 26.8885263,23.3137085 26.8885263,20 C26.8885263,16.6862915 24.2022348,14 20.8885263,14 C17.5748178,14 14.8885263,16.6862915 14.8885263,20 C14.8885263,23.3137085 17.5748178,26 20.8885263,26 Z M57.3033321,25.6783342 C60.6170406,25.6783342 63.3033321,22.9920427 63.3033321,19.6783342 C63.3033321,16.3646258 60.6170406,13.6783342 57.3033321,13.6783342 C53.9896236,13.6783342 51.3033321,16.3646258 51.3033321,19.6783342 C51.3033321,22.9920427 53.9896236,25.6783342 57.3033321,25.6783342 Z\"></path>\n                <text font-family=\"Helvetica\" font-size=\"47.1724138\" font-weight=\"bold\" fill=\"#FFFFFF\">\n                    <tspan x=\"42\" y=\"77.4847912\" text-anchor=\"middle\"><<now \"DD\">></tspan>\n                </text>\n            </g>\n        </g>\n    </g>\n</svg>"
        },
        "$:/core/images/opacity": {
            "title": "$:/core/images/opacity",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-opacity tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M102.361773,65 C101.833691,67.051742 101.183534,69.0544767 100.419508,71 L82.5835324,71 C83.7602504,69.1098924 84.7666304,67.1027366 85.581205,65 L102.361773,65 Z M102.834311,63 C103.256674,61.0388326 103.568427,59.0365486 103.762717,57 L87.6555706,57 C87.3692052,59.0609452 86.9083652,61.0660782 86.2884493,63 L102.834311,63 Z M99.5852583,73 C98.6682925,75.0747721 97.6196148,77.0783056 96.4498253,79 L75.8124196,79 C77.8387053,77.2115633 79.6621163,75.1985844 81.2437158,73 L99.5852583,73 Z M95.1689122,81 C93.7449202,83.1155572 92.1695234,85.1207336 90.458251,87 L60.4614747,87 C65.1836162,85.86248 69.5430327,83.794147 73.3347255,81 L95.1689122,81 Z M87.6555706,47 L103.762717,47 C101.246684,20.6269305 79.0321807,0 52,0 C23.281193,0 0,23.281193 0,52 C0,77.2277755 17.9651296,98.2595701 41.8000051,103 L62.1999949,103 C67.8794003,101.870444 73.2255333,99.8158975 78.074754,97 L39,97 L39,95 L81.2493857,95 C83.8589242,93.2215015 86.2981855,91.2116653 88.5376609,89 L39,89 L39,87 L43.5385253,87 C27.7389671,83.1940333 16,68.967908 16,52 C16,32.117749 32.117749,16 52,16 C70.1856127,16 85.2217929,29.4843233 87.6555706,47 Z M87.8767787,49 L103.914907,49 C103.971379,49.9928025 104,50.9930589 104,52 C104,53.0069411 103.971379,54.0071975 103.914907,55 L87.8767787,55 C87.958386,54.0107999 88,53.0102597 88,52 C88,50.9897403 87.958386,49.9892001 87.8767787,49 Z\"></path>\n        <path d=\"M76,128 C104.718807,128 128,104.718807 128,76 C128,47.281193 104.718807,24 76,24 C47.281193,24 24,47.281193 24,76 C24,104.718807 47.281193,128 76,128 L76,128 Z M76,112 C95.882251,112 112,95.882251 112,76 C112,56.117749 95.882251,40 76,40 C56.117749,40 40,56.117749 40,76 C40,95.882251 56.117749,112 76,112 L76,112 Z\"></path>\n        <path d=\"M37,58 L90,58 L90,62 L37,62 L37,58 L37,58 Z M40,50 L93,50 L93,54 L40,54 L40,50 L40,50 Z M40,42 L93,42 L93,46 L40,46 L40,42 L40,42 Z M32,66 L85,66 L85,70 L32,70 L32,66 L32,66 Z M30,74 L83,74 L83,78 L30,78 L30,74 L30,74 Z M27,82 L80,82 L80,86 L27,86 L27,82 L27,82 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-open-window tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M16,112 L104.993898,112 C108.863261,112 112,115.590712 112,120 C112,124.418278 108.858091,128 104.993898,128 L7.00610161,128 C3.13673853,128 0,124.409288 0,120 C0,119.998364 4.30952878e-07,119.996727 1.29273572e-06,119.995091 C4.89579306e-07,119.993456 0,119.99182 0,119.990183 L0,24.0098166 C0,19.586117 3.59071231,16 8,16 C12.418278,16 16,19.5838751 16,24.0098166 L16,112 Z\"></path>\n        <path d=\"M96,43.1959595 L96,56 C96,60.418278 99.581722,64 104,64 C108.418278,64 112,60.418278 112,56 L112,24 C112,19.5907123 108.415101,16 103.992903,16 L72.0070969,16 C67.5881712,16 64,19.581722 64,24 C64,28.4092877 67.5848994,32 72.0070969,32 L84.5685425,32 L48.2698369,68.2987056 C45.1421332,71.4264093 45.1434327,76.4904296 48.267627,79.614624 C51.3854642,82.7324612 56.4581306,82.7378289 59.5835454,79.6124141 L96,43.1959595 Z M32,7.9992458 C32,3.58138434 35.5881049,0 39.9992458,0 L120.000754,0 C124.418616,0 128,3.5881049 128,7.9992458 L128,88.0007542 C128,92.4186157 124.411895,96 120.000754,96 L39.9992458,96 C35.5813843,96 32,92.4118951 32,88.0007542 L32,7.9992458 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-options-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M110.48779,76.0002544 C109.354214,80.4045063 107.611262,84.5641217 105.354171,88.3838625 L105.354171,88.3838625 L112.07833,95.1080219 C115.20107,98.2307613 115.210098,103.299824 112.089164,106.420759 L106.420504,112.089418 C103.301049,115.208874 98.2346851,115.205502 95.1077675,112.078585 L88.3836082,105.354425 C84.5638673,107.611516 80.4042519,109.354468 76,110.488045 L76,110.488045 L76,119.993281 C76,124.409501 72.4220153,128.000254 68.0083475,128.000254 L59.9916525,128.000254 C55.5800761,128.000254 52,124.41541 52,119.993281 L52,110.488045 C47.5957481,109.354468 43.4361327,107.611516 39.6163918,105.354425 L32.8922325,112.078585 C29.7694931,115.201324 24.7004301,115.210353 21.5794957,112.089418 L15.9108363,106.420759 C12.7913807,103.301303 12.7947522,98.2349395 15.9216697,95.1080219 L22.6458291,88.3838625 C20.3887383,84.5641217 18.6457859,80.4045063 17.5122098,76.0002544 L8.00697327,76.0002544 C3.59075293,76.0002544 2.19088375e-16,72.4222697 4.89347582e-16,68.0086019 L9.80228577e-16,59.9919069 C1.25035972e-15,55.5803305 3.58484404,52.0002544 8.00697327,52.0002544 L17.5122098,52.0002544 C18.6457859,47.5960025 20.3887383,43.4363871 22.6458291,39.6166462 L15.9216697,32.8924868 C12.7989304,29.7697475 12.7899019,24.7006845 15.9108363,21.5797501 L21.5794957,15.9110907 C24.6989513,12.7916351 29.7653149,12.7950065 32.8922325,15.9219241 L39.6163918,22.6460835 C43.4361327,20.3889927 47.5957481,18.6460403 52,17.5124642 L52,8.00722764 C52,3.5910073 55.5779847,0.000254375069 59.9916525,0.000254375069 L68.0083475,0.000254375069 C72.4199239,0.000254375069 76,3.58509841 76,8.00722764 L76,17.5124642 C80.4042519,18.6460403 84.5638673,20.3889927 88.3836082,22.6460835 L95.1077675,15.9219241 C98.2305069,12.7991848 103.29957,12.7901562 106.420504,15.9110907 L112.089164,21.5797501 C115.208619,24.6992057 115.205248,29.7655693 112.07833,32.8924868 L105.354171,39.6166462 L105.354171,39.6166462 C107.611262,43.4363871 109.354214,47.5960025 110.48779,52.0002544 L119.993027,52.0002544 C124.409247,52.0002544 128,55.5782391 128,59.9919069 L128,68.0086019 C128,72.4201783 124.415156,76.0002544 119.993027,76.0002544 L110.48779,76.0002544 L110.48779,76.0002544 Z M64,96.0002544 C81.673112,96.0002544 96,81.6733664 96,64.0002544 C96,46.3271424 81.673112,32.0002544 64,32.0002544 C46.326888,32.0002544 32,46.3271424 32,64.0002544 C32,81.6733664 46.326888,96.0002544 64,96.0002544 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/paint": {
            "title": "$:/core/images/paint",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-paint tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M83.5265806,76.1907935 C90.430962,69.2864121 91.8921169,59.0000433 87.9100453,50.6642209 L125.812763,12.7615036 C128.732035,9.84223095 128.72611,5.10322984 125.812796,2.18991592 C122.893542,-0.729338085 118.161775,-0.730617045 115.241209,2.18994966 L77.3384914,40.092667 C69.002669,36.1105954 58.7163002,37.5717503 51.8119188,44.4761317 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 L83.5265806,76.1907935 Z M80.8836921,78.8336819 L49.1690303,47.1190201 C49.1690303,47.1190201 8.50573364,81.242543 0,80.2820711 C0,80.2820711 3.78222974,85.8744423 6.82737483,88.320684 C20.8514801,82.630792 44.1526049,63.720771 44.1526049,63.720771 L44.8144806,64.3803375 C44.8144806,64.3803375 19.450356,90.2231043 9.18040433,92.0477601 C10.4017154,93.4877138 13.5343883,96.1014812 15.4269991,97.8235871 C20.8439164,96.3356979 50.1595367,69.253789 50.1595367,69.253789 L50.8214124,69.9133555 L18.4136144,100.936036 L23.6993903,106.221812 L56.1060358,75.2002881 L56.7679115,75.8598546 C56.7679115,75.8598546 28.9040131,106.396168 28.0841366,108.291555 C28.0841366,108.291555 34.1159238,115.144621 35.6529617,116.115796 C36.3545333,113.280171 63.5365402,82.6307925 63.5365402,82.6307925 L64.1984159,83.290359 C64.1984159,83.290359 43.6013016,107.04575 39.2343772,120.022559 C42.443736,123.571575 46.7339155,125.159692 50.1595362,126.321151 C47.9699978,114.504469 80.8836921,78.8336819 80.8836921,78.8336819 L80.8836921,78.8336819 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-palette tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.2470434,39.1821571 C75.0645698,38.2680897 69.6261555,37.7814854 64.0193999,37.7814854 C28.6624616,37.7814854 0,57.1324214 0,81.0030106 C0,90.644534 4.67604329,99.5487133 12.5805659,106.738252 C23.5031767,91.1899067 26.3405471,72.3946229 36.8885698,63.5622337 C52.0716764,50.8486559 63.4268694,55.7343343 63.4268694,55.7343343 L80.2470434,39.1821571 Z M106.781666,48.8370714 C119.830962,56.749628 128.0388,68.229191 128.0388,81.0030106 C128.0388,90.3534932 128.557501,98.4142085 116.165191,106.082518 C105.367708,112.763955 112.341384,99.546808 104.321443,95.1851533 C96.3015017,90.8234987 84.3749007,96.492742 86.1084305,103.091059 C89.3087234,115.272303 105.529892,114.54645 92.4224435,119.748569 C79.3149955,124.950687 74.2201582,124.224536 64.0193999,124.224536 C56.1979176,124.224536 48.7040365,123.277578 41.7755684,121.544216 C51.620343,117.347916 69.6563669,109.006202 75.129737,102.088562 C82.7876655,92.4099199 87.3713218,80.0000002 83.3235694,72.4837191 C83.1303943,72.1250117 94.5392656,60.81569 106.781666,48.8370714 Z M1.13430476,123.866563 C0.914084026,123.867944 0.693884185,123.868637 0.473712455,123.868637 C33.9526848,108.928928 22.6351223,59.642592 59.2924543,59.6425917 C59.6085574,61.0606542 59.9358353,62.5865065 60.3541977,64.1372318 C34.4465025,59.9707319 36.7873124,112.168427 1.13429588,123.866563 L1.13430476,123.866563 Z M1.84669213,123.859694 C40.7185279,123.354338 79.9985412,101.513051 79.9985401,79.0466836 C70.7284906,79.0466835 65.9257264,75.5670082 63.1833375,71.1051511 C46.585768,64.1019718 32.81846,116.819636 1.84665952,123.859695 L1.84669213,123.859694 Z M67.1980193,59.8524981 C62.748213,63.9666823 72.0838429,76.2846822 78.5155805,71.1700593 C89.8331416,59.8524993 112.468264,37.2173758 123.785825,25.8998146 C135.103386,14.5822535 123.785825,3.26469247 112.468264,14.5822535 C101.150703,25.8998144 78.9500931,48.9868127 67.1980193,59.8524981 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permalink-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M80.4834582,48 L73.0956761,80 L73.0956761,80 L47.5165418,80 L54.9043239,48 L80.4834582,48 Z M84.1773493,32 L89.8007299,7.64246248 C90.7941633,3.33942958 95.0918297,0.64641956 99.3968675,1.64031585 C103.693145,2.63218977 106.385414,6.93288901 105.390651,11.2416793 L100.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L96.9043239,48 L89.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L85.8226507,96 L80.1992701,120.357538 C79.2058367,124.66057 74.9081703,127.35358 70.6031325,126.359684 C66.3068546,125.36781 63.6145865,121.067111 64.6093491,116.758321 L69.401785,96 L43.8226507,96 L38.1992701,120.357538 C37.2058367,124.66057 32.9081703,127.35358 28.6031325,126.359684 C24.3068546,125.36781 21.6145865,121.067111 22.6093491,116.758321 L27.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L31.0956761,80 L38.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L42.1773493,32 L47.8007299,7.64246248 C48.7941633,3.33942958 53.0918297,0.64641956 57.3968675,1.64031585 C61.6931454,2.63218977 64.3854135,6.93288901 63.3906509,11.2416793 L58.598215,32 L84.1773493,32 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-permaview-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M81.4834582,48 L79.6365127,56 L79.6365127,56 L74.0573784,56 L75.9043239,48 L81.4834582,48 Z M85.1773493,32 L90.8007299,7.64246248 C91.7941633,3.33942958 96.0918297,0.64641956 100.396867,1.64031585 C104.693145,2.63218977 107.385414,6.93288901 106.390651,11.2416793 L101.598215,32 L104.000754,32 C108.411895,32 112,35.581722 112,40 C112,44.4092877 108.418616,48 104.000754,48 L97.9043239,48 L96.0573784,56 L104.000754,56 C108.411895,56 112,59.581722 112,64 C112,68.4092877 108.418616,72 104.000754,72 L92.3634873,72 L90.5165418,80 L104.000754,80 C108.411895,80 112,83.581722 112,88 C112,92.4092877 108.418616,96 104.000754,96 L86.8226507,96 L81.1992701,120.357538 C80.2058367,124.66057 75.9081703,127.35358 71.6031325,126.359684 C67.3068546,125.36781 64.6145865,121.067111 65.6093491,116.758321 L70.401785,96 L64.8226507,96 L59.1992701,120.357538 C58.2058367,124.66057 53.9081703,127.35358 49.6031325,126.359684 C45.3068546,125.36781 42.6145865,121.067111 43.6093491,116.758321 L48.401785,96 L42.8226507,96 L37.1992701,120.357538 C36.2058367,124.66057 31.9081703,127.35358 27.6031325,126.359684 C23.3068546,125.36781 20.6145865,121.067111 21.6093491,116.758321 L26.401785,96 L23.9992458,96 C19.5881049,96 16,92.418278 16,88 C16,83.5907123 19.5813843,80 23.9992458,80 L30.0956761,80 L31.9426216,72 L23.9992458,72 C19.5881049,72 16,68.418278 16,64 C16,59.5907123 19.5813843,56 23.9992458,56 L35.6365127,56 L37.4834582,48 L23.9992458,48 C19.5881049,48 16,44.418278 16,40 C16,35.5907123 19.5813843,32 23.9992458,32 L41.1773493,32 L46.8007299,7.64246248 C47.7941633,3.33942958 52.0918297,0.64641956 56.3968675,1.64031585 C60.6931454,2.63218977 63.3854135,6.93288901 62.3906509,11.2416793 L57.598215,32 L63.1773493,32 L68.8007299,7.64246248 C69.7941633,3.33942958 74.0918297,0.64641956 78.3968675,1.64031585 C82.6931454,2.63218977 85.3854135,6.93288901 84.3906509,11.2416793 L79.598215,32 L85.1773493,32 Z M53.9043239,48 L52.0573784,56 L57.6365127,56 L59.4834582,48 L53.9043239,48 Z M75.9426216,72 L74.0956761,80 L74.0956761,80 L68.5165418,80 L70.3634873,72 L75.9426216,72 L75.9426216,72 Z M48.3634873,72 L46.5165418,80 L52.0956761,80 L53.9426216,72 L48.3634873,72 L48.3634873,72 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/picture": {
            "title": "$:/core/images/picture",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-picture tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M112,68.2332211 L112,20.0027785 C112,17.7898769 110.207895,16 107.997221,16 L20.0027785,16 C17.7898769,16 16,17.792105 16,20.0027785 L16,58.312373 L25.2413115,43.7197989 C28.041793,39.297674 34.2643908,38.7118128 37.8410347,42.5335275 L56.0882845,63.1470817 L69.7748997,56.7400579 C72.766567,55.3552503 76.3013751,55.9473836 78.678437,58.2315339 C78.8106437,58.3585731 79.0742301,58.609836 79.4527088,58.9673596 C80.0910923,59.570398 80.8117772,60.2441563 81.598127,60.9705595 C83.8422198,63.043576 86.1541548,65.1151944 88.3956721,67.0372264 C89.1168795,67.6556396 89.8200801,68.2492007 90.5021258,68.8146755 C92.6097224,70.5620551 94.4693308,72.0029474 95.9836366,73.0515697 C96.7316295,73.5695379 97.3674038,73.9719282 98.0281481,74.3824999 C98.4724987,74.4989557 99.0742374,74.5263881 99.8365134,74.4317984 C101.709944,74.1993272 104.074502,73.2878514 106.559886,71.8846196 C107.705822,71.2376318 108.790494,70.5370325 109.764561,69.8410487 C110.323259,69.4418522 110.694168,69.1550757 110.834827,69.0391868 C111.210545,68.7296319 111.600264,68.4615815 112,68.2332211 L112,68.2332211 Z M0,8.00697327 C0,3.58484404 3.59075293,0 8.00697327,0 L119.993027,0 C124.415156,0 128,3.59075293 128,8.00697327 L128,119.993027 C128,124.415156 124.409247,128 119.993027,128 L8.00697327,128 C3.58484404,128 0,124.409247 0,119.993027 L0,8.00697327 L0,8.00697327 Z M95,42 C99.418278,42 103,38.418278 103,34 C103,29.581722 99.418278,26 95,26 C90.581722,26 87,29.581722 87,34 C87,38.418278 90.581722,42 95,42 L95,42 Z M32,76 C47.8587691,80.8294182 52.0345556,83.2438712 52.0345556,88 C52.0345556,92.7561288 32,95.4712486 32,102.347107 C32,109.222965 33.2849191,107.337637 33.2849191,112 L67.999999,112 C67.999999,112 54.3147136,105.375255 54.3147136,101.200691 C54.3147136,93.535181 64.9302432,92.860755 64.9302432,88 C64.9302432,80.6425555 50.8523779,79.167282 32,76 L32,76 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-language": {
            "title": "$:/core/images/plugin-generic-language",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M61.2072232,68.1369825 C56.8829239,70.9319564 54.2082892,74.793177 54.2082892,79.0581634 C54.2082892,86.9638335 63.3980995,93.4821994 75.2498076,94.3940006 C77.412197,98.2964184 83.8475284,101.178858 91.5684735,101.403106 C86.4420125,100.27851 82.4506393,97.6624107 80.9477167,94.3948272 C92.8046245,93.4861461 102,86.9662269 102,79.0581634 C102,70.5281905 91.3014611,63.6132813 78.1041446,63.6132813 C71.5054863,63.6132813 65.5315225,65.3420086 61.2072232,68.1369825 Z M74.001066,53.9793443 C69.6767667,56.7743182 63.7028029,58.5030456 57.1041446,58.5030456 C54.4851745,58.5030456 51.9646095,58.2307276 49.6065315,57.7275105 C46.2945155,59.9778212 41.2235699,61.4171743 35.5395922,61.4171743 C35.4545771,61.4171743 35.3696991,61.4168523 35.2849622,61.4162104 C39.404008,60.5235193 42.7961717,58.6691298 44.7630507,56.286533 C37.8379411,53.5817651 33.2082892,48.669413 33.2082892,43.0581634 C33.2082892,34.5281905 43.9068281,27.6132812 57.1041446,27.6132812 C70.3014611,27.6132812 81,34.5281905 81,43.0581634 C81,47.3231498 78.3253653,51.1843704 74.001066,53.9793443 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-plugin": {
            "title": "$:/core/images/plugin-generic-plugin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M40.3972881,76.4456988 L40.3972881,95.3404069 L54.5170166,95.3404069 L54.5170166,95.3404069 C54.5165526,95.3385183 54.516089,95.3366295 54.515626,95.3347404 C54.6093153,95.3385061 54.7034848,95.3404069 54.7980982,95.3404069 C58.6157051,95.3404069 61.710487,92.245625 61.710487,88.4280181 C61.710487,86.6197822 61.01617,84.9737128 59.8795929,83.7418666 L59.8795929,83.7418666 C59.8949905,83.7341665 59.9104102,83.7265043 59.925852,83.7188798 C58.8840576,82.5086663 58.2542926,80.9336277 58.2542926,79.2114996 C58.2542926,75.3938927 61.3490745,72.2991108 65.1666814,72.2991108 C68.9842884,72.2991108 72.0790703,75.3938927 72.0790703,79.2114996 C72.0790703,81.1954221 71.2432806,82.9841354 69.9045961,84.2447446 L69.9045961,84.2447446 C69.9333407,84.2629251 69.9619885,84.281245 69.9905383,84.2997032 L69.9905383,84.2997032 C69.1314315,85.4516923 68.6228758,86.8804654 68.6228758,88.4280181 C68.6228758,91.8584969 71.1218232,94.7053153 74.3986526,95.2474079 C74.3913315,95.2784624 74.3838688,95.3094624 74.3762652,95.3404069 L95.6963988,95.3404069 L95.6963988,75.5678578 L95.6963988,75.5678578 C95.6466539,75.5808558 95.5967614,75.5934886 95.5467242,75.6057531 C95.5504899,75.5120637 95.5523907,75.4178943 95.5523907,75.3232809 C95.5523907,71.505674 92.4576088,68.4108921 88.6400019,68.4108921 C86.831766,68.4108921 85.1856966,69.105209 83.9538504,70.2417862 L83.9538504,70.2417862 C83.9461503,70.2263886 83.938488,70.2109688 83.9308636,70.1955271 C82.7206501,71.2373215 81.1456115,71.8670865 79.4234834,71.8670865 C75.6058765,71.8670865 72.5110946,68.7723046 72.5110946,64.9546976 C72.5110946,61.1370907 75.6058765,58.0423088 79.4234834,58.0423088 C81.4074059,58.0423088 83.1961192,58.8780985 84.4567284,60.2167829 L84.4567284,60.2167829 C84.4749089,60.1880383 84.4932288,60.1593906 84.511687,60.1308407 L84.511687,60.1308407 C85.6636761,60.9899475 87.0924492,61.4985032 88.6400019,61.4985032 C92.0704807,61.4985032 94.9172991,58.9995558 95.4593917,55.7227265 C95.538755,55.7414363 95.6177614,55.761071 95.6963988,55.7816184 L95.6963988,40.0412962 L74.3762652,40.0412962 L74.3762652,40.0412962 C74.3838688,40.0103516 74.3913315,39.9793517 74.3986526,39.9482971 L74.3986526,39.9482971 C71.1218232,39.4062046 68.6228758,36.5593862 68.6228758,33.1289073 C68.6228758,31.5813547 69.1314315,30.1525815 69.9905383,29.0005925 C69.9619885,28.9821342 69.9333407,28.9638143 69.9045961,28.9456339 C71.2432806,27.6850247 72.0790703,25.8963113 72.0790703,23.9123888 C72.0790703,20.0947819 68.9842884,17 65.1666814,17 C61.3490745,17 58.2542926,20.0947819 58.2542926,23.9123888 C58.2542926,25.6345169 58.8840576,27.2095556 59.925852,28.419769 L59.925852,28.419769 C59.9104102,28.4273935 59.8949905,28.4350558 59.8795929,28.4427558 C61.01617,29.674602 61.710487,31.3206715 61.710487,33.1289073 C61.710487,36.9465143 58.6157051,40.0412962 54.7980982,40.0412962 C54.7034848,40.0412962 54.6093153,40.0393953 54.515626,40.0356296 L54.515626,40.0356296 C54.516089,40.0375187 54.5165526,40.0394075 54.5170166,40.0412962 L40.3972881,40.0412962 L40.3972881,52.887664 L40.3972881,52.887664 C40.4916889,53.3430132 40.5412962,53.8147625 40.5412962,54.2980982 C40.5412962,58.1157051 37.4465143,61.210487 33.6289073,61.210487 C32.0813547,61.210487 30.6525815,60.7019313 29.5005925,59.8428245 C29.4821342,59.8713744 29.4638143,59.9000221 29.4456339,59.9287667 C28.1850247,58.5900823 26.3963113,57.7542926 24.4123888,57.7542926 C20.5947819,57.7542926 17.5,60.8490745 17.5,64.6666814 C17.5,68.4842884 20.5947819,71.5790703 24.4123888,71.5790703 C26.134517,71.5790703 27.7095556,70.9493053 28.919769,69.9075109 L28.919769,69.9075109 C28.9273935,69.9229526 28.9350558,69.9383724 28.9427558,69.95377 C30.174602,68.8171928 31.8206715,68.1228758 33.6289073,68.1228758 C37.4465143,68.1228758 40.5412962,71.2176578 40.5412962,75.0352647 C40.5412962,75.5186004 40.4916889,75.9903496 40.3972881,76.4456988 Z M64,0 L118.5596,32 L118.5596,96 L64,128 L9.44039956,96 L9.44039956,32 L64,0 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/plugin-generic-theme": {
            "title": "$:/core/images/plugin-generic-theme",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M29.4078519,91.4716406 L51.4693474,69.4101451 L51.4646675,69.4054652 C50.5969502,68.5377479 50.5929779,67.1348725 51.4693474,66.2585029 C52.3396494,65.3882009 53.7499654,65.3874786 54.6163097,66.2538229 L64.0805963,75.7181095 C64.9483136,76.5858268 64.9522859,77.9887022 64.0759163,78.8650718 C63.2056143,79.7353737 61.7952984,79.736096 60.9289541,78.8697517 L60.9242741,78.8650718 L60.9242741,78.8650718 L38.8627786,100.926567 C36.2518727,103.537473 32.0187578,103.537473 29.4078519,100.926567 C26.796946,98.3156614 26.796946,94.0825465 29.4078519,91.4716406 Z M60.8017407,66.3810363 C58.3659178,63.6765806 56.3370667,61.2899536 54.9851735,59.5123615 C48.1295381,50.4979488 44.671561,55.2444054 40.7586738,59.5123614 C36.8457866,63.7803174 41.789473,67.2384487 38.0759896,70.2532832 C34.3625062,73.2681177 34.5917646,74.3131575 28.3243876,68.7977024 C22.0570105,63.2822473 21.6235306,61.7636888 24.5005999,58.6166112 C27.3776691,55.4695337 29.7823103,60.4247912 35.6595047,54.8320442 C41.5366991,49.2392972 36.5996215,44.2825646 36.5996215,44.2825646 C36.5996215,44.2825646 48.8365511,19.267683 65.1880231,21.1152173 C81.5394952,22.9627517 59.0022276,18.7228947 53.3962199,38.3410355 C50.9960082,46.7405407 53.8429162,44.7613399 58.3941742,48.3090467 C59.7875202,49.3951602 64.4244828,52.7100463 70.1884353,56.9943417 L90.8648751,36.3179019 L92.4795866,31.5515482 L100.319802,26.8629752 L103.471444,30.0146174 L98.782871,37.8548326 L94.0165173,39.4695441 L73.7934912,59.6925702 C86.4558549,69.2403631 102.104532,81.8392557 102.104532,86.4016913 C102.104533,93.6189834 99.0337832,97.9277545 92.5695848,95.5655717 C87.8765989,93.8506351 73.8015497,80.3744087 63.8173444,69.668717 L60.9242741,72.5617873 L57.7726319,69.4101451 L60.8017407,66.3810363 L60.8017407,66.3810363 Z M63.9533761,1.42108547e-13 L118.512977,32 L118.512977,96 L63.9533761,128 L9.39377563,96 L9.39377563,32 L63.9533761,1.42108547e-13 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/preview-closed": {
            "title": "$:/core/images/preview-closed",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-preview-closed tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M0.0881363238,64 C-0.210292223,65.8846266 0.249135869,67.8634737 1.4664206,69.4579969 C16.2465319,88.8184886 39.1692554,100.414336 64,100.414336 C88.8307446,100.414336 111.753468,88.8184886 126.533579,69.4579969 C127.750864,67.8634737 128.210292,65.8846266 127.911864,64 C110.582357,78.4158332 88.3036732,87.0858436 64,87.0858436 C39.6963268,87.0858436 17.4176431,78.4158332 0.0881363238,64 Z\"></path>\n        <rect x=\"62\" y=\"96\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(80.000000, 101.000000) rotate(-5.000000) translate(-80.000000, -101.000000) \" x=\"78\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(48.000000, 101.000000) rotate(-355.000000) translate(-48.000000, -101.000000) \" x=\"46\" y=\"93\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(32.000000, 96.000000) rotate(-350.000000) translate(-32.000000, -96.000000) \" x=\"30\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(96.000000, 96.000000) rotate(-10.000000) translate(-96.000000, -96.000000) \" x=\"94\" y=\"88\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(112.000000, 88.000000) rotate(-20.000000) translate(-112.000000, -88.000000) \" x=\"110\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n        <rect transform=\"translate(16.000000, 88.000000) rotate(-340.000000) translate(-16.000000, -88.000000) \" x=\"14\" y=\"80\" width=\"4\" height=\"16\" rx=\"4\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/preview-open": {
            "title": "$:/core/images/preview-open",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-preview-open tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64.1099282,99.5876785 C39.2791836,99.5876785 16.3564602,87.9918313 1.57634884,68.6313396 C-0.378878622,66.070184 -0.378878622,62.5174945 1.57634884,59.9563389 C16.3564602,40.5958472 39.2791836,29 64.1099282,29 C88.9406729,29 111.863396,40.5958472 126.643508,59.9563389 C128.598735,62.5174945 128.598735,66.070184 126.643508,68.6313396 C111.863396,87.9918313 88.9406729,99.5876785 64.1099282,99.5876785 Z M110.213805,67.5808331 C111.654168,66.0569335 111.654168,63.9430665 110.213805,62.4191669 C99.3257042,50.8995835 82.4391647,44 64.1470385,44 C45.8549124,44 28.9683729,50.8995835 18.0802717,62.4191669 C16.6399094,63.9430665 16.6399094,66.0569335 18.0802717,67.5808331 C28.9683729,79.1004165 45.8549124,86 64.1470385,86 C82.4391647,86 99.3257042,79.1004165 110.213805,67.5808331 Z\"></path>\n        <path d=\"M63.5,88 C76.4786916,88 87,77.4786916 87,64.5 C87,51.5213084 76.4786916,41 63.5,41 C50.5213084,41 40,51.5213084 40,64.5 C40,77.4786916 50.5213084,88 63.5,88 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/quote": {
            "title": "$:/core/images/quote",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-quote tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M51.2188077,117.712501 L51.2188077,62.1993386 L27.4274524,62.1993386 C27.4274524,53.3075754 29.1096526,45.797753 32.4741035,39.669646 C35.8385544,33.541539 42.0867267,28.9154883 51.2188077,25.7913554 L51.2188077,2 C43.7689521,2.96127169 36.8599155,5.18417913 30.4914905,8.668789 C24.1230656,12.1533989 18.6559149,16.5391352 14.0898743,21.8261295 C9.52383382,27.1131238 5.97919764,33.2411389 3.45585945,40.2103586 C0.932521268,47.1795784 -0.208971741,54.6293222 0.0313461819,62.5598136 L0.0313461819,117.712501 L51.2188077,117.712501 Z M128,117.712501 L128,62.1993386 L104.208645,62.1993386 C104.208645,53.3075754 105.890845,45.797753 109.255296,39.669646 C112.619747,33.541539 118.867919,28.9154883 128,25.7913554 L128,2 C120.550144,2.96127169 113.641108,5.18417913 107.272683,8.668789 C100.904258,12.1533989 95.4371072,16.5391352 90.8710666,21.8261295 C86.3050261,27.1131238 82.7603899,33.2411389 80.2370517,40.2103586 C77.7137136,47.1795784 76.5722206,54.6293222 76.8125385,62.5598136 L76.8125385,117.712501 L128,117.712501 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-refresh-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M106.369002,39.4325143 C116.529932,60.3119371 112.939592,86.1974934 95.5979797,103.539105 C73.7286194,125.408466 38.2713806,125.408466 16.4020203,103.539105 C-5.46734008,81.6697449 -5.46734008,46.2125061 16.4020203,24.3431458 C19.5262146,21.2189514 24.5915344,21.2189514 27.7157288,24.3431458 C30.8399231,27.4673401 30.8399231,32.5326599 27.7157288,35.6568542 C12.0947571,51.2778259 12.0947571,76.6044251 27.7157288,92.2253967 C43.3367004,107.846368 68.6632996,107.846368 84.2842712,92.2253967 C97.71993,78.7897379 99.5995262,58.1740623 89.9230597,42.729491 L83.4844861,54.9932839 C81.4307001,58.9052072 76.5945372,60.4115251 72.682614,58.3577391 C68.7706907,56.3039532 67.2643728,51.4677903 69.3181587,47.555867 L84.4354914,18.7613158 C86.4966389,14.8353707 91.3577499,13.3347805 95.273202,15.415792 L124.145886,30.7612457 C128.047354,32.8348248 129.52915,37.6785572 127.455571,41.5800249 C125.381992,45.4814927 120.53826,46.9632892 116.636792,44.8897102 L106.369002,39.4325143 Z M98.1470904,27.0648707 C97.9798954,26.8741582 97.811187,26.6843098 97.6409651,26.4953413 L98.6018187,26.1987327 L98.1470904,27.0648707 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-right-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M80.3563798,109.353315 C78.9238993,110.786918 76.9450203,111.675144 74.7592239,111.675144 L-4.40893546,111.675144 C-8.77412698,111.675144 -12.3248558,108.130732 -12.3248558,103.758478 C-12.3248558,99.3951199 -8.78077754,95.8418109 -4.40893546,95.8418109 L66.8418109,95.8418109 L66.8418109,24.5910645 C66.8418109,20.225873 70.3862233,16.6751442 74.7584775,16.6751442 C79.1218352,16.6751442 82.6751442,20.2192225 82.6751442,24.5910645 L82.6751442,103.759224 C82.6751442,105.941695 81.7891419,107.920575 80.3566508,109.353886 Z\" transform=\"translate(35.175144, 64.175144) rotate(-45.000000) translate(-35.175144, -64.175144) \"></path>\n</svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M120.78304,34.329058 C125.424287,43.1924006 128.049406,53.2778608 128.049406,63.9764502 C128.049406,99.3226742 99.3956295,127.97645 64.0494055,127.97645 C28.7031816,127.97645 0.0494055385,99.3226742 0.0494055385,63.9764502 C0.0494055385,28.6302262 28.7031816,-0.0235498012 64.0494055,-0.0235498012 C82.8568763,-0.0235498012 99.769563,8.08898558 111.479045,21.0056358 L114.159581,18.3250998 C117.289194,15.1954866 122.356036,15.1939641 125.480231,18.3181584 C128.598068,21.4359957 128.601317,26.5107804 125.473289,29.6388083 L120.78304,34.329058 Z M108.72451,46.3875877 C110.870571,51.8341374 112.049406,57.767628 112.049406,63.9764502 C112.049406,90.4861182 90.5590735,111.97645 64.0494055,111.97645 C37.5397375,111.97645 16.0494055,90.4861182 16.0494055,63.9764502 C16.0494055,37.4667822 37.5397375,15.9764502 64.0494055,15.9764502 C78.438886,15.9764502 91.3495036,22.308215 100.147097,32.3375836 L58.9411255,73.5435552 L41.975581,56.5780107 C38.8486152,53.4510448 33.7746915,53.4551552 30.6568542,56.5729924 C27.5326599,59.6971868 27.5372202,64.7670668 30.6618725,67.8917192 L53.279253,90.5090997 C54.8435723,92.073419 56.8951519,92.8541315 58.9380216,92.8558261 C60.987971,92.8559239 63.0389578,92.0731398 64.6049211,90.5071765 L108.72451,46.3875877 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/size": {
            "title": "$:/core/images/size",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-size tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <path d=\"M92.3431458,26 L83.1715729,35.1715729 C81.6094757,36.73367 81.6094757,39.26633 83.1715729,40.8284271 C84.73367,42.3905243 87.26633,42.3905243 88.8284271,40.8284271 L104.828427,24.8284271 C106.390524,23.26633 106.390524,20.73367 104.828427,19.1715729 L88.8284271,3.17157288 C87.26633,1.60947571 84.73367,1.60947571 83.1715729,3.17157288 C81.6094757,4.73367004 81.6094757,7.26632996 83.1715729,8.82842712 L92.3431457,18 L22,18 C19.790861,18 18,19.790861 18,22 L18,92.3431458 L8.82842712,83.1715729 C7.26632996,81.6094757 4.73367004,81.6094757 3.17157288,83.1715729 C1.60947571,84.73367 1.60947571,87.26633 3.17157288,88.8284271 L19.1715729,104.828427 C20.73367,106.390524 23.26633,106.390524 24.8284271,104.828427 L40.8284271,88.8284271 C42.3905243,87.26633 42.3905243,84.73367 40.8284271,83.1715729 C39.26633,81.6094757 36.73367,81.6094757 35.1715729,83.1715729 L26,92.3431458 L26,22 L22,26 L92.3431458,26 L92.3431458,26 Z M112,52 L112,116 L116,112 L52,112 C49.790861,112 48,113.790861 48,116 C48,118.209139 49.790861,120 52,120 L116,120 C118.209139,120 120,118.209139 120,116 L120,52 C120,49.790861 118.209139,48 116,48 C113.790861,48 112,49.790861 112,52 L112,52 Z\"></path>\n</svg>"
        },
        "$:/core/images/spiral": {
            "title": "$:/core/images/spiral",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-spiral tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074.14-2.64-1.89-4.89-4.52-5.03-2.64-.14-4.89 1.88-5.03 4.52-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01-.02-.015-.054-.045-.094-.088-.06-.064-.12-.145-.17-.244-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/stamp": {
            "title": "$:/core/images/stamp",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-stamp tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M49.7334301,64 L16.0098166,64 C11.5838751,64 8,67.5829053 8,72.002643 L8,74.4986785 L8,97 L120,97 L120,74.4986785 L120,72.002643 C120,67.5737547 116.413883,64 111.990183,64 L78.2665699,64 C76.502049,60.7519149 75.5,57.0311962 75.5,53.0769231 C75.5,46.6017951 78.1869052,40.7529228 82.5087769,36.5800577 C85.3313113,32.7688808 87,28.0549983 87,22.952183 C87,10.2760423 76.7025492,0 64,0 C51.2974508,0 41,10.2760423 41,22.952183 C41,28.0549983 42.6686887,32.7688808 45.4912231,36.5800577 C49.8130948,40.7529228 52.5,46.6017951 52.5,53.0769231 C52.5,57.0311962 51.497951,60.7519149 49.7334301,64 Z M8,104 L120,104 L120,112 L8,112 L8,104 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-star-filled tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"nonzero\">\n        <path d=\"M61.8361286,96.8228569 L99.1627704,124.110219 C101.883827,126.099427 105.541968,123.420868 104.505636,120.198072 L90.2895569,75.9887263 L89.0292911,79.8977279 L126.314504,52.5528988 C129.032541,50.5595011 127.635256,46.2255025 124.273711,46.2229134 L78.1610486,46.1873965 L81.4604673,48.6032923 L67.1773543,4.41589688 C66.1361365,1.19470104 61.6144265,1.19470104 60.5732087,4.41589688 L46.2900957,48.6032923 L49.5895144,46.1873965 L3.47685231,46.2229134 C0.115307373,46.2255025 -1.28197785,50.5595011 1.43605908,52.5528988 L38.7212719,79.8977279 L37.4610061,75.9887263 L23.2449266,120.198072 C22.2085954,123.420868 25.8667356,126.099427 28.5877926,124.110219 L65.9144344,96.8228569 L61.8361286,96.8228569 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-classic tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-pop tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.5776607 16,23.9924054 L16,40.0075946 C16,44.4216782 19.5881049,48 23.9992458,48 L104.000754,48 C108.418616,48 112,44.4223393 112,40.0075946 L112,23.9924054 C112,19.5783218 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z M16.0098166,56 C11.586117,56 8,59.5776607 8,63.9924054 L8,80.0075946 C8,84.4216782 11.5838751,88 16.0098166,88 L111.990183,88 C116.413883,88 120,84.4223393 120,80.0075946 L120,63.9924054 C120,59.5783218 116.416125,56 111.990183,56 L16.0098166,56 L16.0098166,56 Z M23.9992458,96 C19.5813843,96 16,99.5907123 16,104 C16,108.418278 19.5881049,112 23.9992458,112 L104.000754,112 C108.418616,112 112,108.409288 112,104 C112,99.581722 108.411895,96 104.000754,96 L23.9992458,96 L23.9992458,96 Z M23.9992458,64 C19.5813843,64 16,67.5907123 16,72 C16,76.418278 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.4092877 112,72 C112,67.581722 108.411895,64 104.000754,64 L23.9992458,64 L23.9992458,64 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-storyview-zoomin tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M8.00697327,0 C3.58484404,0 0,3.59075293 0,8.00697327 L0,119.993027 C0,124.415156 3.59075293,128 8.00697327,128 L119.993027,128 C124.415156,128 128,124.409247 128,119.993027 L128,8.00697327 C128,3.58484404 124.409247,0 119.993027,0 L8.00697327,0 L8.00697327,0 Z M23.9992458,16 C19.5813843,16 16,19.578055 16,24.0085154 L16,71.9914846 C16,76.4144655 19.5881049,80 23.9992458,80 L104.000754,80 C108.418616,80 112,76.421945 112,71.9914846 L112,24.0085154 C112,19.5855345 108.411895,16 104.000754,16 L23.9992458,16 L23.9992458,16 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/strikethrough": {
            "title": "$:/core/images/strikethrough",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-strikethrough tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M92.793842,38.7255689 L108.215529,38.7255689 C107.987058,31.985687 106.70193,26.1883331 104.360107,21.3333333 C102.018284,16.4783336 98.8197436,12.4516001 94.7643909,9.25301205 C90.7090382,6.05442399 85.9969032,3.71263572 80.6278447,2.22757697 C75.2587862,0.742518233 69.4328739,0 63.1499331,0 C57.552404,0 52.0977508,0.713959839 46.7858099,2.14190094 C41.473869,3.56984203 36.7331757,5.74027995 32.5635877,8.65327979 C28.3939997,11.5662796 25.0526676,15.2788708 22.5394913,19.7911647 C20.026315,24.3034585 18.7697456,29.6438781 18.7697456,35.8125837 C18.7697456,41.4101128 19.883523,46.0651309 22.1111111,49.7777778 C24.3386992,53.4904246 27.3087722,56.5176144 31.021419,58.8594378 C34.7340659,61.2012612 38.9321497,63.0861151 43.6157965,64.5140562 C48.2994433,65.9419973 53.068695,67.1985666 57.9236948,68.2838019 C62.7786945,69.3690371 67.5479462,70.4256977 72.231593,71.4538153 C76.9152398,72.4819329 81.1133237,73.8241773 84.8259705,75.480589 C88.5386174,77.1370007 91.5086903,79.2788802 93.7362784,81.9062918 C95.9638666,84.5337035 97.0776439,87.9607107 97.0776439,92.1874163 C97.0776439,96.6425926 96.1637753,100.298067 94.3360107,103.153949 C92.5082461,106.009831 90.109341,108.265944 87.1392236,109.922356 C84.1691061,111.578768 80.827774,112.749662 77.1151272,113.435074 C73.4024803,114.120485 69.7184476,114.463186 66.0629183,114.463186 C61.4935068,114.463186 57.0383974,113.892018 52.6974565,112.749665 C48.3565156,111.607312 44.5582492,109.836692 41.3025435,107.437751 C38.0468378,105.03881 35.4194656,101.983062 33.4203481,98.270415 C31.4212305,94.5577681 30.4216867,90.1312171 30.4216867,84.9906292 L15,84.9906292 C15,92.4159229 16.3422445,98.8415614 19.0267738,104.267738 C21.711303,109.693914 25.3667774,114.149023 29.9933066,117.633199 C34.6198357,121.117376 39.9888137,123.71619 46.1004016,125.429719 C52.2119895,127.143248 58.6947448,128 65.5488621,128 C71.1463912,128 76.7723948,127.343157 82.4270415,126.029451 C88.0816882,124.715745 93.1936407,122.602424 97.7630522,119.689424 C102.332464,116.776425 106.073613,113.006717 108.986613,108.380187 C111.899613,103.753658 113.356091,98.1847715 113.356091,91.6733601 C113.356091,85.6188899 112.242314,80.5926126 110.014726,76.5943775 C107.787137,72.5961424 104.817065,69.2833688 101.104418,66.6559572 C97.3917708,64.0285455 93.193687,61.9437828 88.5100402,60.4016064 C83.8263934,58.85943 79.0571416,57.5171855 74.2021419,56.3748327 C69.3471422,55.2324798 64.5778904,54.1758192 59.8942436,53.2048193 C55.2105968,52.2338193 51.012513,51.0058084 47.2998661,49.5207497 C43.5872193,48.0356909 40.6171463,46.1222786 38.3895582,43.7804552 C36.1619701,41.4386318 35.0481928,38.3828836 35.0481928,34.6131191 C35.0481928,30.6148841 35.8192694,27.273552 37.3614458,24.5890228 C38.9036222,21.9044935 40.9598265,19.762614 43.5301205,18.1633199 C46.1004145,16.5640259 49.041929,15.4216902 52.3547523,14.7362784 C55.6675757,14.0508667 59.0374661,13.708166 62.4645248,13.708166 C70.9179361,13.708166 77.8576257,15.6786952 83.2838019,19.6198126 C88.709978,23.56093 91.8799597,29.9294518 92.793842,38.7255689 L92.793842,38.7255689 Z\"></path>\n        <rect x=\"5\" y=\"54\" width=\"118\" height=\"16\"></rect>\n    </g>\n</svg>"
        },
        "$:/core/images/subscript": {
            "title": "$:/core/images/subscript",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-subscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,128.411516 L85.3276227,128.411516 C85.3870139,123.24448 86.6342108,118.730815 89.0692508,114.870386 C91.5042907,111.009956 94.8301491,107.654403 99.0469256,104.803624 C101.066227,103.318844 103.174584,101.878629 105.372059,100.482935 C107.569534,99.0872413 109.588805,97.5876355 111.429933,95.9840726 C113.271061,94.3805097 114.785514,92.6433426 115.973338,90.7725192 C117.161163,88.9016958 117.784761,86.7487964 117.844152,84.3137564 C117.844152,83.1853233 117.710524,81.9826691 117.443264,80.7057579 C117.176003,79.4288467 116.656338,78.2410402 115.884252,77.1423026 C115.112166,76.0435651 114.04314,75.123015 112.677142,74.3806248 C111.311144,73.6382345 109.529434,73.267045 107.331959,73.267045 C105.312658,73.267045 103.634881,73.6679297 102.298579,74.4697112 C100.962276,75.2714926 99.8932503,76.3702137 99.0914688,77.7659073 C98.2896874,79.161601 97.6957841,80.8096826 97.3097412,82.7102016 C96.9236982,84.6107206 96.7009845,86.6596869 96.6415933,88.857162 L86.4857457,88.857162 C86.4857457,85.4124713 86.9460207,82.2202411 87.8665846,79.2803758 C88.7871485,76.3405105 90.1679736,73.801574 92.0091014,71.6634901 C93.8502292,69.5254062 96.092214,67.8476295 98.7351233,66.6301095 C101.378033,65.4125895 104.451482,64.8038386 107.955564,64.8038386 C111.756602,64.8038386 114.933984,65.4274371 117.487807,66.6746527 C120.041629,67.9218683 122.105443,69.4957119 123.67931,71.3962309 C125.253178,73.2967499 126.366746,75.3605638 127.02005,77.5877345 C127.673353,79.8149053 128,81.9381095 128,83.9574109 C128,86.4518421 127.613963,88.7086746 126.841877,90.727976 C126.069791,92.7472774 125.03046,94.6032252 123.723854,96.2958749 C122.417247,97.9885247 120.932489,99.5475208 119.269534,100.97291 C117.60658,102.398299 115.884261,103.734582 114.102524,104.981797 C112.320788,106.229013 110.539078,107.416819 108.757341,108.545253 C106.975605,109.673686 105.327523,110.802102 103.813047,111.930535 C102.298571,113.058968 100.977136,114.231927 99.8487031,115.449447 C98.7202699,116.666967 97.9481956,117.958707 97.5324571,119.324705 L127.910914,119.324705 L127.910914,128.411516 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/superscript": {
            "title": "$:/core/images/superscript",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-superscript tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M2.27170276,16 L22.1825093,16 L43.8305003,49.6746527 L66.4138983,16 L85.1220387,16 L53.5854592,61.9685735 L87.3937414,111.411516 L67.0820462,111.411516 L43.295982,74.9306422 L19.1090291,111.411516 L0,111.411516 L33.8082822,61.9685735 L2.27170276,16 Z M127.910914,63.4115159 L85.3276227,63.4115159 C85.3870139,58.2444799 86.6342108,53.7308149 89.0692508,49.8703857 C91.5042907,46.0099565 94.8301491,42.654403 99.0469256,39.8036245 C101.066227,38.318844 103.174584,36.8786285 105.372059,35.4829349 C107.569534,34.0872413 109.588805,32.5876355 111.429933,30.9840726 C113.271061,29.3805097 114.785514,27.6433426 115.973338,25.7725192 C117.161163,23.9016958 117.784761,21.7487964 117.844152,19.3137564 C117.844152,18.1853233 117.710524,16.9826691 117.443264,15.7057579 C117.176003,14.4288467 116.656338,13.2410402 115.884252,12.1423026 C115.112166,11.0435651 114.04314,10.123015 112.677142,9.38062477 C111.311144,8.63823453 109.529434,8.26704499 107.331959,8.26704499 C105.312658,8.26704499 103.634881,8.6679297 102.298579,9.46971115 C100.962276,10.2714926 99.8932503,11.3702137 99.0914688,12.7659073 C98.2896874,14.161601 97.6957841,15.8096826 97.3097412,17.7102016 C96.9236982,19.6107206 96.7009845,21.6596869 96.6415933,23.857162 L86.4857457,23.857162 C86.4857457,20.4124713 86.9460207,17.2202411 87.8665846,14.2803758 C88.7871485,11.3405105 90.1679736,8.80157397 92.0091014,6.6634901 C93.8502292,4.52540622 96.092214,2.84762946 98.7351233,1.63010947 C101.378033,0.412589489 104.451482,-0.196161372 107.955564,-0.196161372 C111.756602,-0.196161372 114.933984,0.427437071 117.487807,1.67465266 C120.041629,2.92186826 122.105443,4.49571195 123.67931,6.39623095 C125.253178,8.29674995 126.366746,10.3605638 127.02005,12.5877345 C127.673353,14.8149053 128,16.9381095 128,18.9574109 C128,21.4518421 127.613963,23.7086746 126.841877,25.727976 C126.069791,27.7472774 125.03046,29.6032252 123.723854,31.2958749 C122.417247,32.9885247 120.932489,34.5475208 119.269534,35.97291 C117.60658,37.3982993 115.884261,38.7345816 114.102524,39.9817972 C112.320788,41.2290128 110.539078,42.4168194 108.757341,43.5452525 C106.975605,44.6736857 105.327523,45.8021019 103.813047,46.9305351 C102.298571,48.0589682 100.977136,49.2319272 99.8487031,50.4494472 C98.7202699,51.6669672 97.9481956,52.9587068 97.5324571,54.3247048 L127.910914,54.3247048 L127.910914,63.4115159 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tag-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M18.1643182,47.6600756 L18.1677196,51.7651887 C18.1708869,55.5878829 20.3581578,60.8623899 23.0531352,63.5573673 L84.9021823,125.406414 C87.5996731,128.103905 91.971139,128.096834 94.6717387,125.396234 L125.766905,94.3010679 C128.473612,91.5943612 128.472063,87.2264889 125.777085,84.5315115 L63.9280381,22.6824644 C61.2305472,19.9849735 55.9517395,17.801995 52.1318769,17.8010313 L25.0560441,17.7942007 C21.2311475,17.7932358 18.1421354,20.8872832 18.1452985,24.7049463 L18.1535504,34.6641936 C18.2481119,34.6754562 18.3439134,34.6864294 18.4409623,34.6971263 C22.1702157,35.1081705 26.9295004,34.6530132 31.806204,33.5444844 C32.1342781,33.0700515 32.5094815,32.6184036 32.9318197,32.1960654 C35.6385117,29.4893734 39.5490441,28.718649 42.94592,29.8824694 C43.0432142,29.8394357 43.1402334,29.7961748 43.2369683,29.7526887 L43.3646982,30.0368244 C44.566601,30.5115916 45.6933052,31.2351533 46.6655958,32.2074439 C50.4612154,36.0030635 50.4663097,42.1518845 46.6769742,45.94122 C43.0594074,49.5587868 37.2914155,49.7181264 33.4734256,46.422636 C28.1082519,47.5454734 22.7987486,48.0186448 18.1643182,47.6600756 Z\"></path>\n        <path d=\"M47.6333528,39.5324628 L47.6562932,39.5834939 C37.9670934,43.9391617 26.0718874,46.3819521 17.260095,45.4107025 C5.27267473,44.0894301 -1.02778744,36.4307276 2.44271359,24.0779512 C5.56175386,12.9761516 14.3014034,4.36129832 24.0466405,1.54817001 C34.7269254,-1.53487574 43.7955833,3.51606438 43.7955834,14.7730751 L35.1728168,14.7730752 C35.1728167,9.91428944 32.0946059,8.19982862 26.4381034,9.83267419 C19.5270911,11.8276553 13.046247,18.2159574 10.7440788,26.4102121 C8.82861123,33.2280582 11.161186,36.0634845 18.2047888,36.8398415 C25.3302805,37.6252244 35.7353482,35.4884477 44.1208333,31.7188498 L44.1475077,31.7781871 C44.159701,31.7725635 44.1718402,31.7671479 44.1839238,31.7619434 C45.9448098,31.0035157 50.4503245,38.3109156 47.7081571,39.5012767 C47.6834429,39.512005 47.6585061,39.5223987 47.6333528,39.5324628 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-theme-button tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M55.854113,66.9453198 C54.3299482,65.1432292 53.0133883,63.518995 51.9542746,62.1263761 C40.8899947,47.578055 35.3091807,55.2383404 28.9941893,62.1263758 C22.6791979,69.0144112 30.6577916,74.5954741 24.6646171,79.4611023 C18.6714426,84.3267304 19.0414417,86.0133155 8.92654943,77.1119468 C-1.18834284,68.2105781 -1.88793412,65.7597832 2.7553553,60.6807286 C7.39864472,55.601674 11.2794845,63.5989423 20.7646627,54.5728325 C30.2498409,45.5467226 22.2819131,37.5470737 22.2819131,37.5470737 C22.2819131,37.5470737 42.0310399,-2.82433362 68.4206088,0.157393922 C94.8101776,3.13912147 58.4373806,-3.70356506 49.3898693,27.958066 C45.5161782,41.5139906 50.1107906,38.3197672 57.4560458,44.0453955 C59.1625767,45.3756367 63.8839488,48.777453 70.127165,53.3625321 C63.9980513,59.2416709 58.9704753,64.0315459 55.854113,66.9453198 Z M67.4952439,79.8919946 C83.5082212,96.9282402 105.237121,117.617674 112.611591,120.312493 C123.044132,124.12481 128.000001,117.170903 128,105.522947 C127.999999,98.3705516 104.170675,78.980486 84.0760493,63.7529565 C76.6683337,70.9090328 70.7000957,76.7055226 67.4952439,79.8919946 Z\"></path>\n        <path d=\"M58.2852966,138.232794 L58.2852966,88.3943645 C56.318874,88.3923153 54.7254089,86.7952906 54.7254089,84.8344788 C54.7254089,82.8684071 56.3175932,81.2745911 58.2890859,81.2745911 L79.6408336,81.2745911 C81.608998,81.2745911 83.2045105,82.8724076 83.2045105,84.8344788 C83.2045105,86.7992907 81.614366,88.3923238 79.6446228,88.3943645 L79.6446228,88.3943646 L79.6446228,138.232794 C79.6446228,144.131009 74.8631748,148.912457 68.9649597,148.912457 C63.0667446,148.912457 58.2852966,144.131009 58.2852966,138.232794 Z M65.405072,-14.8423767 L72.5248474,-14.8423767 L76.0847351,-0.690681892 L72.5248474,6.51694947 L72.5248474,81.2745911 L65.405072,81.2745911 L65.405072,6.51694947 L61.8451843,-0.690681892 L65.405072,-14.8423767 Z\" transform=\"translate(68.964960, 67.035040) rotate(45.000000) translate(-68.964960, -67.035040) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-tip tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,128.241818 C99.346224,128.241818 128,99.5880417 128,64.2418177 C128,28.8955937 99.346224,0.241817675 64,0.241817675 C28.653776,0.241817675 0,28.8955937 0,64.2418177 C0,99.5880417 28.653776,128.241818 64,128.241818 Z M75.9358659,91.4531941 C75.3115438,95.581915 70.2059206,98.8016748 64,98.8016748 C57.7940794,98.8016748 52.6884562,95.581915 52.0641341,91.4531941 C54.3299053,94.0502127 58.8248941,95.8192805 64,95.8192805 C69.1751059,95.8192805 73.6700947,94.0502127 75.9358659,91.4531941 L75.9358659,91.4531941 Z M75.9358659,95.9453413 C75.3115438,100.074062 70.2059206,103.293822 64,103.293822 C57.7940794,103.293822 52.6884562,100.074062 52.0641341,95.9453413 C54.3299053,98.5423599 58.8248941,100.311428 64,100.311428 C69.1751059,100.311428 73.6700947,98.5423599 75.9358659,95.9453413 L75.9358659,95.9453413 Z M75.9358659,100.40119 C75.3115438,104.529911 70.2059206,107.74967 64,107.74967 C57.7940794,107.74967 52.6884562,104.529911 52.0641341,100.40119 C54.3299053,102.998208 58.8248941,104.767276 64,104.767276 C69.1751059,104.767276 73.6700947,102.998208 75.9358659,100.40119 L75.9358659,100.40119 Z M75.9358659,104.893337 C75.3115438,109.022058 70.2059206,112.241818 64,112.241818 C57.7940794,112.241818 52.6884562,109.022058 52.0641341,104.893337 C54.3299053,107.490356 58.8248941,109.259423 64,109.259423 C69.1751059,109.259423 73.6700947,107.490356 75.9358659,104.893337 L75.9358659,104.893337 Z M64.3010456,24.2418177 C75.9193117,24.2418188 88.0000013,32.0619847 88,48.4419659 C87.9999987,64.8219472 75.9193018,71.7540963 75.9193021,83.5755932 C75.9193022,89.4486648 70.0521957,92.8368862 63.9999994,92.8368862 C57.947803,92.8368862 51.9731007,89.8295115 51.9731007,83.5755932 C51.9731007,71.1469799 39.9999998,65.4700602 40,48.4419647 C40.0000002,31.4138691 52.6827796,24.2418166 64.3010456,24.2418177 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-twitter tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M41.6263422,115.803477 C27.0279663,115.803477 13.4398394,111.540813 1.99987456,104.234833 C4.02221627,104.472643 6.08004574,104.594302 8.16644978,104.594302 C20.277456,104.594302 31.4238403,100.47763 40.270894,93.5715185 C28.9590538,93.3635501 19.4123842,85.9189246 16.1230832,75.6885328 C17.7011365,75.9892376 19.320669,76.1503787 20.9862896,76.1503787 C23.344152,76.1503787 25.6278127,75.8359011 27.7971751,75.247346 C15.9709927,72.8821073 7.06079851,62.4745062 7.06079851,49.9982394 C7.06079851,49.8898938 7.06079851,49.7820074 7.06264203,49.67458 C10.5482779,51.6032228 14.5339687,52.7615103 18.7717609,52.8951059 C11.8355159,48.277565 7.2714207,40.3958845 7.2714207,31.4624258 C7.2714207,26.7434257 8.54621495,22.3200804 10.7713439,18.5169676 C23.5211299,34.0957738 42.568842,44.3472839 64.0532269,45.4210985 C63.6126256,43.5365285 63.3835682,41.5711584 63.3835682,39.5529928 C63.3835682,25.3326379 74.95811,13.8034766 89.2347917,13.8034766 C96.6697089,13.8034766 103.387958,16.930807 108.103682,21.9353619 C113.991886,20.780288 119.52429,18.6372496 124.518847,15.6866694 C122.588682,21.6993889 118.490075,26.7457211 113.152623,29.9327334 C118.381769,29.3102055 123.363882,27.926045 127.999875,25.8780385 C124.534056,31.0418981 120.151087,35.5772616 115.100763,39.2077561 C115.150538,40.3118708 115.175426,41.4224128 115.175426,42.538923 C115.175426,76.5663154 89.1744164,115.803477 41.6263422,115.803477\"></path>\n    </g>\n</svg>\n"
        },
        "$:/core/images/underline": {
            "title": "$:/core/images/underline",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-underline tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M7,117.421488 L121.247934,117.421488 L121.247934,128 L7,128 L7,117.421488 Z M104.871212,98.8958333 L104.871212,0 L88.6117424,0 L88.6117424,55.8560606 C88.6117424,60.3194668 88.0060035,64.432115 86.7945076,68.1941288 C85.5830116,71.9561425 83.7657949,75.239885 81.342803,78.0454545 C78.9198111,80.8510241 75.8911167,83.0189317 72.2566288,84.5492424 C68.6221409,86.0795531 64.3182067,86.844697 59.344697,86.844697 C53.0959284,86.844697 48.1862552,85.0593613 44.6155303,81.4886364 C41.0448054,77.9179114 39.2594697,73.0720003 39.2594697,66.9507576 L39.2594697,0 L23,0 L23,65.0378788 C23,70.3939662 23.5419769,75.2717583 24.625947,79.6714015 C25.709917,84.0710447 27.5908957,87.864883 30.2689394,91.0530303 C32.9469831,94.2411776 36.4538925,96.6960141 40.7897727,98.4176136 C45.125653,100.139213 50.545422,101 57.0492424,101 C64.3182182,101 70.630655,99.5653553 75.9867424,96.6960227 C81.3428298,93.8266902 85.742407,89.33147 89.1856061,83.2102273 L89.5681818,83.2102273 L89.5681818,98.8958333 L104.871212,98.8958333 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unfold-all-button": {
            "title": "$:/core/images/unfold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold-all tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <rect x=\"0\" y=\"64\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,8.34884273 C84.1490432,6.89863875 82.1463102,6 79.9340286,6 L47.9482224,6 C43.5292967,6 39.9411255,9.581722 39.9411255,14 C39.9411255,18.4092877 43.5260249,22 47.9482224,22 L71.9411255,22 L71.9411255,45.9929031 C71.9411255,50.4118288 75.5228475,54 79.9411255,54 C84.3504132,54 87.9411255,50.4151006 87.9411255,45.9929031 L87.9411255,14.0070969 C87.9411255,11.7964515 87.0447363,9.79371715 85.5956548,8.34412458 Z\" transform=\"translate(63.941125, 30.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -30.000000) \"></path>\n        <path d=\"M85.6571005,72.2899682 C84.2079177,70.8397642 82.2051847,69.9411255 79.9929031,69.9411255 L48.0070969,69.9411255 C43.5881712,69.9411255 40,73.5228475 40,77.9411255 C40,82.3504132 43.5848994,85.9411255 48.0070969,85.9411255 L72,85.9411255 L72,109.934029 C72,114.352954 75.581722,117.941125 80,117.941125 C84.4092877,117.941125 88,114.356226 88,109.934029 L88,77.9482224 C88,75.737577 87.1036108,73.7348426 85.6545293,72.2852501 Z\" transform=\"translate(64.000000, 93.941125) scale(1, -1) rotate(-45.000000) translate(-64.000000, -93.941125) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unfold-button": {
            "title": "$:/core/images/unfold-button",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unfold tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <rect x=\"0\" y=\"0\" width=\"128\" height=\"16\" rx=\"8\"></rect>\n        <path d=\"M85.598226,11.3488427 C84.1490432,9.89863875 82.1463102,9 79.9340286,9 L47.9482224,9 C43.5292967,9 39.9411255,12.581722 39.9411255,17 C39.9411255,21.4092877 43.5260249,25 47.9482224,25 L71.9411255,25 L71.9411255,48.9929031 C71.9411255,53.4118288 75.5228475,57 79.9411255,57 C84.3504132,57 87.9411255,53.4151006 87.9411255,48.9929031 L87.9411255,17.0070969 C87.9411255,14.7964515 87.0447363,12.7937171 85.5956548,11.3441246 Z\" transform=\"translate(63.941125, 33.000000) scale(1, -1) rotate(-45.000000) translate(-63.941125, -33.000000) \"></path>\n        <path d=\"M85.6571005,53.4077172 C84.2079177,51.9575133 82.2051847,51.0588745 79.9929031,51.0588745 L48.0070969,51.0588745 C43.5881712,51.0588745 40,54.6405965 40,59.0588745 C40,63.4681622 43.5848994,67.0588745 48.0070969,67.0588745 L72,67.0588745 L72,91.0517776 C72,95.4707033 75.581722,99.0588745 80,99.0588745 C84.4092877,99.0588745 88,95.4739751 88,91.0517776 L88,59.0659714 C88,56.855326 87.1036108,54.8525917 85.6545293,53.4029991 Z\" transform=\"translate(64.000000, 75.058875) scale(1, -1) rotate(-45.000000) translate(-64.000000, -75.058875) \"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-unlocked-padlock tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M48.6266053,64 L105,64 L105,96.0097716 C105,113.673909 90.6736461,128 73.001193,128 L55.998807,128 C38.3179793,128 24,113.677487 24,96.0097716 L24,64 L30.136303,64 C19.6806213,51.3490406 2.77158986,28.2115132 25.8366966,8.85759246 C50.4723026,-11.8141335 71.6711028,13.2108337 81.613302,25.0594855 C91.5555012,36.9081373 78.9368488,47.4964439 69.1559674,34.9513593 C59.375086,22.4062748 47.9893192,10.8049522 35.9485154,20.9083862 C23.9077117,31.0118202 34.192312,43.2685325 44.7624679,55.8655518 C47.229397,58.805523 48.403443,61.5979188 48.6266053,64 Z M67.7315279,92.3641717 C70.8232551,91.0923621 73,88.0503841 73,84.5 C73,79.8055796 69.1944204,76 64.5,76 C59.8055796,76 56,79.8055796 56,84.5 C56,87.947435 58.0523387,90.9155206 61.0018621,92.2491029 L55.9067479,115.020857 L72.8008958,115.020857 L67.7315279,92.3641717 L67.7315279,92.3641717 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/up-arrow": {
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "title": "$:/core/images/up-arrow",
            "text": "<svg class=\"tc-image-up-arrow tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n<path transform=\"rotate(-135, 63.8945, 64.1752)\" d=\"m109.07576,109.35336c-1.43248,1.43361 -3.41136,2.32182 -5.59717,2.32182l-79.16816,0c-4.36519,0 -7.91592,-3.5444 -7.91592,-7.91666c0,-4.36337 3.54408,-7.91667 7.91592,-7.91667l71.25075,0l0,-71.25074c0,-4.3652 3.54442,-7.91592 7.91667,-7.91592c4.36336,0 7.91667,3.54408 7.91667,7.91592l0,79.16815c0,2.1825 -0.88602,4.16136 -2.3185,5.59467l-0.00027,-0.00056l0.00001,-0.00001z\" />\n</svg>\n \n"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-video tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M64,12 C29.0909091,12 8.72727273,14.9166667 5.81818182,17.8333333 C2.90909091,20.75 1.93784382e-15,41.1666667 0,64.5 C1.93784382e-15,87.8333333 2.90909091,108.25 5.81818182,111.166667 C8.72727273,114.083333 29.0909091,117 64,117 C98.9090909,117 119.272727,114.083333 122.181818,111.166667 C125.090909,108.25 128,87.8333333 128,64.5 C128,41.1666667 125.090909,20.75 122.181818,17.8333333 C119.272727,14.9166667 98.9090909,12 64,12 Z M54.9161194,44.6182253 C51.102648,42.0759111 48.0112186,43.7391738 48.0112186,48.3159447 L48.0112186,79.6840553 C48.0112186,84.2685636 51.109784,85.9193316 54.9161194,83.3817747 L77.0838806,68.6032672 C80.897352,66.0609529 80.890216,61.9342897 77.0838806,59.3967328 L54.9161194,44.6182253 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg class=\"tc-image-warning tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\">\n    <g fill-rule=\"evenodd\">\n        <path d=\"M57.0717968,11 C60.1509982,5.66666667 67.8490018,5.66666667 70.9282032,11 L126.353829,107 C129.433031,112.333333 125.584029,119 119.425626,119 L8.57437416,119 C2.41597129,119 -1.43303051,112.333333 1.64617093,107 L57.0717968,11 Z M64,37 C59.581722,37 56,40.5820489 56,44.9935776 L56,73.0064224 C56,77.4211534 59.5907123,81 64,81 C68.418278,81 72,77.4179511 72,73.0064224 L72,44.9935776 C72,40.5788466 68.4092877,37 64,37 Z M64,104 C68.418278,104 72,100.418278 72,96 C72,91.581722 68.418278,88 64,88 C59.581722,88 56,91.581722 56,96 C56,100.418278 59.581722,104 64,104 Z\"></path>\n    </g>\n</svg>"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "advanced search"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Advanced search"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "cancel"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Discard changes to this tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "clone"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Clone this tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "close"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Close this tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "close all"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Close all tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "close others"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Close other tiddlers"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "control panel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Open control panel"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Delete this tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "edit"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Edit this tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "encryption"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Set or clear a password for saving this wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "clear password"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Clear the password and save this wiki without encryption"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "set password"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Set a password for saving this wiki with encryption"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "export all"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "export tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Export tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "export tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Export tiddlers"
        },
        "$:/language/Buttons/Fold/Caption": {
            "title": "$:/language/Buttons/Fold/Caption",
            "text": "fold tiddler"
        },
        "$:/language/Buttons/Fold/Hint": {
            "title": "$:/language/Buttons/Fold/Hint",
            "text": "Fold the body of this tiddler"
        },
        "$:/language/Buttons/Fold/FoldBar/Caption": {
            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
            "text": "fold-bar"
        },
        "$:/language/Buttons/Fold/FoldBar/Hint": {
            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
            "text": "Optional bars to fold and unfold tiddlers"
        },
        "$:/language/Buttons/Unfold/Caption": {
            "title": "$:/language/Buttons/Unfold/Caption",
            "text": "unfold tiddler"
        },
        "$:/language/Buttons/Unfold/Hint": {
            "title": "$:/language/Buttons/Unfold/Hint",
            "text": "Unfold the body of this tiddler"
        },
        "$:/language/Buttons/FoldOthers/Caption": {
            "title": "$:/language/Buttons/FoldOthers/Caption",
            "text": "fold other tiddlers"
        },
        "$:/language/Buttons/FoldOthers/Hint": {
            "title": "$:/language/Buttons/FoldOthers/Hint",
            "text": "Fold the bodies of other opened tiddlers"
        },
        "$:/language/Buttons/FoldAll/Caption": {
            "title": "$:/language/Buttons/FoldAll/Caption",
            "text": "fold all tiddlers"
        },
        "$:/language/Buttons/FoldAll/Hint": {
            "title": "$:/language/Buttons/FoldAll/Hint",
            "text": "Fold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Caption": {
            "title": "$:/language/Buttons/UnfoldAll/Caption",
            "text": "unfold all tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Hint": {
            "title": "$:/language/Buttons/UnfoldAll/Hint",
            "text": "Unfold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "full-screen"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Enter or leave full-screen mode"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "help"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "import"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Show information for this tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "home"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Open the default tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "language"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Choose the user interface language"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "more"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "More actions"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "new here"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Create a new tiddler tagged with this one"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "new journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Create a new journal tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "new journal here"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Create a new journal tiddler tagged with this one"
        },
        "$:/language/Buttons/NewImage/Caption": {
            "title": "$:/language/Buttons/NewImage/Caption",
            "text": "new image"
        },
        "$:/language/Buttons/NewImage/Hint": {
            "title": "$:/language/Buttons/NewImage/Hint",
            "text": "Create a new image tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Caption": {
            "title": "$:/language/Buttons/NewMarkdown/Caption",
            "text": "new Markdown tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Hint": {
            "title": "$:/language/Buttons/NewMarkdown/Hint",
            "text": "Create a new Markdown tiddler"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "new tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Create a new tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "open in new window"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Open tiddler in new window"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palette"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Choose the colour palette"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalink"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Set browser address bar to a direct link to this tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permaview"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "refresh"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Perform a full refresh of the wiki"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Confirm changes to this tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "save changes"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Save changes"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "storyview"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Choose the story visualisation"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "hide sidebar"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Hide sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "show sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Show sidebar"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tag manager"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Open tag manager"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/language/Buttons/Bold/Caption": {
            "title": "$:/language/Buttons/Bold/Caption",
            "text": "bold"
        },
        "$:/language/Buttons/Bold/Hint": {
            "title": "$:/language/Buttons/Bold/Hint",
            "text": "Apply bold formatting to selection"
        },
        "$:/language/Buttons/Clear/Caption": {
            "title": "$:/language/Buttons/Clear/Caption",
            "text": "clear"
        },
        "$:/language/Buttons/Clear/Hint": {
            "title": "$:/language/Buttons/Clear/Hint",
            "text": "Clear image to solid colour"
        },
        "$:/language/Buttons/EditorHeight/Caption": {
            "title": "$:/language/Buttons/EditorHeight/Caption",
            "text": "editor height"
        },
        "$:/language/Buttons/EditorHeight/Caption/Auto": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Auto",
            "text": "Automatically adjust height to fit content"
        },
        "$:/language/Buttons/EditorHeight/Caption/Fixed": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
            "text": "Fixed height:"
        },
        "$:/language/Buttons/EditorHeight/Hint": {
            "title": "$:/language/Buttons/EditorHeight/Hint",
            "text": "Choose the height of the text editor"
        },
        "$:/language/Buttons/Excise/Caption": {
            "title": "$:/language/Buttons/Excise/Caption",
            "text": "excise"
        },
        "$:/language/Buttons/Excise/Caption/Excise": {
            "title": "$:/language/Buttons/Excise/Caption/Excise",
            "text": "Perform excision"
        },
        "$:/language/Buttons/Excise/Caption/MacroName": {
            "title": "$:/language/Buttons/Excise/Caption/MacroName",
            "text": "Macro name:"
        },
        "$:/language/Buttons/Excise/Caption/NewTitle": {
            "title": "$:/language/Buttons/Excise/Caption/NewTitle",
            "text": "Title of new tiddler:"
        },
        "$:/language/Buttons/Excise/Caption/Replace": {
            "title": "$:/language/Buttons/Excise/Caption/Replace",
            "text": "Replace excised text with:"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Macro": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
            "text": "macro"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Link": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Link",
            "text": "link"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
            "text": "transclusion"
        },
        "$:/language/Buttons/Excise/Caption/Tag": {
            "title": "$:/language/Buttons/Excise/Caption/Tag",
            "text": "Tag new tiddler with the title of this tiddler"
        },
        "$:/language/Buttons/Excise/Caption/TiddlerExists": {
            "title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
            "text": "Warning: tiddler already exists"
        },
        "$:/language/Buttons/Excise/Hint": {
            "title": "$:/language/Buttons/Excise/Hint",
            "text": "Excise the selected text into a new tiddler"
        },
        "$:/language/Buttons/Heading1/Caption": {
            "title": "$:/language/Buttons/Heading1/Caption",
            "text": "heading 1"
        },
        "$:/language/Buttons/Heading1/Hint": {
            "title": "$:/language/Buttons/Heading1/Hint",
            "text": "Apply heading level 1 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading2/Caption": {
            "title": "$:/language/Buttons/Heading2/Caption",
            "text": "heading 2"
        },
        "$:/language/Buttons/Heading2/Hint": {
            "title": "$:/language/Buttons/Heading2/Hint",
            "text": "Apply heading level 2 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading3/Caption": {
            "title": "$:/language/Buttons/Heading3/Caption",
            "text": "heading 3"
        },
        "$:/language/Buttons/Heading3/Hint": {
            "title": "$:/language/Buttons/Heading3/Hint",
            "text": "Apply heading level 3 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading4/Caption": {
            "title": "$:/language/Buttons/Heading4/Caption",
            "text": "heading 4"
        },
        "$:/language/Buttons/Heading4/Hint": {
            "title": "$:/language/Buttons/Heading4/Hint",
            "text": "Apply heading level 4 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading5/Caption": {
            "title": "$:/language/Buttons/Heading5/Caption",
            "text": "heading 5"
        },
        "$:/language/Buttons/Heading5/Hint": {
            "title": "$:/language/Buttons/Heading5/Hint",
            "text": "Apply heading level 5 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading6/Caption": {
            "title": "$:/language/Buttons/Heading6/Caption",
            "text": "heading 6"
        },
        "$:/language/Buttons/Heading6/Hint": {
            "title": "$:/language/Buttons/Heading6/Hint",
            "text": "Apply heading level 6 formatting to lines containing selection"
        },
        "$:/language/Buttons/Italic/Caption": {
            "title": "$:/language/Buttons/Italic/Caption",
            "text": "italic"
        },
        "$:/language/Buttons/Italic/Hint": {
            "title": "$:/language/Buttons/Italic/Hint",
            "text": "Apply italic formatting to selection"
        },
        "$:/language/Buttons/LineWidth/Caption": {
            "title": "$:/language/Buttons/LineWidth/Caption",
            "text": "line width"
        },
        "$:/language/Buttons/LineWidth/Hint": {
            "title": "$:/language/Buttons/LineWidth/Hint",
            "text": "Set line width for painting"
        },
        "$:/language/Buttons/Link/Caption": {
            "title": "$:/language/Buttons/Link/Caption",
            "text": "link"
        },
        "$:/language/Buttons/Link/Hint": {
            "title": "$:/language/Buttons/Link/Hint",
            "text": "Create wikitext link"
        },
        "$:/language/Buttons/ListBullet/Caption": {
            "title": "$:/language/Buttons/ListBullet/Caption",
            "text": "bulleted list"
        },
        "$:/language/Buttons/ListBullet/Hint": {
            "title": "$:/language/Buttons/ListBullet/Hint",
            "text": "Apply bulleted list formatting to lines containing selection"
        },
        "$:/language/Buttons/ListNumber/Caption": {
            "title": "$:/language/Buttons/ListNumber/Caption",
            "text": "numbered list"
        },
        "$:/language/Buttons/ListNumber/Hint": {
            "title": "$:/language/Buttons/ListNumber/Hint",
            "text": "Apply numbered list formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoBlock/Caption": {
            "title": "$:/language/Buttons/MonoBlock/Caption",
            "text": "monospaced block"
        },
        "$:/language/Buttons/MonoBlock/Hint": {
            "title": "$:/language/Buttons/MonoBlock/Hint",
            "text": "Apply monospaced block formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoLine/Caption": {
            "title": "$:/language/Buttons/MonoLine/Caption",
            "text": "monospaced"
        },
        "$:/language/Buttons/MonoLine/Hint": {
            "title": "$:/language/Buttons/MonoLine/Hint",
            "text": "Apply monospaced character formatting to selection"
        },
        "$:/language/Buttons/Opacity/Caption": {
            "title": "$:/language/Buttons/Opacity/Caption",
            "text": "opacity"
        },
        "$:/language/Buttons/Opacity/Hint": {
            "title": "$:/language/Buttons/Opacity/Hint",
            "text": "Set painting opacity"
        },
        "$:/language/Buttons/Paint/Caption": {
            "title": "$:/language/Buttons/Paint/Caption",
            "text": "paint colour"
        },
        "$:/language/Buttons/Paint/Hint": {
            "title": "$:/language/Buttons/Paint/Hint",
            "text": "Set painting colour"
        },
        "$:/language/Buttons/Picture/Caption": {
            "title": "$:/language/Buttons/Picture/Caption",
            "text": "picture"
        },
        "$:/language/Buttons/Picture/Hint": {
            "title": "$:/language/Buttons/Picture/Hint",
            "text": "Insert picture"
        },
        "$:/language/Buttons/Preview/Caption": {
            "title": "$:/language/Buttons/Preview/Caption",
            "text": "preview"
        },
        "$:/language/Buttons/Preview/Hint": {
            "title": "$:/language/Buttons/Preview/Hint",
            "text": "Show preview pane"
        },
        "$:/language/Buttons/PreviewType/Caption": {
            "title": "$:/language/Buttons/PreviewType/Caption",
            "text": "preview type"
        },
        "$:/language/Buttons/PreviewType/Hint": {
            "title": "$:/language/Buttons/PreviewType/Hint",
            "text": "Choose preview type"
        },
        "$:/language/Buttons/Quote/Caption": {
            "title": "$:/language/Buttons/Quote/Caption",
            "text": "quote"
        },
        "$:/language/Buttons/Quote/Hint": {
            "title": "$:/language/Buttons/Quote/Hint",
            "text": "Apply quoted text formatting to lines containing selection"
        },
        "$:/language/Buttons/Size/Caption": {
            "title": "$:/language/Buttons/Size/Caption",
            "text": "image size"
        },
        "$:/language/Buttons/Size/Caption/Height": {
            "title": "$:/language/Buttons/Size/Caption/Height",
            "text": "Height:"
        },
        "$:/language/Buttons/Size/Caption/Resize": {
            "title": "$:/language/Buttons/Size/Caption/Resize",
            "text": "Resize image"
        },
        "$:/language/Buttons/Size/Caption/Width": {
            "title": "$:/language/Buttons/Size/Caption/Width",
            "text": "Width:"
        },
        "$:/language/Buttons/Size/Hint": {
            "title": "$:/language/Buttons/Size/Hint",
            "text": "Set image size"
        },
        "$:/language/Buttons/Stamp/Caption": {
            "title": "$:/language/Buttons/Stamp/Caption",
            "text": "stamp"
        },
        "$:/language/Buttons/Stamp/Caption/New": {
            "title": "$:/language/Buttons/Stamp/Caption/New",
            "text": "Add your own"
        },
        "$:/language/Buttons/Stamp/Hint": {
            "title": "$:/language/Buttons/Stamp/Hint",
            "text": "Insert a preconfigured snippet of text"
        },
        "$:/language/Buttons/Stamp/New/Title": {
            "title": "$:/language/Buttons/Stamp/New/Title",
            "text": "Name as shown in menu"
        },
        "$:/language/Buttons/Stamp/New/Text": {
            "title": "$:/language/Buttons/Stamp/New/Text",
            "text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
        },
        "$:/language/Buttons/Strikethrough/Caption": {
            "title": "$:/language/Buttons/Strikethrough/Caption",
            "text": "strikethrough"
        },
        "$:/language/Buttons/Strikethrough/Hint": {
            "title": "$:/language/Buttons/Strikethrough/Hint",
            "text": "Apply strikethrough formatting to selection"
        },
        "$:/language/Buttons/Subscript/Caption": {
            "title": "$:/language/Buttons/Subscript/Caption",
            "text": "subscript"
        },
        "$:/language/Buttons/Subscript/Hint": {
            "title": "$:/language/Buttons/Subscript/Hint",
            "text": "Apply subscript formatting to selection"
        },
        "$:/language/Buttons/Superscript/Caption": {
            "title": "$:/language/Buttons/Superscript/Caption",
            "text": "superscript"
        },
        "$:/language/Buttons/Superscript/Hint": {
            "title": "$:/language/Buttons/Superscript/Hint",
            "text": "Apply superscript formatting to selection"
        },
        "$:/language/Buttons/Underline/Caption": {
            "title": "$:/language/Buttons/Underline/Caption",
            "text": "underline"
        },
        "$:/language/Buttons/Underline/Hint": {
            "title": "$:/language/Buttons/Underline/Hint",
            "text": "Apply underline formatting to selection"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Internal information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Appearance"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Ways to customise the appearance of your TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Animation duration:"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Default tiddlers:"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Choose which tiddlers are displayed at startup:"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hello! Current language:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Title of new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Number of shadow tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Subtitle:"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Number of system tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Number of tags:"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Number of tiddlers:"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Title of this ~TiddlyWiki:"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Username for signing edits:"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version:"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Editor Types"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Editor"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Type"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
            "text": "Type shortcut here"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
            "text": "add shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
            "text": "Keyboard Shortcuts"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
            "text": "Manage keyboard shortcut assignments"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
            "text": "No keyboard shortcuts assigned"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
            "text": "remove keyboard shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
            "text": "All platforms"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
            "text": "Macintosh platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
            "text": "Non-Macintosh platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
            "text": "Linux platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
            "text": "Non-Linux platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
            "text": "Windows platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
            "text": "Non-Windows platforms only"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Loaded Modules"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "clone"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "It is recommended that you clone this shadow palette before editing it"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "This shadow palette has been modified"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Editing"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "reset"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "hide editor"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palette:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "show editor"
        },
        "$:/language/ControlPanel/Parsing/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Caption",
            "text": "Parsing"
        },
        "$:/language/ControlPanel/Parsing/Hint": {
            "title": "$:/language/ControlPanel/Parsing/Hint",
            "text": "Here you can globally disable individual wiki parser rules. Take care as disabling some parser rules can prevent ~TiddlyWiki functioning correctly (you can restore normal operation with [[safe mode|http://tiddlywiki.com/#SafeMode]] )"
        },
        "$:/language/ControlPanel/Parsing/Block/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
            "text": "Block Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Inline/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
            "text": "Inline Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
            "text": "Pragma Parse Rules"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
            "text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "disable"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Disable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(disabled)"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "None"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "enable"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Enable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Install/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Install/Caption",
            "text": "install"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Currently installed plugins:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Languages"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Language pack plugins"
        },
        "$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
            "text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
        },
        "$:/language/ControlPanel/Plugins/NoInformation/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NoInformation/Hint",
            "text": "No information provided"
        },
        "$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
            "text": "This plugin is not currently installed"
        },
        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
            "text": "open plugin library"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Reinstall/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
            "text": "reinstall"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Themes"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Theme plugins"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/Heading": {
            "title": "$:/language/ControlPanel/Saving/Heading",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Advanced Settings"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backup Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Upload Filename"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Password"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Upload Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wiki Name"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autosave"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Do not save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Automatically save changes during editing"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
            "text": "Camel Case Wiki Links"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Description": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
            "text": "Enable automatic ~CamelCase linking"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
            "text": "Enable or disable the editor toolbar:"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Description": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
            "text": "Show editor toolbar"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "These settings let you customise the behaviour of TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigation Address Bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Do not update the address bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Include the target tiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Include the target tiddler and the current story sequence"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigation History"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Update browser history when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Do not update history"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Update history"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
            "text": "Performance Instrumentation"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
            "text": "Enable performance instrumentation"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Toolbar Button Style"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Choose the style for toolbar buttons:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Borderless"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Boxed"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Rounded"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Toolbar Buttons"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Default toolbar button appearance:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Include icon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Include text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Default Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Specify which sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddler Opening Behaviour"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigation from //within// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigation from //outside// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Open above the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Open below the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Open at the top of the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Open at the bottom of the story river"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddler Titles"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Optionally display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Do not display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
            "text": "Wiki Links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
            "text": "Choose whether to link to tiddlers that do not exist yet"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Description": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
            "text": "Enable links to missing tiddlers"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Theme"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Current theme:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddler Fields"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Toolbars"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Edit Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in edit mode"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Select which toolbar buttons are displayed"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Page Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Choose which buttons are displayed on the main page toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
            "text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "View Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in view mode"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Download full wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "st"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Sunday"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Monday"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tuesday"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Wednesday"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Thursday"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Friday"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Saturday"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "January"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "February"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "March"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "May"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "June"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "July"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "August"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "October"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sun"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mon"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tue"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Wed"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Thu"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fri"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Sat"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "May"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Oct"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> days from now"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> hours from now"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minutes from now"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> months from now"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 second from now"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> seconds from now"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> years from now"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> days ago"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> hours ago"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minutes ago"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> months ago"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 second ago"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> years ago"
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Commands that can be executed under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data to be inserted into `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individual filter operator methods."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data to be inserted into `$tw`."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript macro definitions."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parsers for different content types."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers handle different methods for saving files from the browser."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Startup functions."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Story views customise the animation and behaviour of list widgets."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Defines the behaviour of an individual tiddler field."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Adds methods to the `$tw.Tiddler` prototype."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Adds methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Adds Node.js-specific methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets encapsulate DOM rendering and refreshing."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Adds methods to `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individual parser rules for the main WikiText parser."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Alert background"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Alert border"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Alert highlight"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Alert muted foreground"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "General background"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockquote bar"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Default button background"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Default button border"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Default button foreground"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Unsaved changes indicator"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Code background"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Code border"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Code foreground"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Download button background"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Download button foreground"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Dropdown background"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Dropdown border"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Dropdown tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Dropdown tab background"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "External link background hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "External link background visited"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "External link background"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "External link foreground hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "External link foreground visited"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "External link foreground"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "General foreground"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Message box background"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Message box border"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Message box foreground"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal backdrop"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal background"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal border"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal footer background"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal footer border"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal header border"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "General muted foreground"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notification background"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notification border"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Page background"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Preformatted code background"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Preformatted code border"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "General primary"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidebar button foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidebar controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidebar controls foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidebar foreground shadow"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidebar foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidebar muted foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidebar muted foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidebar tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidebar tab background"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidebar tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidebar tab border"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidebar tab divider"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidebar tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidebar tab foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Sidebar tiddler link foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Sidebar tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Site title foreground"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Static alert foreground"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Tab background"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Tab border"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Tab divider"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Tab foreground"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Table border"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Table footer background"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Table header background"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Tag background"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Tag foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler background"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler border"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Tiddler controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Tiddler controls foreground for selected controls"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Tiddler controls foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Tiddler editor background"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Tiddler editor border image"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Tiddler editor border"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Tiddler editor background for even fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Tiddler editor background for odd fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler info panel background"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler info panel border"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler info panel tab background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler link background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler subtitle foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler title foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Toolbar 'new tiddler' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Toolbar 'options' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Toolbar 'save' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Toolbar 'info' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Toolbar 'edit' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Toolbar 'close' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Toolbar 'delete' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Toolbar 'cancel' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Toolbar 'done' button foreground"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Untagged pill background"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Very muted foreground"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This is an external tiddler stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Type/Output": {
            "title": "$:/language/EditTemplate/Body/Preview/Type/Output",
            "text": "output"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "remove field"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Remove field"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "field name"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Add a new field:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "field value"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "System fields"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "User fields"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tag list"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Show tag list"
        },
        "$:/language/EditTemplate/Title/BadCharacterWarning": {
            "title": "$:/language/EditTemplate/Title/BadCharacterWarning",
            "text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "content type list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Show content type list"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "delete content type"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Delete content type"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "content type"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "The full URI of an external image tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "The name of the bag from which a tiddler came"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "The text to be displayed on a tab or button"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "The CSS color value associated with a tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "The date a tiddler was created"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "The name of the person who created a tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "For a plugin, lists the dependent plugin titles"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "The descriptive text for a plugin, or a modal dialogue"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "The footer text for a wizard"
        },
        "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against": {
            "title": "$:/language/Docs/Fields/hack-to-give-us-something-to-compare-against",
            "text": "A temporary storage field used in [[$:/core/templates/static.content]]"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "The title of the tiddler containing the icon associated with a tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "If set to \"yes\" indicates that a tiddler should be saved as a JavaScript library"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "An ordered list of tiddler titles associated with a tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "The date and time at which a tiddler was last modified"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "The tiddler title associated with the person who last modified a tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "The human readable name associated with a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "A numerical value indicating the priority of a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "The type of plugin in a plugin tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "The revision of the tiddler held at the server"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Date of a TiddlyWiki release"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "The source URL associated with a tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "The subtitle text for a wizard"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "A list of tags associated with a tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "The body text of a tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "The content type of a tiddler"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Version information for a plugin"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "All tiddlers except system tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Recently modified tiddlers, including system tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Recently modified tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "All tags except system tags"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Missing tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Draft tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Shadow tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Overridden shadow tiddlers"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Non wiki-text tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is important to make sure that you can reliably save changes. See http://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Automatically run configured commands",
            "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Clear a password for subsequent crypto operations",
            "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Lists the available editions of TiddlyWiki",
            "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Display help for TiddlyWiki commands",
            "text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from 2.x.x TiddlyWiki files (`.html`), `.tiddler`, `.tid`, `.json` or other files\n\n```\n--load <filepath>\n```\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Construct library plugin required by upgrade process",
            "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "No such help item"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Set the base output directory for subsequent commands",
            "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Set a password for subsequent crypto operations",
            "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "Render an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename. Optionally a template can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "Render a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "Saves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Saves a group of raw tiddlers to a directory",
            "text": "Saves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "The server built in to TiddlyWiki5 is very simple. Although compatible with TiddlyWeb it doesn't support many of the features needed for robust Internet-facing usage.\n\nAt the root, it serves a rendering of a specified tiddler. Away from the root, it serves individual tiddlers encoded in JSON, and supports the basic HTTP operations for `GET`, `PUT` and `DELETE`.\n\n```\n--server <port> <roottiddler> <rendertype> <servetype> <username> <password> <host> <pathprefix>\n```\n\nThe parameters are:\n\n* ''port'' - port number to serve from (defaults to \"8080\")\n* ''roottiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''rendertype'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''servetype'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''pathprefix'' - optional prefix for paths\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation isn't suitable for general use.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password:\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port.\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Prepares external tiddlers for use",
            "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Unpack the payload tiddlers from a plugin",
            "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Triggers verbose output mode",
            "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Displays the version number of TiddlyWiki",
            "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
        },
        "$:/language/Import/Imported/Hint": {
            "title": "$:/language/Import/Imported/Hint",
            "text": "The following tiddlers were imported:"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "These tiddlers are ready to import:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Import"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Select"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Title"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blocked incompatible or obsolete plugin"
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blocked temporary state tiddler"
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blocked system tiddler"
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>"
        },
        "$:/language/AboveStory/ClassicPlugin/Warning": {
            "title": "$:/language/AboveStory/ClassicPlugin/Warning",
            "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|http://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "This tiddler contains binary data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See http://tiddlywiki.com/static/Upgrading.html for more details."
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "upgrade"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "close all"
        },
        "$:/language/ColourPicker/Recent": {
            "title": "$:/language/ColourPicker/Recent",
            "text": "Recent:"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/Count": {
            "title": "$:/language/Count",
            "text": "count"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Cancel"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Set a new password for this TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Username"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Password"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Repeat password"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Passwords do not match"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Set password"
        },
        "$:/language/Error/Caption": {
            "title": "$:/language/Error/Caption",
            "text": "Error"
        },
        "$:/language/Error/Filter": {
            "title": "$:/language/Error/Filter",
            "text": "Filter error"
        },
        "$:/language/Error/FilterSyntax": {
            "title": "$:/language/Error/FilterSyntax",
            "text": "Syntax error in filter expression"
        },
        "$:/language/Error/IsFilterOperator": {
            "title": "$:/language/Error/IsFilterOperator",
            "text": "Filter Error: Unknown operand for the 'is' filter operator"
        },
        "$:/language/Error/LoadingPluginLibrary": {
            "title": "$:/language/Error/LoadingPluginLibrary",
            "text": "Error loading plugin library"
        },
        "$:/language/Error/RecursiveTransclusion": {
            "title": "$:/language/Error/RecursiveTransclusion",
            "text": "Recursive transclusion error in transclude widget"
        },
        "$:/language/Error/RetrievingSkinny": {
            "title": "$:/language/Error/RetrievingSkinny",
            "text": "Error retrieving skinny tiddler list"
        },
        "$:/language/Error/SavingToTWEdit": {
            "title": "$:/language/Error/SavingToTWEdit",
            "text": "Error saving to TWEdit"
        },
        "$:/language/Error/WhileSaving": {
            "title": "$:/language/Error/WhileSaving",
            "text": "Error while saving"
        },
        "$:/language/Error/XMLHttpRequest": {
            "title": "$:/language/Error/XMLHttpRequest",
            "text": "XMLHttpRequest error code"
        },
        "$:/language/InternalJavaScriptError/Title": {
            "title": "$:/language/InternalJavaScriptError/Title",
            "text": "Internal JavaScript Error"
        },
        "$:/language/InternalJavaScriptError/Hint": {
            "title": "$:/language/InternalJavaScriptError/Hint",
            "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
        },
        "$:/language/LazyLoadingWarning": {
            "title": "$:/language/LazyLoadingWarning",
            "text": "<p>Loading external text from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear you may be using a browser that doesn't support external text in this configuration. See http://tiddlywiki.com/#ExternalText</p>"
        },
        "$:/language/LoginToTiddlySpace": {
            "title": "$:/language/LoginToTiddlySpace",
            "text": "Login to TiddlySpace"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" - click {{$:/core/images/edit-button}} to create"
        },
        "$:/language/No": {
            "title": "$:/language/No",
            "text": "No"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/OfficialPluginLibrary/Hint": {
            "title": "$:/language/OfficialPluginLibrary/Hint",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Colour"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Count"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Icon"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/Tiddler/DateFormat": {
            "title": "$:/language/Tiddler/DateFormat",
            "text": "DDth MMM YYYY at hh12:0mmam"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Yes": {
            "title": "$:/language/Yes",
            "text": "Yes"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "type": "text/vnd.tiddlywiki",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "http://tiddlywiki.com/static/SavingChanges.html",
            "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DDth MMM YYYY"
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Saved wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Starting to save wiki"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "List"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Search via a [[filter expression|http://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches/All": {
            "title": "$:/language/Search/Matches/All",
            "text": "All matches:"
        },
        "$:/language/Search/Matches/Title": {
            "title": "$:/language/Search/Matches/Title",
            "text": "Title matches:"
        },
        "$:/language/Search/Search": {
            "title": "$:/language/Search/Search",
            "text": "Search"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Search for shadow tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Search for standard tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Search for system tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "All"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Contents"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Drafts"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Missing"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "More"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Open"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Recent"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Tags"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "untagged"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Types"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "a non-linear personal web notebook"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "My ~TiddlyWiki"
        },
        "$:/language/Snippets/ListByTag": {
            "title": "$:/language/Snippets/ListByTag",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "List of tiddlers by tag",
            "text": "<<list-links \"[tag[task]sort[title]]\">>\n"
        },
        "$:/language/Snippets/MacroDefinition": {
            "title": "$:/language/Snippets/MacroDefinition",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Macro definition",
            "text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
        },
        "$:/language/Snippets/Table4x3": {
            "title": "$:/language/Snippets/Table4x3",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table with 4 columns by 3 rows",
            "text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
        },
        "$:/language/Snippets/TableOfContents": {
            "title": "$:/language/Snippets/TableOfContents",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table of Contents",
            "text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
        },
        "$:/language/ThemeTweaks/ThemeTweaks": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks",
            "text": "Theme Tweaks"
        },
        "$:/language/ThemeTweaks/ThemeTweaks/Hint": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
            "text": "You can tweak certain aspects of the ''Vanilla'' theme."
        },
        "$:/language/ThemeTweaks/Options": {
            "title": "$:/language/ThemeTweaks/Options",
            "text": "Options"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout",
            "text": "Sidebar layout"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
            "text": "Fixed story, fluid sidebar"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
            "text": "Fluid story, fixed sidebar"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles",
            "text": "Sticky titles"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
            "text": "Causes tiddler titles to \"stick\" to the top of the browser window. Caution: Does not work at all with Chrome, and causes some layout issues in Firefox"
        },
        "$:/language/ThemeTweaks/Options/CodeWrapping": {
            "title": "$:/language/ThemeTweaks/Options/CodeWrapping",
            "text": "Wrap long lines in code blocks"
        },
        "$:/language/ThemeTweaks/Settings": {
            "title": "$:/language/ThemeTweaks/Settings",
            "text": "Settings"
        },
        "$:/language/ThemeTweaks/Settings/FontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/FontFamily",
            "text": "Font family"
        },
        "$:/language/ThemeTweaks/Settings/CodeFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
            "text": "Code font family"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImage": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
            "text": "Page background image"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
            "text": "Page background image attachment"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
            "text": "Scroll with tiddlers"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
            "text": "Fixed to window"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
            "text": "Page background image size"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
            "text": "Auto"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
            "text": "Cover"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
            "text": "Contain"
        },
        "$:/language/ThemeTweaks/Metrics": {
            "title": "$:/language/ThemeTweaks/Metrics",
            "text": "Sizes"
        },
        "$:/language/ThemeTweaks/Metrics/FontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/FontSize",
            "text": "Font size"
        },
        "$:/language/ThemeTweaks/Metrics/LineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/LineHeight",
            "text": "Line height"
        },
        "$:/language/ThemeTweaks/Metrics/BodyFontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
            "text": "Font size for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
            "text": "Line height for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
            "text": "Story left position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
            "text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop",
            "text": "Story top position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
            "text": "how far the top margin of the story river<br>is from the top of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight",
            "text": "Story right"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
            "text": "how far the left margin of the sidebar <br>is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
            "text": "Story width"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
            "text": "the overall width of the story river"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
            "text": "Tiddler width"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
            "text": "within the story river"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
            "text": "Sidebar breakpoint"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
            "text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
            "text": "Sidebar width"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
            "text": "the width of the sidebar in fluid-fixed layout"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Plugin Details"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "This plugin contains the following shadow tiddlers:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Shadow Status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "It is overridden by an ordinary tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fields"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "List"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "This tiddler does not have a list"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listed"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "This tiddler is not listed by any others"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "References"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers link to this one"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Tagging"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "No tiddlers are tagged with this one"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Developer"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Developer"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text"
        },
        "$:/languages/en-GB/icon": {
            "title": "$:/languages/en-GB/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
        },
        "$:/languages/en-GB": {
            "title": "$:/languages/en-GB",
            "name": "en-GB",
            "description": "English (British)",
            "author": "JeremyRuston",
            "core-version": ">=5.0.0\"",
            "text": "Stub pseudo-plugin for the default language"
        },
        "$:/core/modules/commander.js": {
            "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
            "title": "$:/core/modules/commander.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/commands/build.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/build.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/clearpassword.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/clearpassword.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/editions.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\"    \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/editions.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/help.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/help.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/init.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/init.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/load.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar ext = path.extname(self.params[0]);\n\tfs.readFile(this.params[0],$tw.utils.getTypeEncoding(ext),function(err,data) {\n\t\tif (err) {\n\t\t\tself.callback(err);\n\t\t} else {\n\t\t\tvar fields = {title: self.params[0]},\n\t\t\t\ttype = path.extname(self.params[0]);\n\t\t\tvar tiddlers = self.commander.wiki.deserializeTiddlers(type,data,fields);\n\t\t\tif(!tiddlers) {\n\t\t\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t\t\t} else {\n\t\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddlers[t]));\n\t\t\t\t}\n\t\t\t\tself.callback(null);\t\n\t\t\t}\n\t\t}\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/load.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/makelibrary.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.pluginsPath));\n\tcollectPublisherPlugins(path.resolve($tw.boot.corePath,$tw.config.themesPath));\n\tcollectPlugins(path.resolve($tw.boot.corePath,$tw.config.languagesPath));\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers},null,$tw.config.preferences.jsonSpaces)\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/makelibrary.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/output.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/output.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/password.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/rendertiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savelibrarytiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler,null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{text: undefined, readme: readmeContent, icon: iconContent}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savetiddler.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/savetiddlers.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\thttp = require(\"http\");\n}\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\n/*\nA simple HTTP server with regexp-based routes\n*/\nfunction SimpleServer(options) {\n\tthis.routes = options.routes || [];\n\tthis.wiki = options.wiki;\n\tthis.variables = options.variables || {};\n}\n\nSimpleServer.prototype.set = function(obj) {\n\tvar self = this;\n\t$tw.utils.each(obj,function(value,name) {\n\t\tself.variables[name] = value;\n\t});\n};\n\nSimpleServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nSimpleServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nSimpleServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"pathprefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length);\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nSimpleServer.prototype.checkCredentials = function(request,incomingUsername,incomingPassword) {\n\tvar header = request.headers.authorization || \"\",\n\t\ttoken = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tusername = parts[0],\n\t\tpassword = parts[1];\n\tif(incomingUsername === username && incomingPassword === password) {\n\t\treturn \"ALLOWED\";\n\t} else {\n\t\treturn \"DENIED\";\n\t}\n};\n\nSimpleServer.prototype.listen = function(port,host) {\n\tvar self = this;\n\thttp.createServer(function(request,response) {\n\t\t// Compose the state object\n\t\tvar state = {};\n\t\tstate.wiki = self.wiki;\n\t\tstate.server = self;\n\t\tstate.urlInfo = url.parse(request.url);\n\t\t// Find the route that matches this path\n\t\tvar route = self.findMatchingRoute(request,state);\n\t\t// Check for the username and password if we've got one\n\t\tvar username = self.get(\"username\"),\n\t\t\tpassword = self.get(\"password\");\n\t\tif(username && password) {\n\t\t\t// Check they match\n\t\t\tif(self.checkCredentials(request,username,password) !== \"ALLOWED\") {\n\t\t\t\tvar servername = state.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\";\n\t\t\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + servername + '\"'\n\t\t\t\t});\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t// Return a 404 if we didn't find a route\n\t\tif(!route) {\n\t\t\tresponse.writeHead(404);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t\t// Set the encoding for the incoming request\n\t\t// TODO: Presumably this would need tweaking if we supported PUTting binary tiddlers\n\t\trequest.setEncoding(\"utf8\");\n\t\t// Dispatch the appropriate method\n\t\tswitch(request.method) {\n\t\t\tcase \"GET\": // Intentional fall-through\n\t\t\tcase \"DELETE\":\n\t\t\t\troute.handler(request,response,state);\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tvar data = \"\";\n\t\t\t\trequest.on(\"data\",function(chunk) {\n\t\t\t\t\tdata += chunk.toString();\n\t\t\t\t});\n\t\t\t\trequest.on(\"end\",function() {\n\t\t\t\t\tstate.data = data;\n\t\t\t\t\troute.handler(request,response,state);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}).listen(port,host);\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n\t// Set up server\n\tthis.server = new SimpleServer({\n\t\twiki: this.commander.wiki\n\t});\n\t// Add route handlers\n\tthis.server.addRoute({\n\t\tmethod: \"PUT\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\tfields = JSON.parse(state.data);\n\t\t\t// Pull up any subfields in the `fields` object\n\t\t\tif(fields.fields) {\n\t\t\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\t\t\tfields[name] = field;\n\t\t\t\t});\n\t\t\t\tdelete fields.fields;\n\t\t\t}\n\t\t\t// Remove any revision field\n\t\t\tif(fields.revision) {\n\t\t\t\tdelete fields.revision;\n\t\t\t}\n\t\t\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\t\t\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\t\t\tresponse.writeHead(204, \"OK\",{\n\t\t\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"DELETE\",\n\t\tpath: /^\\/bags\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]);\n\t\t\tstate.wiki.deleteTiddler(title);\n\t\t\tresponse.writeHead(204, \"OK\", {\n\t\t\t\t\"Content-Type\": \"text/plain\"\n\t\t\t});\n\t\t\tresponse.end();\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": state.server.get(\"serveType\")});\n\t\t\tvar text = state.wiki.renderTiddler(state.server.get(\"renderType\"),state.server.get(\"rootTiddler\"));\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/status$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar text = JSON.stringify({\n\t\t\t\tusername: state.server.get(\"username\"),\n\t\t\t\tspace: {\n\t\t\t\t\trecipe: \"default\"\n\t\t\t\t},\n\t\t\t\ttiddlywiki_version: $tw.version\n\t\t\t});\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/favicon.ico$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\t\t\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\t\t\tresponse.end(buffer,\"base64\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers.json$/,\n\t\thandler: function(request,response,state) {\n\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\tvar tiddlers = [];\n\t\t\tstate.wiki.forEachTiddler({sortField: \"title\"},function(title,tiddler) {\n\t\t\t\tvar tiddlerFields = {};\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tif(name !== \"text\") {\n\t\t\t\t\t\ttiddlerFields[name] = tiddler.getFieldString(name);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\ttiddlers.push(tiddlerFields);\n\t\t\t});\n\t\t\tvar text = JSON.stringify(tiddlers);\n\t\t\tresponse.end(text,\"utf8\");\n\t\t}\n\t});\n\tthis.server.addRoute({\n\t\tmethod: \"GET\",\n\t\tpath: /^\\/recipes\\/default\\/tiddlers\\/(.+)$/,\n\t\thandler: function(request,response,state) {\n\t\t\tvar title = decodeURIComponent(state.params[0]),\n\t\t\t\ttiddler = state.wiki.getTiddler(title),\n\t\t\t\ttiddlerFields = {},\n\t\t\t\tknownFields = [\n\t\t\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t\t\t];\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\t\t\ttiddlerFields[name] = value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\t\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t\t\t} else {\n\t\t\t\tresponse.writeHead(404);\n\t\t\t\tresponse.end();\n\t\t\t}\n\t\t}\n\t});\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\tvar port = this.params[0] || \"8080\",\n\t\trootTiddler = this.params[1] || \"$:/core/save/all\",\n\t\trenderType = this.params[2] || \"text/plain\",\n\t\tserveType = this.params[3] || \"text/html\",\n\t\tusername = this.params[4],\n\t\tpassword = this.params[5],\n\t\thost = this.params[6] || \"127.0.0.1\",\n\t\tpathprefix = this.params[7];\n\tthis.server.set({\n\t\trootTiddler: rootTiddler,\n\t\trenderType: renderType,\n\t\tserveType: serveType,\n\t\tusername: username,\n\t\tpassword: password,\n\t\tpathprefix: pathprefix\n\t});\n\tthis.server.listen(port,host);\n\tconsole.log(\"Serving on \" + host + \":\" + port);\n\tconsole.log(\"(press ctrl-C to exit)\");\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/server.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/setfield.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/setfield.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/unpackplugin.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/unpackplugin.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/verbose.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n  \" + $tw.boot.logMessages.join(\"\\n  \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/verbose.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/version.js": {
            "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "title": "$:/core/modules/commands/version.js",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/config.js": {
            "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter:   \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
            "title": "$:/core/modules/config.js",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/core/modules/deserializers.js": {
            "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming = JSON.parse(text),\n\t\tresults = [];\n\tif($tw.utils.isArray(incoming)) {\n\t\tfor(var t=0; t<incoming.length; t++) {\n\t\t\tvar incomingFields = incoming[t],\n\t\t\t\tfields = {};\n\t\t\tfor(var f in incomingFields) {\n\t\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t\t}\n\t\t\t}\n\t\t\tresults.push(fields);\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
            "title": "$:/core/modules/deserializers.js",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/core/modules/editor/engines/framed.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
            "title": "$:/core/modules/editor/engines/framed.js",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/engines/simple.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
            "title": "$:/core/modules/editor/engines/simple.js",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/factory.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag);\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup ||  changedAttributes.rows || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\t\t\t\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t    clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t    el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
            "title": "$:/core/modules/editor/factory.js",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/operations/bitmap/clear.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/bitmap/clear.js",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/resize.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/bitmap/resize.js",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/text/excise.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ?  [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/excise.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/make-link.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/make-link.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/prefix-lines.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,event.paramObject.count);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== event.paramObject.count) {\n\t\t\t// Apply the prefix\n\t\t\tline =  prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/prefix-lines.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-all.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/replace-all.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-selection.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/replace-selection.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-lines.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/wrap-lines.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-selection.js": {
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix unless they comprise the entire text\n\t\t\tif(operation.selStart > event.paramObject.prefix.length || (operation.selEnd + event.paramObject.suffix.length) < operation.text.length ) {\n\t\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\t\toperation.replacement = \"\";\n\t\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t\t}\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/editor/operations/text/wrap-selection.js",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/filters/addprefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/addprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/addsuffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/addsuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/after.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/after.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/all/current.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/current.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/missing.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/missing.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/orphans.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/orphans.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/shadows.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/shadows.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/all.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/backlinks.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/backlinks.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/before.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/before.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/commands.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/commands.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/days.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/days.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/each.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\t\tvalue,values = {},\n\t\tfield = operator.operand || \"title\";\n\tif(operator.suffix !== \"list-item\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvalue = (field === \"title\") ? title : tiddler.getFieldString(field);\n\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/each.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/eachday.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/eachday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editiondescription.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editiondescription.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editions.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/editions.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/field.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/field.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/fields.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/fields.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/get.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/get.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getindex.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/getindex.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/has.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand) || tiddler.fields[operator.operand] === \"\"))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/has.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/haschanged.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/haschanged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/indexes.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/indexes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/is/current.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/current.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/image.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/missing.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/missing.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/orphan.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/orphan.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/shadow.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/shadow.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/system.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/system.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tag.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/tag.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is/tiddler.js",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tvar isFilterOperator = isFilterOperators[operator.operand];\n\tif(isFilterOperator) {\n\t\treturn isFilterOperator(source,operator.prefix,options);\n\t} else {\n\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/is.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/limit.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/limit.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/links.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/links.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/list.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listed.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/listed.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = parseInt(operator.operand) || 1,\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
            "title": "$:/core/modules/filters/listops.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/modules.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/modules.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/moduletypes.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/moduletypes.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/next.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/next.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/plugintiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/prefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/prefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/previous.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/previous.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/regexp.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/regexp.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removeprefix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/removeprefix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removesuffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/removesuffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sameday.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tvar isSameDay = function(dateField) {\n\t\t\treturn (new Date(dateField)).setHours(0,0,0,0) === targetDate;\n\t\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tif(isSameDay($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/sameday.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/search.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffix) {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: operator.suffix\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/filters/search.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/shadowsource.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/shadowsource.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sort.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/sort.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/splitbefore.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/splitbefore.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/storyviews.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/storyviews.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/suffix.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/suffix.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tag.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && !tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.hasTag(operator.operand)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tag.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tagging.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tagging.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tags.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
            "title": "$:/core/modules/filters/tags.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/title.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/title.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/untagged.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/untagged.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/wikiparserrules.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(exp.types[operator.operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "title": "$:/core/modules/filters/wikiparserrules.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/x-listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n    /*jslint node: true, browser: true */\n    /*global $tw: false */\n    \"use strict\";\n\n    /*\n    Fetch titles from the current list\n    */\n    var prepare_results = function (source) {\n    var results = [];\n        source(function (tiddler, title) {\n            results.push(title);\n        });\n        return results;\n    };\n\n    /*\n    Moves a number of items from the tail of the current list before the item named in the operand\n    */\n    exports.putbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list after the item named in the operand\n    */\n    exports.putafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -1) :\n            results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Replaces the item named in the operand with a number of items from the tail of the current list\n    */\n    exports.replace = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1;\n        return (index === -1) ?\n            results.slice(0, -count) :\n            results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n    };\n\n    /*\n    Moves a number of items from the tail of the current list to the head of the list\n    */\n    exports.putfirst = function (source, operator) {\n        var results = prepare_results(source),\n            count = parseInt(operator.suffix) || 1;\n        return results.slice(-count).concat(results.slice(0, -count));\n    };\n\n    /*\n    Moves a number of items from the head of the current list to the tail of the list\n    */\n    exports.putlast = function (source, operator) {\n        var results = prepare_results(source),\n            count = parseInt(operator.suffix) || 1;\n        return results.slice(count).concat(results.slice(0, count));\n    };\n\n    /*\n    Moves the item named in the operand a number of places forward or backward in the list\n    */\n    exports.move = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand),\n            count = parseInt(operator.suffix) || 1,\n            marker = results.splice(index, 1);\n        return results.slice(0, index + count).concat(marker).concat(results.slice(index + count));\n    };\n\n    /*\n    Returns the items from the current list that are after the item named in the operand\n    */\n    exports.allafter = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index === -1 || index > (results.length - 2)) ? [] :\n            (operator.suffix) ? results.slice(index) :\n            results.slice(index + 1);\n    };\n\n    /*\n    Returns the items from the current list that are before the item named in the operand\n    */\n    exports.allbefore = function (source, operator) {\n        var results = prepare_results(source),\n            index = results.indexOf(operator.operand);\n        return (index <= 0) ? [] :\n            (operator.suffix) ? results.slice(0, index + 1) :\n            results.slice(0, index);\n    };\n\n    /*\n    Appends the items listed in the operand array to the tail of the current list\n    */\n    exports.append = function (source, operator) {\n        var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || append.length;\n        return (append.length === 0) ? results :\n            (operator.prefix) ? results.concat(append.slice(-count)) :\n            results.concat(append.slice(0, count));\n    };\n\n    /*\n    Prepends the items listed in the operand array to the head of the current list\n    */\n    exports.prepend = function (source, operator) {\n        var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || prepend.length;\n        return (prepend.length === 0) ? results :\n            (operator.prefix) ? prepend.slice(-count).concat(results) :\n            prepend.slice(0, count).concat(results);\n    };\n\n    /*\n    Returns all items from the current list except the items listed in the operand array\n    */\n    exports.remove = function (source, operator) {\n        var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n            results = prepare_results(source),\n            count = parseInt(operator.suffix) || array.length,\n            p,\n            len,\n            index;\n        len = array.length - 1;\n        for (p = 0; p < count; ++p) {\n            if (operator.prefix) {\n                index = results.indexOf(array[len - p]);\n            } else {\n                index = results.indexOf(array[p]);\n            }\n            if (index !== -1) {\n                results.splice(index, 1);\n            }\n        }\n        return results;\n    };\n\n    /*\n    Returns all items from the current list sorted in the order of the items in the operand array\n    */\n    exports.sortby = function (source, operator) {\n        var results = prepare_results(source);\n        if (!results || results.length < 2) {\n            return results;\n        }\n        var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n        results.sort(function (a, b) {\n            return lookup.indexOf(a) - lookup.indexOf(b);\n        });\n        return results;\n    };\n\n    /*\n    Removes all duplicate items from the current list\n    */\n    exports.unique = function (source, operator) {\n        var results = prepare_results(source);\n        var set = results.reduce(function (a, b) {\n            if (a.indexOf(b) < 0) {\n                a.push(b);\n            }\n            return a;\n        }, []);\n        return set;\n    };\n})();\n",
            "title": "$:/core/modules/filters/x-listops.js",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters.js": {
            "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar operator, operand, bracketPos, curlyBracketPos;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tvar nextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\t\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter\",function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/filters.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/info/platform.js": {
            "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "title": "$:/core/modules/info/platform.js",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/core/modules/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\tlookupName(\"shortcuts\");\n\t\t\t\tlookupName($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\");\n\t\t\t\tlookupName($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\t\t\t\tlookupName($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t   (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t   (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t   (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t   (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
            "title": "$:/core/modules/keyboard.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/language.js": {
            "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
            "title": "$:/core/modules/language.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/macros/changecount.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
            "title": "$:/core/modules/macros/changecount.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/contrastcolour.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
            "title": "$:/core/modules/macros/contrastcolour.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/csvtiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/displayshortcuts.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t    return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/macros/displayshortcuts.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/dumpvariables.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/dumpvariables.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to dump all active variable values\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"dumpvariables\";\n\nexports.params = [\n];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\tvar output = [\"|!Variable |!Value |\"],\n\t\tvariables = [], variable;\n\tfor(variable in this.variables) {\n\t\tvariables.push(variable);\n\t}\n\tvariables.sort();\n\tfor(var index=0; index<variables.length; index++) {\n\t\tvar variable = variables[index];\n\t\toutput.push(\"|\" + variable + \" |<input size=50 value=<<\" + variable + \">>/> |\")\n\t}\n\treturn output.join(\"\\n\");\n};\n\n})();\n",
            "title": "$:/core/modules/macros/dumpvariables.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddlers.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter) {\n\tvar tiddlers = this.wiki.filterTiddlers(filter),\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type) {\n\treturn $tw.utils.makeDataUri(text,type);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/makedatauri.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/now.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
            "title": "$:/core/modules/macros/now.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/qualify.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
            "title": "$:/core/modules/macros/qualify.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/resolvepath.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
            "title": "$:/core/modules/macros/resolvepath.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/version.js": {
            "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
            "title": "$:/core/modules/macros/version.js",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/parsers/audioparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/audioparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/csvparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/csvparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/htmlparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/htmlparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/imageparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.tag = \"embed\";\n\t\t}\n\t} else if(text) {\n\t\tif(type === \"application/pdf\" || type === \".pdf\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t\t\telement.tag = \"embed\";\n\t\t} else if(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"application/pdf\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/imageparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/utils/parseutils.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for an indirect value\n\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\tif(indirectValue) {\n\t\t\t\tpos = indirectValue.end;\n\t\t\t\tnode.type = \"indirect\";\n\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for a unquoted value\n\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\tif(unquotedValue) {\n\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/parseutils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/parsers/textparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/textparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/videoparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/mp4\"] = AudioParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/videoparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/dash.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/entity.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: &copy;\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/extlink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: http://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/heading.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/html.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[http://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [http://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [http://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|http://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"p\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /(\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[http://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|http://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/rules.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/syslink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?\\$:\\/[a-zA-Z0-9/.\\-_]+/mg;\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/table.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n  <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/wikiparser.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined  && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t//  Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t//  Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,nextMatch.matchIndex)});\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,terminatorMatch.index)});\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\ttree.push({type: \"text\", text: this.source.substring(this.pos,inlineRuleMatch.matchIndex)});\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\ttree.push({type: \"text\", text: this.source.substr(this.pos)});\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/pluginswitcher.js": {
            "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "title": "$:/core/modules/pluginswitcher.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/saver-handler.js": {
            "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tthis.numChanges = 0;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(callback) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\tcallback(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\",\n\t\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "title": "$:/core/modules/saver-handler.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/savers/andtidwiki.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t// Strip the file://\n\tif(pathname.indexOf(\"file://\") === 0) {\n\t\tpathname = pathname.substr(7);\n\t}\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Save the file\n\twindow.twi.saveFile(pathname,text);\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/andtidwiki.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/download.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\tfilename = document.location.pathname.substr(p+1);\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tlink.setAttribute(\"target\",\"_blank\");\n\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/download.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/fsosaver.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/fsosaver.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/manualdownload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/manualdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/msdownload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/msdownload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/put.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\tvar req = new XMLHttpRequest();\n\treq.open(\"OPTIONS\",encodeURI(document.location.protocol + \"//\" + document.location.hostname + \":\" + document.location.port + document.location.pathname));\n\treq.onload = function() {\n\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\tself.serverAcceptsPuts = (this.status === 200 && !!this.getResponseHeader('dav'));\n\t};\n\treq.send();\n};\n\nPutSaver.prototype.save = function(text,method,callback) {\n\tif (!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar req = new XMLHttpRequest();\n\t// TODO: store/check ETags if supported by server, to protect against overwrites\n\t// Prompt: Do you want to save over this? Y/N\n\t// Merging would be ideal, and may be possible using future generic merge flow\n\treq.onload = function() {\n\t\tif (this.status === 200 || this.status === 201) {\n\t\t\tcallback(null); // success\n\t\t}\n\t\telse {\n\t\t\tcallback(this.responseText); // fail\n\t\t}\n\t};\n\treq.open(\"PUT\", encodeURI(window.location.href));\n\treq.setRequestHeader(\"Content-Type\", \"text/html;charset=UTF-8\");\n\treq.send(text);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/put.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyfox.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyie.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/tiddlyie.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/twedit.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
            "title": "$:/core/modules/savers/twedit.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/upload.js": {
            "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
            "title": "$:/core/modules/savers/upload.js",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/browser-messaging.js": {
            "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\"),\n\t\t\tiframeInfo = {\n\t\t\t\turl: url,\n\t\t\t\tstatus: \"loading\",\n\t\t\t\tdomNode: iframe\n\t\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\tconsole.log(\"browser-messaging: \",document.location.toString())\n\t\tconsole.log(\"browser-messaging: Received message from\",event.origin);\n\t\tconsole.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
            "title": "$:/core/modules/browser-messaging.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/commands.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/commands.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/favicon.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/favicon.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/info.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin\n\tvar fields = {\n\t\ttitle: \"$:/temp/info-plugin\",\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo();\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/info.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/load-modules.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
            "title": "$:/core/modules/startup/load-modules.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/startup/password.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/render.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar DRAFT_TIDDLER_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n\t})();\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only drafts have changed\n\t\tvar onlyDraftsHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !tiddler.hasField(\"draft.of\")) {\n\t\t\t\tonlyDraftsHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyDraftsHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = DRAFT_TIDDLER_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
            "title": "$:/core/modules/startup/render.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/rootwidget.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the notification  mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tif(document[fullscreen._fullscreenElement]) {\n\t\t\t\tdocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/startup/rootwidget.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.appVersion);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-US\"\n\t\t]\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget = new widget.widget({\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},{\n\t\t\twiki: $tw.wiki,\n\t\t\tdocument: document\n\t\t});\n\t}\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t} \n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({wiki: $tw.wiki, dirtyTracking: !$tw.syncadaptor});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/startup.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/story.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers();\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permalink\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: \"permaview\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle\n\t\t\t});\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// If a target tiddler was specified add it to the history stack\n\tif(target && target !== \"\") {\n\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t}\n\t\t$tw.wiki.addToHistory(target);\n\t} else if(storyList.length > 0) {\n\t\t$tw.wiki.addToHistory(storyList[0]);\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\tif(options.updateAddressBar !== \"no\") {\n\t\t// Get the story and the history stack\n\t\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\t\ttargetTiddler = \"\";\n\t\tif(options.targetTiddler) {\n\t\t\ttargetTiddler = options.targetTiddler;\n\t\t} else {\n\t\t\t// The target tiddler is the one at the top of the stack\n\t\t\tif(historyList.length > 0) {\n\t\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t\t}\n\t\t\t// Blank the target tiddler if it isn't present in the story\n\t\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\t\ttargetTiddler = \"\";\n\t\t\t}\n\t\t}\n\t\t// Assemble the location hash\n\t\tif(options.updateAddressBar === \"permalink\") {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t} else {\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t}\n\t\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\t\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\t\tif(options.updateHistory === \"yes\") {\n\t\t\t\t// Assign the location hash so that history is updated\n\t\t\t\twindow.location.hash = $tw.locationHash;\n\t\t\t} else {\n\t\t\t\t// We use replace so that browser history isn't affected\n\t\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t\t}\n\t\t}\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/startup/story.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/windows.js": {
            "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = title;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{document: $tw.fakeDocument, variables: variables}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "title": "$:/core/modules/startup/windows.js",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/story.js": {
            "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
            "title": "$:/core/modules/story.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/storyviews/classic.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Get the current height of the tiddler\n\tvar currWidth = targetElement.offsetWidth,\n\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t// Remove the dom nodes of the widget at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"translateX(0px)\"},\n\t\t{marginBottom:  currMarginBottom + \"px\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "title": "$:/core/modules/storyviews/classic.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/pop.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
            "title": "$:/core/modules/storyviews/pop.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/zoomin.js": {
            "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx =  zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty =  zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
            "title": "$:/core/modules/storyviews/zoomin.js",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store. If a syncadaptor is used then individual tiddlers are synchronised through it. If there is no syncadaptor then the entire wiki is saved via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.syncadaptor = options.syncadaptor;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\"));\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\t// Tasks are {type: \"load\"/\"save\"/\"delete\", title:, queueTime:, lastModificationTime:}\n\tthis.taskQueue = {}; // Hashmap of tasks yet to be performed\n\tthis.taskInProgress = {}; // Hash of tasks in progress\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.syncToServer(changes);\n\t});\n\t// Browser event handlers\n\tif($tw.browser) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\tself.handleLazyLoadEvent(title);\n\t});\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nConstants\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.filterFn.call(this.wiki);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: tiddler.fields.revision,\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title),\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t});\n};\n\n/*\nCreate an tiddlerInfo structure if it doesn't already exist\n*/\nSyncer.prototype.createTiddlerInfo = function(title) {\n\tif(!$tw.utils.hop(this.tiddlerInfo,title)) {\n\t\tthis.tiddlerInfo[title] = {\n\t\t\trevision: null,\n\t\t\tadaptorInfo: {},\n\t\t\tchangeCount: -1,\n\t\t\thasBeenLazyLoaded: false\n\t\t};\n\t}\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\treturn (this.numTasksInQueue() > 0) || (this.numTasksInProgress() > 0);\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(this.wiki.getTiddler(tiddlerFields.title),tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: tiddlerFields.revision,\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title),\n\t\thasBeenLazyLoaded: true\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Set the various status tiddlers\n\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\tif(isLoggedIn) {\n\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t} else {\n\t\t\t\tself.wiki.deleteTiddler(self.titleUserName);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tif(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tvar self = this;\n\t\tif(this.pollTimerId) {\n\t\t\tclearTimeout(this.pollTimerId);\n\t\t\tthis.pollTimerId = null;\n\t\t}\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\t// Trigger the next sync\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert($tw.language.getString(\"Error/RetrievingSkinny\") + \":\",err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null;\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Do a full load if we've already got a fat version of the tiddler\n\t\t\t\t\tif(tiddler && tiddler.fields.text !== undefined) {\n\t\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\t\tself.enqueueSyncTask({\n\t\t\t\t\t\t\ttype: \"load\",\n\t\t\t\t\t\t\ttitle: tiddlerFields.title\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Load the skinny version of the tiddler\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nSynchronise a set of changes to the server\n*/\nSyncer.prototype.syncToServer = function(changes) {\n\tvar self = this,\n\t\tnow = Date.now(),\n\t\tfilteredChanges = this.filterFn.call(this.wiki,function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t$tw.utils.each(changes,function(change,title,object) {\n\t\t// Process the change if it is a deletion of a tiddler we're already syncing, or is on the filtered change list\n\t\tif((change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) || filteredChanges.indexOf(title) !== -1) {\n\t\t\t// Queue a task to sync this tiddler\n\t\t\tself.enqueueSyncTask({\n\t\t\t\ttype: change.deleted ? \"delete\" : \"save\",\n\t\t\t\ttitle: title\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Don't lazy load the same tiddler twice\n\tvar info = this.tiddlerInfo[title];\n\tif(!info || !info.hasBeenLazyLoaded) {\n\t\tthis.createTiddlerInfo(title);\n\t\tthis.tiddlerInfo[title].hasBeenLazyLoaded = true;\n\t\t// Queue up a sync task to load this tiddler\n\t\tthis.enqueueSyncTask({\n\t\t\ttype: \"load\",\n\t\t\ttitle: title\n\t\t});\t\t\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(null,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nQueue up a sync task. If there is already a pending task for the tiddler, just update the last modification time\n*/\nSyncer.prototype.enqueueSyncTask = function(task) {\n\tvar self = this,\n\t\tnow = Date.now();\n\t// Set the timestamps on this task\n\ttask.queueTime = now;\n\ttask.lastModificationTime = now;\n\t// Fill in some tiddlerInfo if the tiddler is one we haven't seen before\n\tthis.createTiddlerInfo(task.title);\n\t// Bail if this is a save and the tiddler is already at the changeCount that the server has\n\tif(task.type === \"save\" && this.wiki.getChangeCount(task.title) <= this.tiddlerInfo[task.title].changeCount) {\n\t\treturn;\n\t}\n\t// Check if this tiddler is already in the queue\n\tif($tw.utils.hop(this.taskQueue,task.title)) {\n\t\t// this.logger.log(\"Re-queueing up sync task with type:\",task.type,\"title:\",task.title);\n\t\tvar existingTask = this.taskQueue[task.title];\n\t\t// If so, just update the last modification time\n\t\texistingTask.lastModificationTime = task.lastModificationTime;\n\t\t// If the new task is a save then we upgrade the existing task to a save. Thus a pending load is turned into a save if the tiddler changes locally in the meantime. But a pending save is not modified to become a load\n\t\tif(task.type === \"save\" || task.type === \"delete\") {\n\t\t\texistingTask.type = task.type;\n\t\t}\n\t} else {\n\t\t// this.logger.log(\"Queuing up sync task with type:\",task.type,\"title:\",task.title);\n\t\t// If it is not in the queue, insert it\n\t\tthis.taskQueue[task.title] = task;\n\t\tthis.updateDirtyStatus();\n\t}\n\t// Process the queue\n\t$tw.utils.nextTick(function() {self.processTaskQueue.call(self);});\n};\n\n/*\nReturn the number of tasks in progress\n*/\nSyncer.prototype.numTasksInProgress = function() {\n\treturn $tw.utils.count(this.taskInProgress);\n};\n\n/*\nReturn the number of tasks in the queue\n*/\nSyncer.prototype.numTasksInQueue = function() {\n\treturn $tw.utils.count(this.taskQueue);\n};\n\n/*\nTrigger a timeout if one isn't already outstanding\n*/\nSyncer.prototype.triggerTimeout = function() {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},self.taskTimerInterval);\n\t}\n};\n\n/*\nProcess the task queue, performing the next task if appropriate\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif(this.syncadaptor.isReady() && this.numTasksInProgress() === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(task) {\n\t\t\t// Remove the task from the queue and add it to the in progress list\n\t\t\tdelete this.taskQueue[task.title];\n\t\t\tthis.taskInProgress[task.title] = task;\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// Dispatch the task\n\t\t\tthis.dispatchTask(task,function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\tself.logger.alert(\"Sync error while processing '\" + task.title + \"':\\n\" + err);\n\t\t\t\t}\n\t\t\t\t// Mark that this task is no longer in progress\n\t\t\t\tdelete self.taskInProgress[task.title];\n\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t// Process the next task\n\t\t\t\tself.processTaskQueue.call(self);\n\t\t\t});\n\t\t} else {\n\t\t\t// Make sure we've set a time if there wasn't a task to perform, but we've still got tasks in the queue\n\t\t\tif(this.numTasksInQueue() > 0) {\n\t\t\t\tthis.triggerTimeout();\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nChoose the next applicable task\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar self = this,\n\t\tcandidateTask = null,\n\t\tnow = Date.now();\n\t// Select the best candidate task\n\t$tw.utils.each(this.taskQueue,function(task,title) {\n\t\t// Exclude the task if there's one of the same name in progress\n\t\tif($tw.utils.hop(self.taskInProgress,title)) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is a save and the tiddler has been modified recently, but not hit the fallback time\n\t\tif(task.type === \"save\" && (now - task.lastModificationTime) < self.throttleInterval &&\n\t\t\t(now - task.queueTime) < self.fallbackInterval) {\n\t\t\treturn;\n\t\t}\n\t\t// Exclude the task if it is newer than the current best candidate\n\t\tif(candidateTask && candidateTask.queueTime < task.queueTime) {\n\t\t\treturn;\n\t\t}\n\t\t// Now this is our best candidate\n\t\tcandidateTask = task;\n\t});\n\treturn candidateTask;\n};\n\n/*\nDispatch a task and invoke the callback\n*/\nSyncer.prototype.dispatchTask = function(task,callback) {\n\tvar self = this;\n\tif(task.type === \"save\") {\n\t\tvar changeCount = this.wiki.getChangeCount(task.title),\n\t\t\ttiddler = this.wiki.getTiddler(task.title);\n\t\tthis.logger.log(\"Dispatching 'save' task:\",task.title);\n\t\tif(tiddler) {\n\t\t\tthis.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\t// Adjust the info stored about this tiddler\n\t\t\t\tself.tiddlerInfo[task.title] = {\n\t\t\t\t\tchangeCount: changeCount,\n\t\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\t\trevision: revision\n\t\t\t\t};\n\t\t\t\t// Invoke the callback\n\t\t\t\tcallback(null);\n\t\t\t},{\n\t\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t\t});\n\t\t} else {\n\t\t\tthis.logger.log(\" Not Dispatching 'save' task:\",task.title,\"tiddler does not exist\");\n\t\t\treturn callback(null);\n\t\t}\n\t} else if(task.type === \"load\") {\n\t\t// Load the tiddler\n\t\tthis.logger.log(\"Dispatching 'load' task:\",task.title);\n\t\tthis.syncadaptor.loadTiddler(task.title,function(err,tiddlerFields) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Store the tiddler\n\t\t\tif(tiddlerFields) {\n\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else if(task.type === \"delete\") {\n\t\t// Delete the tiddler\n\t\tthis.logger.log(\"Dispatching 'delete' task:\",task.title);\n\t\tthis.syncadaptor.deleteTiddler(task.title,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tdelete self.tiddlerInfo[task.title];\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.tiddlerInfo[task.title]\n\t\t});\n\t}\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "title": "$:/core/modules/syncer.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = [];\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields.push(field + \": \" + this.getFieldString(field));\n\t\t\t}\n\t\t}\n\t}\n\treturn fields.join(\"\\n\");\n};\n\n/*\nCompare two tiddlers for equality\ntiddler: the tiddler to compare\nexcludeFields: array of field names to exclude from the comparison\n*/\nexports.isEqual = function(tiddler,excludeFields) {\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\treturn false;\n\t}\n\texcludeFields = excludeFields || [];\n\tvar self = this,\n\t\tdifferences = []; // Fields that have differences\n\t// Add to the differences array\n\tfunction addDifference(fieldName) {\n\t\t// Check for this field being excluded\n\t\tif(excludeFields.indexOf(fieldName) === -1) {\n\t\t\t// Save the field as a difference\n\t\t\t$tw.utils.pushTop(differences,fieldName);\n\t\t}\n\t}\n\t// Returns true if the two values of this field are equal\n\tfunction isFieldValueEqual(fieldName) {\n\t\tvar valueA = self.fields[fieldName],\n\t\t\tvalueB = tiddler.fields[fieldName];\n\t\t// Check for identical string values\n\t\tif(typeof(valueA) === \"string\" && typeof(valueB) === \"string\" && valueA === valueB) {\n\t\t\treturn true;\n\t\t}\n\t\t// Check for identical array values\n\t\tif($tw.utils.isArray(valueA) && $tw.utils.isArray(valueB) && $tw.utils.isArrayEqual(valueA,valueB)) {\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise the fields must be different\n\t\treturn false;\n\t}\n\t// Compare our fields\n\tfor(var fieldName in this.fields) {\n\t\tif(!isFieldValueEqual(fieldName)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// There's a difference for every field in the other tiddler that we don't have\n\tfor(fieldName in tiddler.fields) {\n\t\tif(!(fieldName in this.fields)) {\n\t\t\taddDifference(fieldName);\n\t\t}\n\t}\n\t// Return whether there were any differences\n\treturn differences.length === 0;\n};\n\n})();\n",
            "title": "$:/core/modules/tiddler.js",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/core/modules/upgraders/plugins.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"] && incomingTiddler.version) {\n\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/plugins.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/system.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/system.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/themetweaks.js": {
            "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/utils/crypto.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/utils/crypto.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/animations/slide.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/core/modules/utils/dom/animator.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/animator.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/browser.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/browser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t}\n\tel.className = c.join(\" \");\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function() {\n\tif(\"scrollX\" in window) {\n\t\treturn {x: window.scrollX, y: window.scrollY};\n\t} else {\n\t\treturn {x: document.documentElement.scrollLeft, y: document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n    // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight;\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\ttry {\n\t\tif(window.localStorage) {\n\t\t\tlocalStorage.setItem(\"tw5-password-\" + name,password);\n\t\t}\n\t} catch(e) {\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\ttry {\n\t\treturn window.localStorage ? localStorage.getItem(\"tw5-password-\" + name) : \"\";\n\t} catch(e) {\n\t\treturn \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/http.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data)\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tdata = results.join(\"&\");\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this.responseText,this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,options.url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e);\n\t}\n\treturn request;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/dom/http.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/modal.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = document.createElement(\"div\"),\n\t\tmodalBackdrop = document.createElement(\"div\"),\n\t\tmodalWrapper = document.createElement(\"div\"),\n\t\tmodalHeader = document.createElement(\"div\"),\n\t\theaderTitle = document.createElement(\"h3\"),\n\t\tmodalBody = document.createElement(\"div\"),\n\t\tmodalLink = document.createElement(\"a\"),\n\t\tmodalFooter = document.createElement(\"div\"),\n\t\tmodalFooterHelp = document.createElement(\"span\"),\n\t\tmodalFooterButtons = document.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(document.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler && tiddler.fields && tiddler.fields.help) {\n\t\tvar link = document.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(document.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + window.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\twindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tdocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tdocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tif($tw.pageContainer) {\n\t\t$tw.utils.toggleClass($tw.pageContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/modal.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/notifier.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{parentWidget: $tw.rootWidget, document: document, variables: variables});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/notifier.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/popup.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\t// Store the popup details if not already there\n\tif(this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode\n\t\t});\n\t}\n\t// Set the state tiddler\n\toptions.wiki.setTextReference(options.title,\n\t\t\t\"(\" + options.domNode.offsetLeft + \",\" + options.domNode.offsetTop + \",\" + \n\t\t\t\toptions.domNode.offsetWidth + \",\" + options.domNode.offsetHeight + \")\");\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/popup.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/scroller.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\t// Now get ready to scroll the body\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = $tw.utils.getScrollPosition();\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar clientBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\ttop: clientBounds.top + scrollPosition.y,\n\t\t\twidth: clientBounds.width,\n\t\t\theight: clientBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t// targetPos/targetSize - position and size of the target element\n\t// currentPos/currentSize - position and size of the current scroll viewport\n\t// returns: new position of the scroll viewport\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to it's top/left\n\t\t\tif(targetPos <= currentPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\tnewPos = targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\tnewPos = targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\tnewPos = currentPos;\n\t\t\t}\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,window.innerWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,window.innerHeight);\n\t// Only scroll if the position has changed\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\twindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "title": "$:/core/modules/utils/dom/scroller.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/edition-info.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
            "title": "$:/core/modules/utils/edition-info.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/fakedom.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text;\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis.style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value;\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this.style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this.style) {\n\t\t\t\tstyle.push(s + \":\" + this.style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\")\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get textContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tthrow \"Cannot get formattedTextContent on a raw TW_Element\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
            "title": "$:/core/modules/utils/fakedom.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/filesystem.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = new Buffer(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n})();\n",
            "title": "$:/core/modules/utils/filesystem.js",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/logger.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName) {\n\tthis.componentName = componentName || \"\";\n}\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tif(console !== undefined && console.log !== undefined) {\n\t\treturn Function.apply.call(console.log, console, [this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)));\n\t}\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\t// Prepare the text of the alert\n\tvar text = Array.prototype.join.call(arguments,\" \");\n\t// Create alert tiddlers in the browser\n\tif($tw.browser) {\n\t\t// Check if there is an existing alert with the same text and the same component\n\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\talertFields,\n\t\t\texistingCount,\n\t\t\tself = this;\n\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t}\n\t\t});\n\t\tif(alertFields) {\n\t\t\texistingCount = alertFields.count || 1;\n\t\t} else {\n\t\t\talertFields = {\n\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\ttext: text,\n\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\tcomponent: this.componentName\n\t\t\t};\n\t\t\texistingCount = 0;\n\t\t}\n\t\talertFields.modified = new Date();\n\t\tif(++existingCount > 1) {\n\t\t\talertFields.count = existingCount;\n\t\t} else {\n\t\t\talertFields.count = undefined;\n\t\t}\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t// Log the alert as well\n\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t} else {\n\t\t// Print an orange message to the console if not in the browser\n\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "title": "$:/core/modules/utils/logger.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/parsetree.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
            "title": "$:/core/modules/utils/parsetree.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/performance.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap of current values of measurements\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n}\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tself.measures = {};\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\tfor(var m in self.measures) {\n\t\t\t\tself.logger.log(\"+\" + m + \": \" + self.measures[m].toFixed(2) + \"ms\");\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments),\n\t\t\t\tvalue = self.measures[name] || 0;\n\t\t\tself.measures[name] = value + $tw.utils.timer(startTime);\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
            "title": "$:/core/modules/utils/performance.js",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/pluginmaker.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
            "title": "$:/core/modules/utils/pluginmaker.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/utils.js": {
            "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\tconsole.log($tw.node ? \"\\x1b[1;33m\" + text + \"\\x1b[0m\" : text);\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nCheck if an array is equal by value and by reference.\n*/\nexports.isArrayEqual = function(array1,array2) {\n\tif(array1 === array2) {\n\t\treturn true;\n\t}\n\tarray1 = array1 || [];\n\tarray2 = array2 || [];\n\tif(array1.length !== array2.length) {\n\t\treturn false;\n\t}\n\treturn array1.every(function(value,index) {\n\t\treturn value === array2[index];\n\t});\n};\n\n/*\nPush entries onto an array, removing them first if they already exist in the array\n\tarray: array to modify (assumed to be free of duplicates)\n\tvalue: a single value to push or an array of values to push\n*/\nexports.pushTop = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\t// Remove any array entries that are duplicated in the new values\n\t\tif(value.length !== 0) {\n\t\t\tif(array.length !== 0) {\n\t\t\t\tif(value.length < array.length) {\n\t\t\t\t\tfor(t=0; t<value.length; t++) {\n\t\t\t\t\t\tp = array.indexOf(value[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(p,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor(t=array.length-1; t>=0; t--) {\n\t\t\t\t\t\tp = value.indexOf(array[t]);\n\t\t\t\t\t\tif(p !== -1) {\n\t\t\t\t\t\t\tarray.splice(t,1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Push the values on top of the main array\n\t\t\tarray.push.apply(array,value);\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t\tarray.push(value);\n\t}\n\treturn array;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tObject.freeze(object);\n\tfor(key in object) {\n\t\tproperty = object[key];\n\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\tdeepFreeze(property);\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar n = Math.floor((dt.getTime()-new Date(dt.getFullYear(),0,1) + 3600000) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\",   duration:      365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\",  duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\",    duration:            24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\",   duration:                 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration:                      60 * 1000},\n\t\t{name: \"Seconds\", duration:                           1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2); // Strip the & and the ;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\treturn converter(parseInt(e.substr(2),16));\t\n\t\t} else {\n\t\t\treturn converter(parseInt(e.substr(1),10));\n\t\t}\n\t} else {\n\t\tvar c = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/'/g, \"\\\\'\")              // single quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/[\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n    return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10);\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\tif($tw.browser) {\n\t\t// TODO\n\t\tthrow \"$tw.utils.base64Decode() doesn't work in the browser\";\n\t} else {\n\t\treturn (new Buffer(string64,\"base64\")).toString();\n\t}\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\t\t\n\t\tm =  r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tparts.push(\"data:\");\n\tparts.push(type);\n\tparts.push(isBase64 ? \";base64\" : \"\");\n\tparts.push(\",\");\n\tparts.push(isBase64 ? text : encodeURIComponent(text));\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= str.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n})();\n",
            "title": "$:/core/modules/utils/utils.js",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/widgets/action-deletefield.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {};\n\tif(this.actionField) {\n\t\tremoveFields[this.actionField] = undefined;\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t}\n\t\t});\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,removeFields,this.wiki.getCreationFields()));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletetiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-listops.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags;\n\t\tthis.wiki.setText(this.target, \"tags\", undefined, $tw.utils.stringifyList(\n\t\t\tthis.wiki.filterTiddlers(tagfilter, this)));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-listops.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-navigate.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-navigate.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-sendmessage.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\")\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-setfield.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\")  || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/action-setfield.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/browse.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,function(tiddlerFieldsArray) {\n\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/browse.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/button.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = this.popup && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif(this.set && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(this,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n    return this.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\t$tw.popup.triggerPopup({\n\t\tdomNode: this.domNodes[0],\n\t\ttitle: this.popup,\n\t\twiki: this.wiki\n\t});\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup])) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/button.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/checkbox.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value = tiddler.fields[this.checkboxField] || this.checkboxDefault || \"\";\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag);\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tvar value = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();",
            "title": "$:/core/modules/widgets/checkbox.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/codeblock.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/codeblock.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/count.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = undefined;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/count.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/dropzone.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = \"tc-dropzone\";\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"}\n\t]);\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nDropZoneWidget.prototype.enterDrag = function() {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// We count enter/leave events\n\tthis.dragEnterCount = (this.dragEnterCount || 0) + 1;\n\t// If we're entering for the first time we need to apply highlighting\n\tif(this.dragEnterCount === 1) {\n\t\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.leaveDrag = function() {\n\t// Reduce the enter count\n\tthis.dragEnterCount = (this.dragEnterCount || 0) - 1;\n\t// Remove highlighting if we're leaving externally\n\tif(this.dragEnterCount <= 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag();\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag();\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tthis.leaveDrag();\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Reset the enter count\n\tthis.dragEnterCount = 0;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = this.wiki.readFiles(dataTransfer.files,function(tiddlerFieldsArray) {\n\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t});\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\tthis.importData(dataTransfer);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.importData = function(dataTransfer) {\n\t// Try each provided data type in turn\n\tfor(var t=0; t<this.importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || this.importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = this.importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.convertToFields(data);\n\t\t\t\tif(!tiddlerFields.title) {\n\t\t\t\t\ttiddlerFields.title = this.wiki.generateNewTitle(\"Untitled\");\n\t\t\t\t}\n\t\t\t\tthis.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nDropZoneWidget.prototype.importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, convertToFields: function(data) {\n\t\treturn JSON.parse(data);\n\t}},\n\t{type: \"URL\", IECompatible: true, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, convertToFields: function(data) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn JSON.parse(match[1]);\n\t\t} else {\n\t\t\treturn { // As URL string\n\t\t\t\ttext: data\n\t\t\t};\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/plain\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"Text\", IECompatible: true, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, convertToFields: function(data) {\n\t\treturn {\n\t\t\ttext: data\n\t\t};\n\t}}\n];\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/dropzone.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-binary.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Construct the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"transclude\",\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t}\n\t}]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-binary.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-bitmap.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370;\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\tif(tiddler) {\n\t\t// data URIs look like \"data:<type>;base64,<text>\"\n\t\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\t\tposColon = dataURL.indexOf(\":\"),\n\t\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\t\tposComma = dataURL.indexOf(\",\"),\n\t\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\t\ttext = dataURL.substring(posComma+1);\n\t\tvar update = {type: type, text: text};\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n\t}\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-shortcut.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-shortcut.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-text.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
            "title": "$:/core/modules/widgets/edit-text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/edit.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/element.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/element.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/encrypt.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/encrypt.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/entity.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/entity.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fieldmangler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle);\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tvar modification = this.wiki.getModificationFields();\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler({title: this.mangleTitle, tags: tag});\t\t\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fields.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\t// Get the exclusion list\n\tvar exclude;\n\tif(this.exclude) {\n\t\texclude = this.exclude.split(\" \");\n\t} else {\n\t\texclude = [\"text\"]; \n\t}\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tfor(var fieldName in tiddler.fields) {\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tfields.push(fieldName);\n\t\t\t}\n\t\t}\n\t\tfields.sort();\n\t\tfor(var f=0; f<fields.length; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tif(exclude.indexOf(fieldName) === -1) {\n\t\t\t\tvar row = this.template,\n\t\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\t\tif(reMatch) {\n\t\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\trow = row.replace(\"$name$\",fieldName);\n\t\t\t\trow = row.replace(\"$value$\",value);\n\t\t\t\trow = row.replace(\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\t\ttext.push(row);\n\t\t\t}\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude || changedAttributes.stripTitlePrefix || changedTiddlers[this.tiddlerTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/fields.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/image.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/image.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/importvariables.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar self = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\tvar widgetStackStart,widgetStackEnd;\n\tfunction addWidgetNode(widgetNode) {\n\t\tif(widgetNode) {\n\t\t\tif(!widgetStackStart && !widgetStackEnd) {\n\t\t\t\twidgetStackStart = widgetNode;\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t} else {\n\t\t\t\twidgetStackEnd.children = [widgetNode];\n\t\t\t\twidgetStackEnd = widgetNode;\n\t\t\t}\n\t\t}\n\t}\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = self.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\taddWidgetNode({\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params\n\t\t\t\t});\n\t\t\t\tparseTreeNode = parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\t// Add our own children to the end of the pile\n\tvar parseTreeNodes;\n\tif(widgetStackStart && widgetStackEnd) {\n\t\tparseTreeNodes = [widgetStackStart];\n\t\twidgetStackEnd.children = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/importvariables.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/keyboard.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.key = this.getAttribute(\"key\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/keyboard.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/link.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar MISSING_LINK_CONFIG_TITLE = \"$:/config/MissingLinks\";\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.linkClasses) {\n\t\tclasses.push(this.linkClasses);\n\t}\n\tclasses.push(\"tc-tiddlylink\");\n\tif(this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t}\n\tif(this.isMissing && !this.isShadow) {\n\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t} else {\n\t\tif(!this.isMissing) {\n\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t}\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Set an href\n\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\",\n\t\twikiLinkText = wikiLinkTemplate.replace(\"$uri_encoded$\",encodeURIComponent(this.to));\n\twikiLinkText = wikiLinkText.replace(\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragstart\", handlerObject: this, handlerMethod: \"handleDragStartEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1)\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\nLinkWidget.prototype.handleDragStartEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\tif(this.to) {\n\t\t\t$tw.dragInProgress = true;\n\t\t\t// Set the dragging class on the element being dragged\n\t\t\t$tw.utils.addClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t\t// Create the drag image elements\n\t\t\tthis.dragImage = this.document.createElement(\"div\");\n\t\t\tthis.dragImage.className = \"tc-tiddler-dragger\";\n\t\t\tvar inner = this.document.createElement(\"div\");\n\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\tinner.appendChild(this.document.createTextNode(this.to));\n\t\t\tthis.dragImage.appendChild(inner);\n\t\t\tthis.document.body.appendChild(this.dragImage);\n\t\t\t// Astoundingly, we need to cover the dragger up: http://www.kryogenix.org/code/browser/custom-drag-image.html\n\t\t\tvar cover = this.document.createElement(\"div\");\n\t\t\tcover.className = \"tc-tiddler-dragger-cover\";\n\t\t\tcover.style.left = (inner.offsetLeft - 16) + \"px\";\n\t\t\tcover.style.top = (inner.offsetTop - 16) + \"px\";\n\t\t\tcover.style.width = (inner.offsetWidth + 32) + \"px\";\n\t\t\tcover.style.height = (inner.offsetHeight + 32) + \"px\";\n\t\t\tthis.dragImage.appendChild(cover);\n\t\t\t// Set the data transfer properties\n\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t// First the image\n\t\t\tdataTransfer.effectAllowed = \"copy\";\n\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\tdataTransfer.setDragImage(this.dragImage.firstChild,-16,-16);\n\t\t\t}\n\t\t\t// Then the data\n\t\t\tdataTransfer.clearData();\n\t\t\tvar jsonData = this.wiki.getTiddlerAsJson(this.to),\n\t\t\t\ttextData = this.wiki.getTiddlerText(this.to,\"\"),\n\t\t\t\ttitle = (new RegExp(\"^\" + $tw.config.textPrimitives.wikiLink + \"$\",\"mg\")).exec(this.to) ? this.to : \"[[\" + this.to + \"]]\";\n\t\t\t// IE doesn't like these content types\n\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\tdataTransfer.setData(\"text/plain\",title);\n\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t}\n\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\tdataTransfer.setData(\"Text\",title);\n\t\t\tevent.stopPropagation();\n\t\t} else {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\nLinkWidget.prototype.handleDragEndEvent = function(event) {\n\tif(event.target === this.domNodes[0]) {\n\t\t$tw.dragInProgress = false;\n\t\t// Remove the dragging class on the element being dragged\n\t\t$tw.utils.removeClass(event.target,\"tc-tiddlylink-dragging\");\n\t\t// Delete the drag image element\n\t\tif(this.dragImage) {\n\t\t\tthis.dragImage.parentNode.removeChild(this.dragImage);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = ($tw.wiki.getTiddlerText(MISSING_LINK_CONFIG_TITLE,\"yes\") === \"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip || changedTiddlers[MISSING_LINK_CONFIG_TITLE]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/link.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/linkcatcher.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(this.catchTo) {\n\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.catchMessage && this.parentWidget) {\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: this.catchMessage,\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\tif(this.catchSet) {\n\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t}\n\tif(this.catchActions) {\n\t\tthis.invokeActionString(this.catchActions,this);\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/list.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
            "title": "$:/core/modules/widgets/list.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/macrocall.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar text = this.getVariable(this.parseTreeNode.name || this.getAttribute(\"$name\"),{params: params}),\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/macrocall.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/navigator.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList}\n\t));\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tvar p = storyList.indexOf(title);\n\twhile(p !== -1) {\n\t\tstoryList.splice(p,1);\n\t\tp = storyList.indexOf(title);\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tvar pos = storyList.indexOf(oldTitle);\n\tif(pos !== -1) {\n\t\tstoryList[pos] = newTitle;\n\t\tdo {\n\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\tif(pos !== -1) {\n\t\t\t\tstoryList.splice(pos,1);\n\t\t\t}\n\t\t} while(pos !== -1);\n\t} else {\n\t\tstoryList.splice(0,0,newTitle);\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tvar storyList = this.getStoryList();\n\t// Quit if we cannot get hold of the story list\n\tif(!storyList) {\n\t\treturn;\n\t}\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(title);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(fromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(this.getAttribute(\"openLinkFromInsideRiver\",\"below\")) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,title);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Delete this tiddler\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle;\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\";\n\t\tc++;\n\t} while(this.wiki.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags)\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\texistingTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\t\t\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\tvar self = this;\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\t\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\t\t\n\t}\n\treturn false;\n};\n\n// \nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tself.wiki.addTiddler(new $tw.Tiddler(tiddlerFields));\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\t$tw.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/navigator.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/password.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/password.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nRadio widget\n\nWill set a field to the selected value:\n\n```\n\t<$radio field=\"myfield\" value=\"check 1\">one</$radio>\n\t<$radio field=\"myfield\" value=\"check 2\">two</$radio>\n\t<$radio field=\"myfield\" value=\"check 3\">three</$radio>\n```\n\n|Parameter |Description |h\n|tiddler |Name of the tiddler in which the field should be set. Defaults to current tiddler |\n|field |The name of the field to be set |\n|value |The value to set |\n|class |Optional class name(s) |\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.radioClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(this.getValue() == this.radioValue) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.radioTitle);\n\treturn tiddler && tiddler.getFieldString(this.radioField);\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tif(this.radioClass !== \"\") {\n\t\tthis.radioClass += \" \";\n\t}\n\tthis.radioClass += \"tc-radio\";\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/radio.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/raw.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/raw.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/reveal.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tdomNode.style.left = (this.popup.left - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height - domNode.offsetHeight) + \"px\";\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width) + \"px\";\n\t\t\tdomNode.style.top = this.popup.top + \"px\";\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tdomNode.style.left = (this.popup.left + this.popup.width - domNode.offsetWidth) + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tdomNode.style.left = this.popup.left + \"px\";\n\t\t\tdomNode.style.top = (this.popup.top + this.popup.height) + \"px\";\n\t\t\tbreak;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTitle = this.state;\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state = this.stateTitle ? this.wiki.getTextReference(this.stateTitle,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.readMatchState(state);\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.readMatchState(state);\n\t\t\tthis.isOpen = !this.isOpen;\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.readMatchState = function(state) {\n\tthis.isOpen = state === this.text;\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes[\"default\"] || changedAttributes.animate) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false,\n\t\t\tcurrentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\trefreshed = true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n        $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n        }});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/reveal.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/scrollable.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/scrollable.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/select.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tif(values.indexOf(select.children[i].value) != -1) {\n\t\t\t\tselect.children[i].selected = true;\n\t\t\t}\n\t\t}\n\t\t\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/select.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/set.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(!this.setValue) {\n\t\t\tvalue = $tw.utils.stringifyList(results);\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.value || changedAttributes.emptyValue ||\n\t   (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/set.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/text.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/text.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/tiddler.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/tiddler.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/transclude.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/transclude.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/vars.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n  <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/vars.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/view.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified();\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified();\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function() {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function() {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function() {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{parentWidget: this}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/view.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/widget.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tif(arguments.length > 0) {\n\t\tthis.initialise(parseTreeNode,options);\n\t}\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\n*/\nWidget.prototype.setVariable = function(name,value,params) {\n\tthis.variables[name] = {value: value, params: params};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n*/\nWidget.prototype.getVariable = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value;\n\t\t// Substitute any parameters specified in the definition\n\t\tvalue = this.substituteVariableParameters(value,variable.params,actualParams);\n\t\tvalue = this.substituteVariableReferences(value);\n\t\treturn value;\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn this.evaluateMacroModule(name,actualParams,options.defaultValue);\n};\n\nWidget.prototype.substituteVariableParameters = function(text,formalParams,actualParams) {\n\tif(formalParams) {\n\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\tparamInfo, paramValue;\n\t\t// Step through each of the parameters in the macro definition\n\t\tfor(var p=0; p<formalParams.length; p++) {\n\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\tparamInfo = formalParams[p];\n\t\t\tparamValue = undefined;\n\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\tnextAnonParameter++;\n\t\t\t}\n\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t}\n\t\t\t// If we've still not got a value, use the default, if any\n\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t// Replace any instances of this parameter\n\t\t\ttext = text.replace(new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(paramInfo.name) + \"\\\\$\",\"mg\"),paramValue);\n\t\t}\n\t}\n\treturn text;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.render(parent,nextSibling);\n\t});\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar self = this,\n\t\trefreshed = false;\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\trefreshed = childWidget.refresh(changedTiddlers) || refreshed;\n\t});\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction && child.invokeAction(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "title": "$:/core/modules/widgets/widget.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/wikify.js": {
            "text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
            "title": "$:/core/modules/widgets/wikify.js",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/wiki-bulkops.js": {
            "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nexports.renameTiddler = function(fromTitle,toTitle) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar tiddler = this.getTiddler(fromTitle);\n\t\tthis.addTiddler(new $tw.Tiddler(tiddler,{title: toTitle},this.getModificationFields()));\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar tags = (tiddler.fields.tags || []).slice(0),\n\t\t\t\tlist = (tiddler.fields.list || []).slice(0),\n\t\t\t\tisModified = false;\n\t\t\t// Rename tags\n\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// Rename lists\n\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\tif(title === fromTitle) {\n\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\tisModified = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(isModified) {\n\t\t\t\tself.addTiddler(new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields()));\n\t\t\t}\n\t\t});\n\t}\n}\n\n})();\n",
            "title": "$:/core/modules/wiki-bulkops.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/wiki.js": {
            "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\";\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type]  || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tvar fields = {\n\t\t\tcreated: new Date()\n\t\t},\n\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\tif(creator) {\n\t\tfields.creator = creator;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tvar fields = Object.create(null),\n\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\tfields.modified = new Date();\n\tif(modifier) {\n\t\tfields.modifier = modifier;\n\t}\n\treturn fields;\n};\n\n/*\nReturn a sorted array of tiddler titles.  Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t                        (isDescending ? y - x :  x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\t// Count up the links\n\t\tvar links = [],\n\t\t\tcheckParseTree = function(parseTree) {\n\t\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\tif(parser) {\n\t\t\tcheckParseTree(parser.tree);\n\t\t}\n\t\treturn links;\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinks = [];\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\tbacklinks.push(title);\n\t\t}\n\t});\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\tvar self = this;\n\treturn this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\tvar tagmap = self.getTagMap();\n\t\treturn self.sortByList(tagmap[tag],tag);\n\t});\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tvar currPos = titles.indexOf(title),\n\t\t\t\tnewPos = -1,\n\t\t\t\ttiddler = this.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(newPos === -1) {\n\t\t\t\t\tnewPos = currPos;\n\t\t\t\t}\n\t\t\t\tif(newPos !== currPos) {\n\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t}\n\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,defaultData);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t});\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerData(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type || \"text/vnd.tiddlywiki\",tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTree = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"transclude\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttiddler: {\n\t\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: title}},\n\t\t\t\tisBlock: !options.parseAsInline}]}\n\t]};\n\tif(options.field) {\n\t\tparseTree.tree[0].children[0].attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTree.tree[0].children[0].attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTree.tree[0].children[0].children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTree,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tliteral: If true, searches for literal string, rather than separate search terms\n\tfield: If specified, restricts the search to the specified field\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tmatch;\n\t\tfor(var t=0; t<searchTermsRegExps.length; t++) {\n\t\t\tmatch = false;\n\t\t\tif(options.field) {\n\t\t\t\tmatch = searchTermsRegExps[t].test(tiddler.getFieldString(options.field));\n\t\t\t} else {\n\t\t\t\t// Search title, tags and body\n\t\t\t\tif(contentTypeInfo.encoding === \"utf8\") {\n\t\t\t\t\tmatch = match || searchTermsRegExps[t].test(tiddler.fields.text);\n\t\t\t\t}\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.join(\"\\0\") : \"\";\n\t\t\t\tmatch = match || searchTermsRegExps[t].test(tags) || searchTermsRegExps[t].test(tiddler.fields.title);\n\t\t\t}\n\t\t\tif(!match) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(tiddler.fields.text !== undefined) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text;\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,callback) {\n\tvar result = [],\n\t\toutstanding = files.length;\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t});\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,callback) {\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\t// Deserialise the file contents\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\t// Are we binary?\n\t\tif(isBinary) {\n\t\t\t// The base64 section starts after the first comma in the data URI\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttiddlerFields.text = text.substr(commaPos+1);\n\t\t\t\tcallback([tiddlerFields]);\n\t\t\t}\n\t\t} else {\n\t\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\t\tif(encryptedJson) {\n\t\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields));\n\t\t\t}\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create  a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n})();\n",
            "title": "$:/core/modules/wiki.js",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/palettes/Blanca": {
            "title": "$:/palettes/Blanca",
            "name": "Blanca",
            "description": "A clean white palette to let you focus",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Blue": {
            "title": "$:/palettes/Blue",
            "name": "Blue",
            "description": "A blue theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Muted": {
            "title": "$:/palettes/Muted",
            "name": "Muted",
            "description": "Bright tiddlers on a muted background",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastLight": {
            "title": "$:/palettes/ContrastLight",
            "name": "Contrast (Light)",
            "description": "High contrast and unambiguous (light version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastDark": {
            "title": "$:/palettes/ContrastDark",
            "name": "Contrast (Dark)",
            "description": "High contrast and unambiguous (dark version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/DarkPhotos": {
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "title": "$:/palettes/DarkPhotos",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Rocker": {
            "title": "$:/palettes/Rocker",
            "name": "Rocker",
            "description": "A dark theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarFlare": {
            "title": "$:/palettes/SolarFlare",
            "name": "Solar Flare",
            "description": "Warm, relaxing earth colours",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n    download-foreground: <<colour background>>\n    dragger-foreground: <<colour background>>\n    dropdown-background: <<colour background>>\n    modal-background: <<colour background>>\n    sidebar-foreground-shadow: <<colour background>>\n    tiddler-background: <<colour background>>\n    tiddler-border: <<colour background>>\n    tiddler-link-background: <<colour background>>\n    tab-background-selected: <<colour background>>\n        dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n    dragger-background: <<colour foreground>>\n    tab-foreground: <<colour foreground>>\n        tab-foreground-selected: <<colour tab-foreground>>\n            sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n        sidebar-tab-foreground: <<colour tab-foreground>>\n    sidebar-button-foreground: <<colour foreground>>\n    sidebar-controls-foreground: <<colour foreground>>\n    sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n    alert-muted-foreground: <<colour base01>>\n: base00\n    code-foreground: <<colour base00>>\n    message-foreground: <<colour base00>>\n    tag-foreground: <<colour base00>>\n: base0\n    sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n    muted-foreground: <<colour base1>>\n        blockquote-bar: <<colour muted-foreground>>\n        dropdown-border: <<colour muted-foreground>>\n        sidebar-muted-foreground: <<colour muted-foreground>>\n        tiddler-title-foreground: <<colour muted-foreground>>\n            site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n    modal-footer-background: <<colour base2>>\n    page-background: <<colour base2>>\n        modal-backdrop: <<colour page-background>>\n        notification-background: <<colour page-background>>\n        code-background: <<colour page-background>>\n            code-border: <<colour code-background>>\n        pre-background: <<colour page-background>>\n            pre-border: <<colour pre-background>>\n        sidebar-tab-background-selected: <<colour page-background>>\n    table-header-background: <<colour base2>>\n    tag-background: <<colour base2>>\n    tiddler-editor-background: <<colour base2>>\n    tiddler-info-background: <<colour base2>>\n    tiddler-info-tab-background: <<colour base2>>\n    tab-background: <<colour base2>>\n        dropdown-tab-background: <<colour tab-background>>\n: base3\n    alert-background: <<colour base3>>\n    message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n    alert-highlight: <<colour magenta>>\n: violet\n    external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n    tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n    external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n    primary: <<colour blue-muted>>\n        download-background: <<colour primary>>\n        tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n    modal-footer-border: <<colour tab-border>>\n    modal-header-border: <<colour tab-border>>\n    notification-border: <<colour tab-border>>\n    sidebar-tab-border: <<colour tab-border>>\n    tab-border-selected: <<colour tab-border>>\n        sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n    sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Vanilla": {
            "title": "$:/palettes/Vanilla",
            "name": "Vanilla",
            "description": "Pale and unobtrusive",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
        },
        "$:/core/templates/MOTW.html": {
            "title": "$:/core/templates/MOTW.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)http://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/core/templates/alltiddlers.template.html": {
            "title": "$:/core/templates/alltiddlers.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
        },
        "$:/core/templates/canonical-uri-external-image": {
            "title": "$:/core/templates/canonical-uri-external-image",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-text": {
            "title": "$:/core/templates/canonical-uri-external-text",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
        },
        "$:/core/templates/css-tiddler": {
            "title": "$:/core/templates/css-tiddler",
            "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
        },
        "$:/core/templates/exporters/CsvFile": {
            "title": "$:/core/templates/exporters/CsvFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/CsvFile}}",
            "extension": ".csv",
            "text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/StaticRiver": {
            "title": "$:/core/templates/exporters/StaticRiver",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/StaticRiver}}",
            "extension": ".html",
            "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
        },
        "$:/core/templates/exporters/StaticRiver/Content": {
            "title": "$:/core/templates/exporters/StaticRiver/Content",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<<renderContent>>\n</$importvariables>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\"><<renderContent>></$importvariables>"
        },
        "$:/core/templates/html-div-tiddler": {
            "title": "$:/core/templates/html-div-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
        },
        "$:/core/templates/html-tiddler": {
            "title": "$:/core/templates/html-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
        },
        "$:/core/templates/javascript-tiddler": {
            "title": "$:/core/templates/javascript-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
        },
        "$:/core/templates/module-tiddler": {
            "title": "$:/core/templates/module-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
        },
        "$:/core/templates/plain-text-tiddler": {
            "title": "$:/core/templates/plain-text-tiddler",
            "text": "<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/raw-static-tiddler": {
            "title": "$:/core/templates/raw-static-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
        },
        "$:/core/save/all": {
            "title": "$:/core/save/all",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/empty": {
            "title": "$:/core/save/empty",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-all": {
            "title": "$:/core/save/lazy-all",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-images": {
            "title": "$:/core/save/lazy-images",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"tempCurrentTiddler\" value=<<currentTiddler>>>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=<<tempCurrentTiddler>>>\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</$importvariables>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n"
        },
        "$:/core/templates/split-recipe": {
            "title": "$:/core/templates/split-recipe",
            "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
        },
        "$:/core/templates/static-tiddler": {
            "title": "$:/core/templates/static-tiddler",
            "text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
        },
        "$:/core/templates/static.area": {
            "title": "$:/core/templates/static.area",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "type": "text/vnd.tiddlywiki",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|http://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
        },
        "$:/core/templates/static.template.css": {
            "title": "$:/core/templates/static.template.css",
            "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
        },
        "$:/core/templates/static.template.html": {
            "title": "$:/core/templates/static.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
        },
        "$:/core/templates/static.tiddler.html": {
            "title": "$:/core/templates/static.tiddler.html",
            "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>\n</$importvariables>`\n</section>\n</body>\n</html>\n`"
        },
        "$:/core/templates/store.area.template.html": {
            "title": "$:/core/templates/store.area.template.html",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
        },
        "$:/core/templates/tid-tiddler": {
            "title": "$:/core/templates/tid-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/tiddler-metadata": {
            "title": "$:/core/templates/tiddler-metadata",
            "text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
        },
        "$:/core/templates/tiddlywiki5.html": {
            "title": "$:/core/templates/tiddlywiki5.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html>\n<head>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\t\t<!-- Force IE standards mode for Intranet and HTA - should be the first meta -->\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}\n</div>\n</body>\n</html>\n"
        },
        "$:/core/templates/version": {
            "title": "$:/core/templates/version",
            "text": "<<version>>"
        },
        "$:/core/templates/wikified-tiddler": {
            "title": "$:/core/templates/wikified-tiddler",
            "text": "<$transclude />"
        },
        "$:/core/ui/AboveStory/tw2-plugin-check": {
            "title": "$:/core/ui/AboveStory/tw2-plugin-check",
            "tags": "$:/tags/AboveStory",
            "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Standard": {
            "title": "$:/core/ui/AdvancedSearch/Standard",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Standard/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/AdvancedSearch": {
            "title": "$:/AdvancedSearch",
            "icon": "$:/core/images/advanced-search-button",
            "color": "#bbb",
            "text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/delete-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=\"0hh:0mm:0ss DD MM YYYY\"/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
        },
        "$:/core/ui/BinaryWarning": {
            "title": "$:/core/ui/BinaryWarning",
            "text": "\\define lingo-base() $:/language/BinaryWarning/\n<div class=\"tc-binary-warning\">\n\n<<lingo Prompt>>\n\n</div>\n"
        },
        "$:/core/ui/Components/tag-link": {
            "title": "$:/core/ui/Components/tag-link",
            "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
        },
        "$:/core/ui/ControlPanel/Advanced": {
            "title": "$:/core/ui/ControlPanel/Advanced",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
            "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Appearance": {
            "title": "$:/core/ui/ControlPanel/Appearance",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
            "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Basics": {
            "title": "$:/core/ui/ControlPanel/Basics",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Basics/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Tags\" default=\"\" tag=\"input\"/> |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
        },
        "$:/core/ui/ControlPanel/EditorTypes": {
            "title": "$:/core/ui/ControlPanel/EditorTypes",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/Info": {
            "title": "$:/core/ui/ControlPanel/Info",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Info/Caption}}",
            "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/KeyboardShortcuts": {
            "title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip=<<lingo Remove/Hint>>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n&times;\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[all[tiddlers+shadows][$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>prefix[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/LoadedModules": {
            "title": "$:/core/ui/ControlPanel/LoadedModules",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
        },
        "$:/core/ui/ControlPanel/Modals/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
            "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
            "text": "\\define install-plugin-button()\n<$button>\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\"\"\">\n{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\n</$list>\n</$button>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1><$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<<install-plugin-button>>\n</div>\n</div>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\" emptyMessage=\"\"\"{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\"\"\">\n<em>\n{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}\n</em>\n</$list>\n</div>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[description]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$list>\n\\end\n\n\\define plugin-library-listing()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<div class=\"tc-plugin-library\">\n\n!! <$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link>\n\n//<$view field=\"url\"/>//\n\n<$transclude/>\n\n<<display-server-connection>>\n</div>\n</$list>\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<div>\n<<plugin-library-listing>>\n</div>\n\n</$importvariables>\n"
        },
        "$:/core/ui/ControlPanel/Palette": {
            "title": "$:/core/ui/ControlPanel/Palette",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Palette/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/snippets/paletteeditor}}\n\n</$reveal>\n\n"
        },
        "$:/core/ui/ControlPanel/Parsing": {
            "title": "$:/core/ui/ControlPanel/Parsing",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define parsing-inner(typeCap)\n<li>\n<$checkbox tiddler=\"\"\"$:/config/WikiParserRules/$typeCap$/$(currentTiddler)$\"\"\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> ''<$text text=<<currentTiddler>>/>'': </$checkbox>\n</li>\n\\end\n\n\\define parsing-outer(typeLower,typeCap)\n<ul>\n<$list filter=\"[wikiparserrules[$typeLower$]]\">\n<<parsing-inner typeCap:\"$typeCap$\">>\n</$list>\n</ul>\n\\end\n\n<<lingo Hint>>\n\n! <<lingo Pragma/Caption>>\n\n<<parsing-outer typeLower:\"pragma\" typeCap:\"Pragma\">>\n\n! <<lingo Inline/Caption>>\n\n<<parsing-outer typeLower:\"inline\" typeCap:\"Inline\">>\n\n! <<lingo Block/Caption>>\n\n<<parsing-outer typeLower:\"block\" typeCap:\"Block\">>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
            "text": "<<display-server-assets language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
            "text": "<<display-server-assets plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
            "text": "<<display-server-assets theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green\" style=\"background:blue;\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
            "text": "<<plugin-table language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
            "text": "<<plugin-table plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
            "text": "<<plugin-table theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage)\n<div class=\"tc-plugin-info-chunk tc-small-icon\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk\">\n<h1>\n''<$view field=\"description\"><$view field=\"title\"/></$view>'' $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-table(type)\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[description]]\" emptyMessage=<<lingo \"Empty/Hint\">>>\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$reveal type=\"nomatch\" text=\"\" state=\"!!list\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList={{!!list}} default=\"readme\" template=\"$:/core/ui/PluginInfo\"/>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=\"!!list\">\n<<lingo NoInformation/Hint>>\n</$reveal>\n</div>\n</div>\n</$reveal>\n</$set>\n</$list>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n! <<lingo TiddlySpot/Heading>>\n\n<<lingo TiddlySpot/Description>>\n\n|<<lingo TiddlySpot/UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Password>> |<$password name=\"upload\"/> |\n|<<lingo TiddlySpot/Backups>> |<<backupLink>> |\n\n''<<lingo TiddlySpot/Advanced/Heading>>''\n\n|<<lingo TiddlySpot/ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo TiddlySpot/Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo TiddlySpot/UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo TiddlySpot/BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
        },
        "$:/core/ui/ControlPanel/Settings/AutoSave": {
            "title": "$:/core/ui/ControlPanel/Settings/AutoSave",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/AutoSave/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/AutoSave/\n\n<$link to=\"$:/config/AutoSave\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo Disabled/Description>> </$radio>\n"
        },
        "$:/core/buttonstyles/Borderless": {
            "title": "$:/core/buttonstyles/Borderless",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
            "text": "tc-btn-invisible"
        },
        "$:/core/buttonstyles/Boxed": {
            "title": "$:/core/buttonstyles/Boxed",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
            "text": "tc-btn-boxed"
        },
        "$:/core/buttonstyles/Rounded": {
            "title": "$:/core/buttonstyles/Rounded",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
            "text": "tc-btn-rounded"
        },
        "$:/core/ui/ControlPanel/Settings/CamelCase": {
            "title": "$:/core/ui/ControlPanel/Settings/CamelCase",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
            "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n  <option value=\"above\"><<lingo \"OpenAbove\">></option>\n  <option value=\"below\"><<lingo \"OpenBelow\">></option>\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/MissingLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationHistory": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
            "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/TitleLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings": {
            "title": "$:/core/ui/ControlPanel/Settings",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Settings/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/StoryView": {
            "title": "$:/core/ui/ControlPanel/StoryView",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
            "text": "{{$:/snippets/viewswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/Theme": {
            "title": "$:/core/ui/ControlPanel/Theme",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Theme/Caption}}",
            "text": "{{$:/snippets/themeswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/TiddlerFields": {
            "title": "$:/core/ui/ControlPanel/TiddlerFields",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(listItem)$\n\\end\n\n\\define toolbar-button()\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"> <$transclude tiddler={{$(listItem)$!!icon}}/> <$transclude tiddler=<<listItem>> field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i></$checkbox>\n\\end\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<<toolbar-button>>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/PageControls": {
            "title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>> field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars": {
            "title": "$:/core/ui/ControlPanel/Toolbars",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
            "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body/preview/output": {
            "title": "$:/core/ui/EditTemplate/body/preview/output",
            "tags": "$:/tags/EditPreview",
            "caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
            "text": "<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
        },
        "$:/core/ui/EditTemplate/body/editor": {
            "title": "$:/core/ui/EditTemplate/body/editor",
            "text": "<$edit\n\n  field=\"text\"\n  class=\"tc-edit-texteditor\"\n  placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n\n><$set\n\n  name=\"targetTiddler\"\n  value=<<currentTiddler>>\n\n><$list\n\n  filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n  type=\"nomatch\"\n  state=<<config-visibility-title>>\n  text=\"hide\"\n  class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n  tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n  mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
        },
        "$:/core/ui/EditTemplate/body/toolbar/button": {
            "title": "$:/core/ui/EditTemplate/body/toolbar/button",
            "text": "\\define toolbar-button-icon()\n<$list\n\n  filter=\"[all[current]!has[custom-icon]]\"\n  variable=\"no-custom-icon\"\n\n><$transclude\n\n  tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n  filter={{!!condition}}\n  variable=\"list-condition\"\n\n><$wikify\n\n  name=\"tooltip-text\"\n  text=<<toolbar-button-tooltip>>\n  mode=\"inline\"\n  output=\"text\"\n\n><$list\n\n  filter=\"[all[current]!has[dropdown]]\"\n  variable=\"no-dropdown\"\n\n><$button\n\n  class=\"tc-btn-invisible $(buttonClasses)$\"\n  tooltip=<<tooltip-text>>\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button></$list><$list\n\n  filter=\"[all[current]has[dropdown]]\"\n  variable=\"dropdown\"\n\n><$set\n\n  name=\"dropdown-state\"\n  value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n  popup=<<dropdown-state>>\n  class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n  selectedClass=\"tc-selected\"\n  tooltip=<<tooltip-text>>\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button><$reveal\n\n  state=<<dropdown-state>>\n  type=\"popup\"\n  position=\"below\"\n  animate=\"yes\"\n  tag=\"span\"\n\n><div\n\n  class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n  tiddler={{!!dropdown}}\n  mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n  name=\"buttonClasses\"\n  value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[is[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[is[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/controls": {
            "title": "$:/core/ui/EditTemplate/controls",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/fields": {
            "title": "$:/core/ui/EditTemplate/fields",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define new-field-inner()\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button>\n<$action-sendmessage $message=\"tm-add-field\" $name=<<name>> $value=<<value>>/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n\\end\n\n\\define new-field()\n<$set name=\"name\" value={{$:/temp/newfieldname}}>\n<$set name=\"value\" value={{$:/temp/newfieldvalue}}>\n<<new-field-inner>>\n</$set>\n</$set>\n\\end\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=\"$:/temp/newfieldname\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span>\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"$:/temp/newfieldname\">\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$list filter=\"[!is[shadow]!is[system]fields[]sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<<currentField>>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$edit-text tiddler=\"$:/temp/newfieldvalue\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\"/>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">&times;</$button>\n</span>\n</$vars>\n\\end\n\\define tag-body(colour,palette)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n\\end\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\n</$list>\n\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$edit-text tiddler=\"$:/temp/NewTagName\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\"/>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$button message=\"tm-add-tag\" param={{$:/temp/NewTagName}} set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<lingo Tags/Add/Button>>\n</$button>\n</span>\n</div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$linkcatcher set=\"$:/temp/NewTagName\" setTo=\"\" message=\"tm-add-tag\">\n<$list filter=\"[tags[]!is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n<hr>\n<$list filter=\"[tags[]is[system]search:title{$:/temp/NewTagName}sort[]]\">\n{{||$:/core/ui/Components/tag-link}}\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n</$fieldmangler>\n</div>"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[is[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\"/>\n"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-popup-handle\"/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\\end\n<div class=<<frame-classes>>>\n<$set name=\"storyTiddler\" value=<<currentTiddler>>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" message=\"tm-save-tiddler\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n</$list>\n</$keyboard>\n</$keyboard>\n</$set>\n</div>\n"
        },
        "$:/core/ui/Buttons/cancel": {
            "title": "$:/core/ui/Buttons/cancel",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
            "description": "{{$:/language/Buttons/Cancel/Hint}}",
            "text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save": {
            "title": "$:/core/ui/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "text": "<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param={{$:/temp/NewTagName}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/NewTagName\"/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{$:/temp/newfieldname}} $value={{$:/temp/newfieldvalue}}/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldname\"/>\n<$action-deletetiddler $tiddler=\"$:/temp/newfieldvalue\"/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button>\n</$fieldmangler>\n"
        },
        "$:/core/ui/EditorToolbar/bold": {
            "title": "$:/core/ui/EditorToolbar/bold",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/bold",
            "caption": "{{$:/language/Buttons/Bold/Caption}}",
            "description": "{{$:/language/Buttons/Bold/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((bold))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/clear-dropdown": {
            "title": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/clear": {
            "title": "$:/core/ui/EditorToolbar/clear",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/erase",
            "caption": "{{$:/language/Buttons/Clear/Caption}}",
            "description": "{{$:/language/Buttons/Clear/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/editor-height-dropdown": {
            "title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
        },
        "$:/core/ui/EditorToolbar/editor-height": {
            "title": "$:/core/ui/EditorToolbar/editor-height",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/fixed-height",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
            "description": "{{$:/language/Buttons/EditorHeight/Hint}}",
            "condition": "[<targetTiddler>!is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/excise-dropdown": {
            "title": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=<<qualify \"$:/state/Excise/NewTitle\">>\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/excise": {
            "title": "$:/core/ui/EditorToolbar/excise",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/excise",
            "caption": "{{$:/language/Buttons/Excise/Caption}}",
            "description": "{{$:/language/Buttons/Excise/Hint}}",
            "condition": "[<targetTiddler>!is[image]]",
            "shortcuts": "((excise))",
            "dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/heading-1": {
            "title": "$:/core/ui/EditorToolbar/heading-1",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-1",
            "caption": "{{$:/language/Buttons/Heading1/Caption}}",
            "description": "{{$:/language/Buttons/Heading1/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((heading-1))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-2": {
            "title": "$:/core/ui/EditorToolbar/heading-2",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-2",
            "caption": "{{$:/language/Buttons/Heading2/Caption}}",
            "description": "{{$:/language/Buttons/Heading2/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-2))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-3": {
            "title": "$:/core/ui/EditorToolbar/heading-3",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-3",
            "caption": "{{$:/language/Buttons/Heading3/Caption}}",
            "description": "{{$:/language/Buttons/Heading3/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-3))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/core/ui/EditorToolbar/heading-4",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-4",
            "caption": "{{$:/language/Buttons/Heading4/Caption}}",
            "description": "{{$:/language/Buttons/Heading4/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-4))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/core/ui/EditorToolbar/heading-5",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-5",
            "caption": "{{$:/language/Buttons/Heading5/Caption}}",
            "description": "{{$:/language/Buttons/Heading5/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-5))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/core/ui/EditorToolbar/heading-6",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-6",
            "caption": "{{$:/language/Buttons/Heading6/Caption}}",
            "description": "{{$:/language/Buttons/Heading6/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-6))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/italic": {
            "title": "$:/core/ui/EditorToolbar/italic",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/italic",
            "caption": "{{$:/language/Buttons/Italic/Caption}}",
            "description": "{{$:/language/Buttons/Italic/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((italic))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/line-width-dropdown": {
            "title": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/line-width": {
            "title": "$:/core/ui/EditorToolbar/line-width",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/line-width",
            "caption": "{{$:/language/Buttons/LineWidth/Caption}}",
            "description": "{{$:/language/Buttons/LineWidth/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
        },
        "$:/core/ui/EditorToolbar/link-dropdown": {
            "title": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define link-actions()\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"make-link\"\n\ttext={{$(linkTiddler)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<searchTiddler>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<linkTiddler>>\n/>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\">\n\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/link": {
            "title": "$:/core/ui/EditorToolbar/link",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/link",
            "caption": "{{$:/language/Buttons/Link/Caption}}",
            "description": "{{$:/language/Buttons/Link/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((link))",
            "dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/list-bullet": {
            "title": "$:/core/ui/EditorToolbar/list-bullet",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-bullet",
            "caption": "{{$:/language/Buttons/ListBullet/Caption}}",
            "description": "{{$:/language/Buttons/ListBullet/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-bullet))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-number": {
            "title": "$:/core/ui/EditorToolbar/list-number",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-number",
            "caption": "{{$:/language/Buttons/ListNumber/Caption}}",
            "description": "{{$:/language/Buttons/ListNumber/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-number))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-block": {
            "title": "$:/core/ui/EditorToolbar/mono-block",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-block",
            "caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
            "description": "{{$:/language/Buttons/MonoBlock/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((mono-block))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-line": {
            "title": "$:/core/ui/EditorToolbar/mono-line",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-line",
            "caption": "{{$:/language/Buttons/MonoLine/Caption}}",
            "description": "{{$:/language/Buttons/MonoLine/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((mono-line))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/more-dropdown": {
            "title": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/more": {
            "title": "$:/core/ui/EditorToolbar/more",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/down-arrow",
            "caption": "{{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "condition": "[<targetTiddler>]",
            "dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/opacity-dropdown": {
            "title": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/opacity": {
            "title": "$:/core/ui/EditorToolbar/opacity",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/opacity",
            "caption": "{{$:/language/Buttons/Opacity/Caption}}",
            "description": "{{$:/language/Buttons/Opacity/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
        },
        "$:/core/ui/EditorToolbar/paint-dropdown": {
            "title": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/paint": {
            "title": "$:/core/ui/EditorToolbar/paint",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/paint",
            "caption": "{{$:/language/Buttons/Paint/Caption}}",
            "description": "{{$:/language/Buttons/Paint/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/picture-dropdown": {
            "title": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/picture": {
            "title": "$:/core/ui/EditorToolbar/picture",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/picture",
            "caption": "{{$:/language/Buttons/Picture/Caption}}",
            "description": "{{$:/language/Buttons/Picture/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((picture))",
            "dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/preview-type-dropdown": {
            "title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
            "text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/preview-type": {
            "title": "$:/core/ui/EditorToolbar/preview-type",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/chevron-down",
            "caption": "{{$:/language/Buttons/PreviewType/Caption}}",
            "description": "{{$:/language/Buttons/PreviewType/Hint}}",
            "condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
            "button-classes": "tc-text-editor-toolbar-item-adjunct",
            "dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
        },
        "$:/core/ui/EditorToolbar/preview": {
            "title": "$:/core/ui/EditorToolbar/preview",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/preview-open",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/Preview/Caption}}",
            "description": "{{$:/language/Buttons/Preview/Hint}}",
            "condition": "[<targetTiddler>]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((preview))",
            "text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/quote": {
            "title": "$:/core/ui/EditorToolbar/quote",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/quote",
            "caption": "{{$:/language/Buttons/Quote/Caption}}",
            "description": "{{$:/language/Buttons/Quote/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((quote))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/size-dropdown": {
            "title": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> &times; <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/size": {
            "title": "$:/core/ui/EditorToolbar/size",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/size",
            "caption": "{{$:/language/Buttons/Size/Caption}}",
            "description": "{{$:/language/Buttons/Size/Hint}}",
            "condition": "[<targetTiddler>is[image]]",
            "dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/stamp-dropdown": {
            "title": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$view tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" mode=\"inline\"/>\n\n</$view>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
        },
        "$:/core/ui/EditorToolbar/stamp": {
            "title": "$:/core/ui/EditorToolbar/stamp",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/stamp",
            "caption": "{{$:/language/Buttons/Stamp/Caption}}",
            "description": "{{$:/language/Buttons/Stamp/Hint}}",
            "condition": "[<targetTiddler>!is[image]]",
            "shortcuts": "((stamp))",
            "dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/strikethrough": {
            "title": "$:/core/ui/EditorToolbar/strikethrough",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/strikethrough",
            "caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
            "description": "{{$:/language/Buttons/Strikethrough/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((strikethrough))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/subscript": {
            "title": "$:/core/ui/EditorToolbar/subscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/subscript",
            "caption": "{{$:/language/Buttons/Subscript/Caption}}",
            "description": "{{$:/language/Buttons/Subscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((subscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/superscript": {
            "title": "$:/core/ui/EditorToolbar/superscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/superscript",
            "caption": "{{$:/language/Buttons/Superscript/Caption}}",
            "description": "{{$:/language/Buttons/Superscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((superscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/underline": {
            "title": "$:/core/ui/EditorToolbar/underline",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/underline",
            "caption": "{{$:/language/Buttons/Underline/Caption}}",
            "description": "{{$:/language/Buttons/Underline/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((underline))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
        },
        "$:/core/Filters/AllTags": {
            "title": "$:/core/Filters/AllTags",
            "tags": "$:/tags/Filter",
            "filter": "[tags[]!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTags}}",
            "text": ""
        },
        "$:/core/Filters/AllTiddlers": {
            "title": "$:/core/Filters/AllTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/Drafts": {
            "title": "$:/core/Filters/Drafts",
            "tags": "$:/tags/Filter",
            "filter": "[has[draft.of]sort[title]]",
            "description": "{{$:/language/Filters/Drafts}}",
            "text": ""
        },
        "$:/core/Filters/Missing": {
            "title": "$:/core/Filters/Missing",
            "tags": "$:/tags/Filter",
            "filter": "[all[missing]sort[title]]",
            "description": "{{$:/language/Filters/Missing}}",
            "text": ""
        },
        "$:/core/Filters/Orphans": {
            "title": "$:/core/Filters/Orphans",
            "tags": "$:/tags/Filter",
            "filter": "[all[orphans]sort[title]]",
            "description": "{{$:/language/Filters/Orphans}}",
            "text": ""
        },
        "$:/core/Filters/OverriddenShadowTiddlers": {
            "title": "$:/core/Filters/OverriddenShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[shadow]]",
            "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentSystemTiddlers": {
            "title": "$:/core/Filters/RecentSystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentSystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentTiddlers": {
            "title": "$:/core/Filters/RecentTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/SystemTags": {
            "title": "$:/core/Filters/SystemTags",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTags}}",
            "text": ""
        },
        "$:/core/Filters/SystemTiddlers": {
            "title": "$:/core/Filters/SystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/TypedTiddlers": {
            "title": "$:/core/Filters/TypedTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Filters/TypedTiddlers}}",
            "text": ""
        },
        "$:/core/ui/ImportListing": {
            "title": "$:/core/ui/ImportListing",
            "text": "\\define lingo-base() $:/language/Import/\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n<table>\n<tbody>\n<tr>\n<th>\n<<lingo Listing/Select/Caption>>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}}&nbsp;<$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>>>\n<$transclude subtiddler=<<payloadTiddler>> mode=\"block\"/>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</div>"
        },
        "$:/core/ui/MissingTemplate": {
            "title": "$:/core/ui/MissingTemplate",
            "text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
        },
        "$:/core/ui/MoreSideBar/All": {
            "title": "$:/core/ui/MoreSideBar/All",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/All/Caption}}",
            "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Drafts": {
            "title": "$:/core/ui/MoreSideBar/Drafts",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Drafts/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Missing": {
            "title": "$:/core/ui/MoreSideBar/Missing",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Missing/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Orphans": {
            "title": "$:/core/ui/MoreSideBar/Orphans",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Orphans/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Recent": {
            "title": "$:/core/ui/MoreSideBar/Recent",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Shadows": {
            "title": "$:/core/ui/MoreSideBar/Shadows",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Shadows/Caption}}",
            "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/System": {
            "title": "$:/core/ui/MoreSideBar/System",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/System/Caption}}",
            "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Tags": {
            "title": "$:/core/ui/MoreSideBar/Tags",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Tags/Caption}}",
            "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
        },
        "$:/core/ui/MoreSideBar/Types": {
            "title": "$:/core/ui/MoreSideBar/Types",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Types/Caption}}",
            "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
        },
        "$:/core/ui/Buttons/advanced-search": {
            "title": "$:/core/ui/Buttons/advanced-search",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
            "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/close-all": {
            "title": "$:/core/ui/Buttons/close-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
            "description": "{{$:/language/Buttons/CloseAll/Hint}}",
            "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/control-panel": {
            "title": "$:/core/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/encryption": {
            "title": "$:/core/ui/Buttons/encryption",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
            "description": "{{$:/language/Buttons/Encryption/Hint}}",
            "text": "<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>"
        },
        "$:/core/ui/Buttons/export-page": {
            "title": "$:/core/ui/Buttons/export-page",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
            "description": "{{$:/language/Buttons/ExportPage/Hint}}",
            "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
        },
        "$:/core/ui/Buttons/fold-all": {
            "title": "$:/core/ui/Buttons/fold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
            "description": "{{$:/language/Buttons/FoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/full-screen": {
            "title": "$:/core/ui/Buttons/full-screen",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
            "description": "{{$:/language/Buttons/FullScreen/Hint}}",
            "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/home": {
            "title": "$:/core/ui/Buttons/home",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
            "description": "{{$:/language/Buttons/Home/Hint}}",
            "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/import": {
            "title": "$:/core/ui/Buttons/import",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
            "description": "{{$:/language/Buttons/Import/Hint}}",
            "text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
        },
        "$:/core/ui/Buttons/language": {
            "title": "$:/core/ui/Buttons/language",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
            "description": "{{$:/language/Buttons/Language/Hint}}",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down tc-drop-down-language-chooser\">\n<$linkcatcher to=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$link>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/language\" text=<<currentTiddler>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/language\" text=<<currentTiddler>>>\n&nbsp;\n</$reveal>\n</span>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/core/ui/Buttons/more-page-actions",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-image": {
            "title": "$:/core/ui/Buttons/new-image",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
            "description": "{{$:/language/Buttons/NewImage/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=\"image/jpeg\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/new-journal": {
            "title": "$:/core/ui/Buttons/new-journal",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
            "description": "{{$:/language/Buttons/NewJournal/Hint}}",
            "text": "\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=\"$(journalTags)$\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<<journalButton>>\n</$set></$set>"
        },
        "$:/core/ui/Buttons/new-tiddler": {
            "title": "$:/core/ui/Buttons/new-tiddler",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "text": "<$button message=\"tm-new-tiddler\" tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/palette": {
            "title": "$:/core/ui/Buttons/palette",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
            "description": "{{$:/language/Buttons/Palette/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/refresh": {
            "title": "$:/core/ui/Buttons/refresh",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
            "description": "{{$:/language/Buttons/Refresh/Hint}}",
            "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save-wiki": {
            "title": "$:/core/ui/Buttons/save-wiki",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
            "description": "{{$:/language/Buttons/SaveWiki/Hint}}",
            "text": "<$button message=\"tm-save-wiki\" param={{$:/config/SaveWikiButton/Template}} tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
        },
        "$:/core/ui/Buttons/storyview": {
            "title": "$:/core/ui/Buttons/storyview",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
            "description": "{{$:/language/Buttons/StoryView/Hint}}",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/view\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$link to=<<storyview>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/view\" text=<<storyview>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/view\" text=<<storyview>>>\n&nbsp;\n</$reveal>\n</span>\n<$transclude tiddler=<<icon>>/>\n<$text text=<<storyview>>/></$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/tag-manager": {
            "title": "$:/core/ui/Buttons/tag-manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
            "description": "{{$:/language/Buttons/TagManager/Hint}}",
            "text": "\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/theme": {
            "title": "$:/core/ui/Buttons/theme",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
            "description": "{{$:/language/Buttons/Theme/Hint}}",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\" variable=\"themeTitle\">\n<$link to=<<themeTitle>>>\n<span class=\"tc-drop-down-bullet\">\n<$reveal type=\"match\" state=\"$:/theme\" text=<<themeTitle>>>\n&bull;\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/theme\" text=<<themeTitle>>>\n&nbsp;\n</$reveal>\n</span>\n<$view tiddler=<<themeTitle>> field=\"name\"/>\n</$link>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>"
        },
        "$:/core/ui/Buttons/unfold-all": {
            "title": "$:/core/ui/Buttons/unfold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
            "description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$reveal>\n</$list>\n</div>\n\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
        },
        "$:/core/ui/PageTemplate/alerts": {
            "title": "$:/core/ui/PageTemplate/alerts",
            "tags": "$:/tags/PageTemplate",
            "text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
        },
        "$:/core/ui/PageTemplate/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[has[plugin-type]haschanged[]!plugin-type[import]limit[1]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/PageTemplate/sidebar": {
            "title": "$:/core/ui/PageTemplate/sidebar",
            "tags": "$:/tags/PageTemplate",
            "text": "<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n\n<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n\n{{||$:/core/ui/PageTemplate/pagecontrols}}\n\n<$transclude tiddler=\"$:/core/ui/SideBarLists\" mode=\"inline\"/>\n\n</$reveal>\n\n</div>\n\n</$scrollable>"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template=\"$:/core/ui/ViewTemplate\" editTemplate=\"$:/core/ui/EditTemplate\" storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
        },
        "$:/core/ui/PageTemplate/topleftbar": {
            "title": "$:/core/ui/PageTemplate/topleftbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate/toprightbar": {
            "title": "$:/core/ui/PageTemplate/toprightbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "text": "\\define containerClasses()\ntc-page-container tc-page-view-$(themeTitle)$ tc-language-$(languageTitle)$\n\\end\n\n<$importvariables filter=\"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\">\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"themeTitle\" value={{$:/view}}>\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$set name=\"currentTiddler\" value=\"\">\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}}>\n\n<$dropzone>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$importvariables>\n"
        },
        "$:/core/ui/PluginInfo": {
            "title": "$:/core/ui/PluginInfo",
            "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n"
        },
        "$:/core/ui/SearchResults": {
            "title": "$:/core/ui/SearchResults",
            "text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
        },
        "$:/core/ui/SideBar/More": {
            "title": "$:/core/ui/SideBar/More",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/More/Caption}}",
            "text": "<div class=\"tc-more-sidebar\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Tags\" \"$:/state/tab/moresidebar\" \"tc-vertical\">>\n</div>\n"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\define lingo-base() $:/language/CloseAll/\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" storyview=\"pop\">\n\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">&times;</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\n\n</$list>\n\n<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\n"
        },
        "$:/core/ui/SideBar/Recent": {
            "title": "$:/core/ui/SideBar/Recent",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/SideBar/Tools": {
            "title": "$:/core/ui/SideBar/Tools",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/SideBarLists": {
            "title": "$:/core/ui/SideBarLists",
            "text": "<div class=\"tc-sidebar-lists\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search{$(searchTiddler)$}]\"/>\"\"\">\n{{$:/core/images/down-arrow}} {{$:/language/Search/Matches}}\n</$set>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n{{$:/core/ui/SearchResults}}\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" />\n\n</div>\n"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/icon/$title$\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/icon/$title$\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$title$!!icon\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define qualifyTitle(title)\n$title$$(currentTiddler)$\n\\end\n\\define toggleButton(state)\n<$reveal state=\"$state$\" type=\"match\" text=\"closed\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal state=\"$state$\" type=\"match\" text=\"open\" default=\"closed\">\n<$button set=\"$state$\" setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td><$transclude tiddler=\"$:/core/ui/TagTemplate\"/></td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state=<<qualifyTitle \"$:/state/tag-manager/\">> /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal state=<<qualifyTitle \"$:/state/tag-manager/\">> type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td>\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-tag-label\" style=<<tag-styles>>>\n<$transclude tiddler={{!!icon}}/> <$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\"><$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list> \n<hr>\n<$list filter=\"[all[current]tagging[]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</$reveal>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette)\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}}/>\n</span>\n\\end\n\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}}/>\n"
        },
        "$:/core/ui/TiddlerFieldTemplate": {
            "title": "$:/core/ui/TiddlerFieldTemplate",
            "text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
        },
        "$:/core/ui/TiddlerFields": {
            "title": "$:/core/ui/TiddlerFields",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced": {
            "title": "$:/core/ui/TiddlerInfo/Advanced",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
            "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Fields": {
            "title": "$:/core/ui/TiddlerInfo/Fields",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
            "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/List": {
            "title": "$:/core/ui/TiddlerInfo/List",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/List/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Listed": {
            "title": "$:/core/ui/TiddlerInfo/Listed",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/References": {
            "title": "$:/core/ui/TiddlerInfo/References",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/References/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Tagging": {
            "title": "$:/core/ui/TiddlerInfo/Tagging",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Tools": {
            "title": "$:/core/ui/TiddlerInfo/Tools",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo": {
            "title": "$:/core/ui/TiddlerInfo",
            "text": "<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$reveal>\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"no\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$reveal>\n"
        },
        "$:/core/ui/UntaggedTemplate": {
            "title": "$:/core/ui/UntaggedTemplate",
            "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/body": {
            "title": "$:/core/ui/ViewTemplate/body",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/classic": {
            "title": "$:/core/ui/ViewTemplate/classic",
            "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/import": {
            "title": "$:/core/ui/ViewTemplate/import",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define lingo-base() $:/language/Import/\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n{{||$:/core/ui/ImportListing}}\n\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n\n{{||$:/core/ui/TiddlerInfo/Advanced/PluginInfo}}\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}/>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo\"/>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate/unfold": {
            "title": "$:/core/ui/ViewTemplate/unfold",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" state=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define frame-classes()\ntc-tiddler-frame tc-tiddler-view-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$ $(tiddlerTagClasses)$\n\\end\n\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n<$set name=\"storyTiddler\" value=<<currentTiddler>>><$set name=\"tiddlerInfoState\" value=<<qualify \"$:/state/popup/tiddler-info\">>><$tiddler tiddler=<<currentTiddler>>><div class=<<frame-classes>>><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$tiddler></$set></$set>\n"
        },
        "$:/core/ui/Buttons/clone": {
            "title": "$:/core/ui/Buttons/clone",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
            "description": "{{$:/language/Buttons/Clone/Hint}}",
            "text": "<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Clone/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close-others": {
            "title": "$:/core/ui/Buttons/close-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
            "description": "{{$:/language/Buttons/CloseOthers/Hint}}",
            "text": "<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseOthers/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close": {
            "title": "$:/core/ui/Buttons/close",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
            "description": "{{$:/language/Buttons/Close/Hint}}",
            "text": "<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Close/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/edit": {
            "title": "$:/core/ui/Buttons/edit",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
            "description": "{{$:/language/Buttons/Edit/Hint}}",
            "text": "<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Edit/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/core/ui/Buttons/export-tiddler",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
            "description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
            "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
        },
        "$:/core/ui/Buttons/fold-bar": {
            "title": "$:/core/ui/Buttons/fold-bar",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/language/Buttons/Fold/FoldBar/Caption}}",
            "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
            "text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
        },
        "$:/core/ui/Buttons/fold-others": {
            "title": "$:/core/ui/Buttons/fold-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
            "description": "{{$:/language/Buttons/FoldOthers/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldOthers/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/fold": {
            "title": "$:/core/ui/Buttons/fold",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
            "description": "{{$:/language/Buttons/Fold/Hint}}",
            "text": "<$reveal type=\"nomatch\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal><$reveal type=\"match\" state=<<folded-state>> text=\"hide\" default=\"show\"><$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button></$reveal>"
        },
        "$:/core/ui/Buttons/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Info/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/core/ui/Buttons/more-tiddler-actions",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-here": {
            "title": "$:/core/ui/Buttons/new-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
            "description": "{{$:/language/Buttons/NewHere/Hint}}",
            "text": "\\define newHereButtonTags()\n[[$(currentTiddler)$]]\n\\end\n\\define newHereButton()\n<$button tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<newHereButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>"
        },
        "$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/core/ui/Buttons/new-journal-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
            "description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
            "text": "\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<now \"$(journalTitleTemplate)$\">> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournalHere/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set></$set></$set>"
        },
        "$:/core/ui/Buttons/open-window": {
            "title": "$:/core/ui/Buttons/open-window",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
            "description": "{{$:/language/Buttons/OpenWindow/Hint}}",
            "text": "<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/OpenWindow/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permalink": {
            "title": "$:/core/ui/Buttons/permalink",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
            "description": "{{$:/language/Buttons/Permalink/Hint}}",
            "text": "<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permalink/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permaview": {
            "title": "$:/core/ui/Buttons/permaview",
            "tags": "$:/tags/ViewToolbar $:/tags/PageControls",
            "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
            "description": "{{$:/language/Buttons/Permaview/Hint}}",
            "text": "<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Permaview/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/DefaultTiddlers": {
            "title": "$:/DefaultTiddlers",
            "text": "GettingStarted\n"
        },
        "$:/temp/advancedsearch": {
            "title": "$:/temp/advancedsearch",
            "text": ""
        },
        "$:/snippets/allfields": {
            "title": "$:/snippets/allfields",
            "text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
        },
        "$:/config/AnimationDuration": {
            "title": "$:/config/AnimationDuration",
            "text": "400"
        },
        "$:/config/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#444"
        },
        "$:/config/BitmapEditor/ImageSizes": {
            "title": "$:/config/BitmapEditor/ImageSizes",
            "text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3px"
        },
        "$:/config/BitmapEditor/LineWidths": {
            "title": "$:/config/BitmapEditor/LineWidths",
            "text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
        },
        "$:/config/BitmapEditor/Opacities": {
            "title": "$:/config/BitmapEditor/Opacities",
            "text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
        },
        "$:/config/BitmapEditor/Opacity": {
            "title": "$:/config/BitmapEditor/Opacity",
            "text": "1.0"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/config/EditTemplateFields/Visibility/title": {
            "title": "$:/config/EditTemplateFields/Visibility/title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/tags": {
            "title": "$:/config/EditTemplateFields/Visibility/tags",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/text": {
            "title": "$:/config/EditTemplateFields/Visibility/text",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/creator": {
            "title": "$:/config/EditTemplateFields/Visibility/creator",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/created": {
            "title": "$:/config/EditTemplateFields/Visibility/created",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modified": {
            "title": "$:/config/EditTemplateFields/Visibility/modified",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modifier": {
            "title": "$:/config/EditTemplateFields/Visibility/modifier",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/type": {
            "title": "$:/config/EditTemplateFields/Visibility/type",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.title": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.of": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.of",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/revision": {
            "title": "$:/config/EditTemplateFields/Visibility/revision",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/bag": {
            "title": "$:/config/EditTemplateFields/Visibility/bag",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
            "text": "hide"
        },
        "$:/config/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpeg": {
            "title": "$:/config/EditorTypeMappings/image/jpeg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpg": {
            "title": "$:/config/EditorTypeMappings/image/jpg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/png": {
            "title": "$:/config/EditorTypeMappings/image/png",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/x-icon": {
            "title": "$:/config/EditorTypeMappings/image/x-icon",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "text"
        },
        "$:/config/MissingLinks": {
            "title": "$:/config/MissingLinks",
            "text": "yes"
        },
        "$:/config/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "http://tiddlywiki.com/library/v5.1.13/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
        },
        "$:/config/Navigation/openLinkFromInsideRiver": {
            "title": "$:/config/Navigation/openLinkFromInsideRiver",
            "text": "below"
        },
        "$:/config/Navigation/openLinkFromOutsideRiver": {
            "title": "$:/config/Navigation/openLinkFromOutsideRiver",
            "text": "top"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
            "text": "hide"
        },
        "$:/config/Performance/Instrumentation": {
            "title": "$:/config/Performance/Instrumentation",
            "text": "no"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/ShortcutInfo/bold": {
            "title": "$:/config/ShortcutInfo/bold",
            "text": "{{$:/language/Buttons/Bold/Hint}}"
        },
        "$:/config/ShortcutInfo/cancel-edit-tiddler": {
            "title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
            "text": "{{$:/language/Buttons/Cancel/Hint}}"
        },
        "$:/config/ShortcutInfo/excise": {
            "title": "$:/config/ShortcutInfo/excise",
            "text": "{{$:/language/Buttons/Excise/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-1": {
            "title": "$:/config/ShortcutInfo/heading-1",
            "text": "{{$:/language/Buttons/Heading1/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-2": {
            "title": "$:/config/ShortcutInfo/heading-2",
            "text": "{{$:/language/Buttons/Heading2/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-3": {
            "title": "$:/config/ShortcutInfo/heading-3",
            "text": "{{$:/language/Buttons/Heading3/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-4": {
            "title": "$:/config/ShortcutInfo/heading-4",
            "text": "{{$:/language/Buttons/Heading4/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-5": {
            "title": "$:/config/ShortcutInfo/heading-5",
            "text": "{{$:/language/Buttons/Heading5/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-6": {
            "title": "$:/config/ShortcutInfo/heading-6",
            "text": "{{$:/language/Buttons/Heading6/Hint}}"
        },
        "$:/config/ShortcutInfo/italic": {
            "title": "$:/config/ShortcutInfo/italic",
            "text": "{{$:/language/Buttons/Italic/Hint}}"
        },
        "$:/config/ShortcutInfo/link": {
            "title": "$:/config/ShortcutInfo/link",
            "text": "{{$:/language/Buttons/Link/Hint}}"
        },
        "$:/config/ShortcutInfo/list-bullet": {
            "title": "$:/config/ShortcutInfo/list-bullet",
            "text": "{{$:/language/Buttons/ListBullet/Hint}}"
        },
        "$:/config/ShortcutInfo/list-number": {
            "title": "$:/config/ShortcutInfo/list-number",
            "text": "{{$:/language/Buttons/ListNumber/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-block": {
            "title": "$:/config/ShortcutInfo/mono-block",
            "text": "{{$:/language/Buttons/MonoBlock/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-line": {
            "title": "$:/config/ShortcutInfo/mono-line",
            "text": "{{$:/language/Buttons/MonoLine/Hint}}"
        },
        "$:/config/ShortcutInfo/picture": {
            "title": "$:/config/ShortcutInfo/picture",
            "text": "{{$:/language/Buttons/Picture/Hint}}"
        },
        "$:/config/ShortcutInfo/preview": {
            "title": "$:/config/ShortcutInfo/preview",
            "text": "{{$:/language/Buttons/Preview/Hint}}"
        },
        "$:/config/ShortcutInfo/quote": {
            "title": "$:/config/ShortcutInfo/quote",
            "text": "{{$:/language/Buttons/Quote/Hint}}"
        },
        "$:/config/ShortcutInfo/save-tiddler": {
            "title": "$:/config/ShortcutInfo/save-tiddler",
            "text": "{{$:/language/Buttons/Save/Hint}}"
        },
        "$:/config/ShortcutInfo/stamp": {
            "title": "$:/config/ShortcutInfo/stamp",
            "text": "{{$:/language/Buttons/Stamp/Hint}}"
        },
        "$:/config/ShortcutInfo/strikethrough": {
            "title": "$:/config/ShortcutInfo/strikethrough",
            "text": "{{$:/language/Buttons/Strikethrough/Hint}}"
        },
        "$:/config/ShortcutInfo/subscript": {
            "title": "$:/config/ShortcutInfo/subscript",
            "text": "{{$:/language/Buttons/Subscript/Hint}}"
        },
        "$:/config/ShortcutInfo/superscript": {
            "title": "$:/config/ShortcutInfo/superscript",
            "text": "{{$:/language/Buttons/Superscript/Hint}}"
        },
        "$:/config/ShortcutInfo/underline": {
            "title": "$:/config/ShortcutInfo/underline",
            "text": "{{$:/language/Buttons/Underline/Hint}}"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
        },
        "$:/config/TextEditor/EditorHeight/Height": {
            "title": "$:/config/TextEditor/EditorHeight/Height",
            "text": "400px"
        },
        "$:/config/TextEditor/EditorHeight/Mode": {
            "title": "$:/config/TextEditor/EditorHeight/Mode",
            "text": "auto"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/config/Tiddlers/TitleLinks": {
            "title": "$:/config/Tiddlers/TitleLinks",
            "text": "no"
        },
        "$:/config/Toolbar/ButtonClass": {
            "title": "$:/config/Toolbar/ButtonClass",
            "text": "tc-btn-invisible"
        },
        "$:/config/Toolbar/Icons": {
            "title": "$:/config/Toolbar/Icons",
            "text": "yes"
        },
        "$:/config/Toolbar/Text": {
            "title": "$:/config/Toolbar/Text",
            "text": "no"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
            "text": "show"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
            "text": "hide"
        },
        "$:/config/shortcuts-mac/bold": {
            "title": "$:/config/shortcuts-mac/bold",
            "text": "meta-B"
        },
        "$:/config/shortcuts-mac/italic": {
            "title": "$:/config/shortcuts-mac/italic",
            "text": "meta-I"
        },
        "$:/config/shortcuts-mac/underline": {
            "title": "$:/config/shortcuts-mac/underline",
            "text": "meta-U"
        },
        "$:/config/shortcuts-not-mac/bold": {
            "title": "$:/config/shortcuts-not-mac/bold",
            "text": "ctrl-B"
        },
        "$:/config/shortcuts-not-mac/italic": {
            "title": "$:/config/shortcuts-not-mac/italic",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-not-mac/underline": {
            "title": "$:/config/shortcuts-not-mac/underline",
            "text": "ctrl-U"
        },
        "$:/config/shortcuts/cancel-edit-tiddler": {
            "title": "$:/config/shortcuts/cancel-edit-tiddler",
            "text": "escape"
        },
        "$:/config/shortcuts/excise": {
            "title": "$:/config/shortcuts/excise",
            "text": "ctrl-E"
        },
        "$:/config/shortcuts/heading-1": {
            "title": "$:/config/shortcuts/heading-1",
            "text": "ctrl-1"
        },
        "$:/config/shortcuts/heading-2": {
            "title": "$:/config/shortcuts/heading-2",
            "text": "ctrl-2"
        },
        "$:/config/shortcuts/heading-3": {
            "title": "$:/config/shortcuts/heading-3",
            "text": "ctrl-3"
        },
        "$:/config/shortcuts/heading-4": {
            "title": "$:/config/shortcuts/heading-4",
            "text": "ctrl-4"
        },
        "$:/config/shortcuts/heading-5": {
            "title": "$:/config/shortcuts/heading-5",
            "text": "ctrl-5"
        },
        "$:/config/shortcuts/heading-6": {
            "title": "$:/config/shortcuts/heading-6",
            "text": "ctrl-6"
        },
        "$:/config/shortcuts/link": {
            "title": "$:/config/shortcuts/link",
            "text": "ctrl-L"
        },
        "$:/config/shortcuts/list-bullet": {
            "title": "$:/config/shortcuts/list-bullet",
            "text": "ctrl-shift-L"
        },
        "$:/config/shortcuts/list-number": {
            "title": "$:/config/shortcuts/list-number",
            "text": "ctrl-shift-N"
        },
        "$:/config/shortcuts/mono-block": {
            "title": "$:/config/shortcuts/mono-block",
            "text": "ctrl-shift-M"
        },
        "$:/config/shortcuts/mono-line": {
            "title": "$:/config/shortcuts/mono-line",
            "text": "ctrl-M"
        },
        "$:/config/shortcuts/picture": {
            "title": "$:/config/shortcuts/picture",
            "text": "ctrl-shift-I"
        },
        "$:/config/shortcuts/preview": {
            "title": "$:/config/shortcuts/preview",
            "text": "alt-P"
        },
        "$:/config/shortcuts/quote": {
            "title": "$:/config/shortcuts/quote",
            "text": "ctrl-Q"
        },
        "$:/config/shortcuts/save-tiddler": {
            "title": "$:/config/shortcuts/save-tiddler",
            "text": "ctrl+enter"
        },
        "$:/config/shortcuts/stamp": {
            "title": "$:/config/shortcuts/stamp",
            "text": "ctrl-S"
        },
        "$:/config/shortcuts/strikethrough": {
            "title": "$:/config/shortcuts/strikethrough",
            "text": "ctrl-T"
        },
        "$:/config/shortcuts/subscript": {
            "title": "$:/config/shortcuts/subscript",
            "text": "ctrl-shift-B"
        },
        "$:/config/shortcuts/superscript": {
            "title": "$:/config/shortcuts/superscript",
            "text": "ctrl-shift-P"
        },
        "$:/config/WikiParserRules/Inline/wikilink": {
            "title": "$:/config/WikiParserRules/Inline/wikilink",
            "text": "enable"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch(colour)\n<$set name=\"swatchColour\" value={{##$colour$}}>\n<div class=\"tc-swatch\" style=<<swatchStyle>>/>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\">\n<<swatch foreground>>\n<<swatch background>>\n<<swatch muted-foreground>>\n<<swatch primary>>\n<<swatch page-background>>\n<<swatch tab-background>>\n<<swatch tiddler-info-background>>\n</div>\n"
        },
        "$:/snippets/download-wiki-button": {
            "title": "$:/snippets/download-wiki-button",
            "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
        },
        "$:/language": {
            "title": "$:/language",
            "text": "$:/languages/en-GB"
        },
        "$:/snippets/languageswitcher": {
            "title": "$:/snippets/languageswitcher",
            "text": "{{$:/language/ControlPanel/Basics/Language/Prompt}} <$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/core/macros/CSS": {
            "title": "$:/core/macros/CSS",
            "tags": "$:/tags/Macro",
            "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"/></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n  -webkit-box-shadow: $shadow$;\n     -moz-box-shadow: $shadow$;\n          box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n  -webkit-filter: $filter$;\n     -moz-filter: $filter$;\n          filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n  -webkit-transition: $transition$;\n     -moz-transition: $transition$;\n          transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n  -webkit-transform-origin: $origin$;\n     -moz-transform-origin: $origin$;\n          transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n"
        },
        "$:/core/macros/colour-picker": {
            "title": "$:/core/macros/colour-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<div style=\"background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/> \n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
        },
        "$:/core/macros/export": {
            "title": "$:/core/macros/export",
            "tags": "$:/tags/Macro",
            "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
        },
        "$:/core/macros/image-picker": {
            "title": "$:/core/macros/image-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define image-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n\n$actions$\n\n<$transclude tiddler=<<imageTitle>>/>\n\n</$button>\n\\end\n\n\\define image-picker(actions,subfilter:\"\")\n<div class=\"tc-image-chooser\">\n\n<$list filter=\"[all[shadows+tiddlers]is[image]$subfilter$!has[draft.of]] -[type[application/pdf]] +[sort[title]]\" variable=\"imageTitle\">\n\n<$macrocall $name=\"image-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n\n</$list>\n\n</div>\n\n\\end\n\n"
        },
        "$:/core/macros/lingo": {
            "title": "$:/core/macros/lingo",
            "tags": "$:/tags/Macro",
            "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
        },
        "$:/core/macros/list": {
            "title": "$:/core/macros/list",
            "tags": "$:/tags/Macro",
            "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\")\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\">\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbnails": {
            "title": "$:/core/macros/thumbnails",
            "tags": "$:/tags/Macro",
            "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
        },
        "$:/core/macros/timeline": {
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "title": "$:/core/macros/timeline",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define timeline-title()\n<!-- Override this macro with a global macro \n     of the same name if you need to change \n     how titles are displayed on the timeline \n     -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}>\n<<timeline-title>>\n</$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
        },
        "$:/core/macros/toc": {
            "title": "$:/core/macros/toc",
            "tags": "$:/tags/Macro",
            "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$set>\n\\end\n\n\\define toc-body(rootTag,tag,sort:\"\",itemClassFilter)\n<ol class=\"tc-toc\">\n<$list filter=\"\"\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\"\"\">\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n<<toc-caption>>\n</$list>\n<$list filter=\"\"\"[all[current]] -[[$rootTag$]]\"\"\">\n<$macrocall $name=\"toc-body\" rootTag=\"\"\"$rootTag$\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$list>\n</li>\n</$set>\n</$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter)\n<<toc-body rootTag:\"\"\"$tag$\"\"\" tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc/$tag$-$(currentTiddler)$\"\"\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc/$tag$-$(currentTiddler)$\"\"\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-expandable-empty-message()\n<<toc-linked-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\">>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\">\n<ol class=\"tc-toc toc-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>>>\n<<toc-unlinked-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"itemClassFilter\"\"\">>\n</$list>\n</$list>\n</ol>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc/$tag$-$(currentTiddler)$\"\"\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$link>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n</$list>\n<<toc-caption>>\n</$link>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter)\n<$set name=\"toc-state\" value=<<qualify \"\"\"$:/state/toc/$tag$-$(currentTiddler)$\"\"\">>>\n<$set name=\"toc-item-class\" filter=\"\"\"$itemClassFilter$\"\"\" value=\"toc-item-selected\" emptyValue=\"toc-item\">\n<li class=<<toc-item-class>>>\n<$list filter=\"[all[current]tagging[]limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n<$reveal type=\"nomatch\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$button set=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<<toc-caption>>\n</$button>\n</$reveal>\n</$list>\n<$reveal type=\"match\" state=<<toc-state>> text=\"open\">\n<$macrocall $name=\"\"\"toc-selective-expandable\"\"\" tag=<<currentTiddler>> sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\"/>\n</$reveal>\n</li>\n</$set>\n</$set>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<<toc-linked-selective-expandable-body tag:\"\"\"$(tag)$\"\"\" sort:\"\"\"$(sort)$\"\"\" itemClassFilter:\"\"\"$(itemClassFilter)$\"\"\">>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter)\n<$vars tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=\"\"\"$itemClassFilter$\"\"\">\n<ol class=\"tc-toc toc-selective-expandable\">\n<$list filter=\"[all[shadows+tiddlers]tag[$tag$]!has[draft.of]$sort$]\">\n<$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>>>\n<<toc-unlinked-selective-expandable-body tag:\"\"\"$tag$\"\"\" sort:\"\"\"$sort$\"\"\" itemClassFilter:\"\"\"$itemClassFilter$\"\"\">>\n</$list>\n</$list>\n</ol>\n</$vars>\n\\end\n\n\\define toc-tabbed-selected-item-filter(selectedTiddler)\n[all[current]field:title{$selectedTiddler$}]\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{$selectedTiddler$}}>\n<div class=\"tc-tabbed-table-of-contents\">\n<$linkcatcher to=\"$selectedTiddler$\">\n<div class=\"tc-table-of-contents\">\n<$macrocall $name=\"toc-selective-expandable\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" itemClassFilter=<<toc-tabbed-selected-item-filter selectedTiddler:\"\"\"$selectedTiddler$\"\"\">>/>\n</div>\n</$linkcatcher>\n<div class=\"tc-tabbed-table-of-contents-content\">\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"nomatch\" text=\"\">\n<$transclude mode=\"block\" tiddler=\"$template$\">\n<h1><<toc-caption>></h1>\n<$transclude mode=\"block\">$missingText$</$transclude>\n</$transclude>\n</$reveal>\n<$reveal state=\"\"\"$selectedTiddler$\"\"\" type=\"match\" text=\"\">\n$unselectedText$\n</$reveal>\n</div>\n</div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=\"\"\"$selectedTiddler$\"\"\">\n<$macrocall $name=\"toc-tabbed-external-nav\" tag=\"\"\"$tag$\"\"\" sort=\"\"\"$sort$\"\"\" selectedTiddler=\"\"\"$selectedTiddler$\"\"\" unselectedText=\"\"\"$unselectedText$\"\"\" missingText=\"\"\"$missingText$\"\"\" template=\"\"\"$template$\"\"\"/>\n</$linkcatcher>\n\\end\n\n"
        },
        "$:/core/macros/translink": {
            "title": "$:/core/macros/translink",
            "tags": "$:/tags/Macro",
            "text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
        },
        "$:/snippets/minilanguageswitcher": {
            "title": "$:/snippets/minilanguageswitcher",
            "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/minithemeswitcher": {
            "title": "$:/snippets/minithemeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/modules": {
            "title": "$:/snippets/modules",
            "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
        },
        "$:/palette": {
            "title": "$:/palette",
            "text": "$:/palettes/Vanilla"
        },
        "$:/snippets/paletteeditor": {
            "title": "$:/snippets/paletteeditor",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<table>\n<tbody>\n<$list filter=\"[all[current]indexes[]]\" variable=\"colourName\">\n<tr>\n<td>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<$edit-text index=<<colourName>> tag=\"input\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n</$set>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n<$transclude tiddler=\"$:/snippets/currpalettepreview\"/>\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n<div class=\"tc-prompt\">\n<<lingo Prompt>> <$view tiddler={{$:/palette}} field=\"name\"/>\n</div>\n\n<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[description]]\"><div class=\"tc-chooser-item\"><$link to={{!!title}}><div><$reveal state=\"$:/palette\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/palette\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> ''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/></div><$transclude tiddler=\"$:/snippets/currpalettepreview\"/></$link></div>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/temp/search": {
            "title": "$:/temp/search",
            "text": ""
        },
        "$:/tags/AdvancedSearch": {
            "title": "$:/tags/AdvancedSearch",
            "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
        },
        "$:/tags/AdvancedSearch/FilterButton": {
            "title": "$:/tags/AdvancedSearch/FilterButton",
            "list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
        },
        "$:/tags/ControlPanel": {
            "title": "$:/tags/ControlPanel",
            "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
        },
        "$:/tags/ControlPanel/Info": {
            "title": "$:/tags/ControlPanel/Info",
            "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
        },
        "$:/tags/ControlPanel/Plugins": {
            "title": "$:/tags/ControlPanel/Plugins",
            "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
        },
        "$:/tags/EditTemplate": {
            "title": "$:/tags/EditTemplate",
            "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
        },
        "$:/tags/EditToolbar": {
            "title": "$:/tags/EditToolbar",
            "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
        },
        "$:/tags/EditorToolbar": {
            "title": "$:/tags/EditorToolbar",
            "list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
        },
        "$:/tags/MoreSideBar": {
            "title": "$:/tags/MoreSideBar",
            "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
        },
        "$:/tags/PageTemplate": {
            "title": "$:/tags/PageTemplate",
            "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
            "text": ""
        },
        "$:/tags/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo": {
            "title": "$:/tags/TiddlerInfo",
            "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo/Advanced": {
            "title": "$:/tags/TiddlerInfo/Advanced",
            "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
        },
        "$:/tags/ViewTemplate": {
            "title": "$:/tags/ViewTemplate",
            "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
        },
        "$:/tags/ViewToolbar": {
            "title": "$:/tags/ViewToolbar",
            "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$view tiddler={{$:/theme}} field=\"name\"/>\n\n<$linkcatcher to=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\"><div><$reveal state=\"$:/theme\" type=\"match\" text={{!!title}}>&bull;</$reveal><$reveal state=\"$:/theme\" type=\"nomatch\" text={{!!title}}>&nbsp;</$reveal> <$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$list>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "type": "text/vnd.tiddlywiki",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/StoryView/\n<<lingo Prompt>> <$select tiddler=\"$:/view\">\n<$list filter=\"[storyviews[]]\">\n<option><$view field=\"title\"/></option>\n</$list>\n</$select>"
        }
    }
}
[[🢔⦗Home⦘🢖]]
{
    "tiddlers": {
        "Untitled": {
            "text": "BTOS",
            "title": "Untitled"
        }
    }
}
no
\define ref(label)
<$button popup="$:/state/$label$" class="tc-btn-invisible tc-slider"><sup style="color:green">$label$</sup></$button>
\end

\define definition(label,text)
<$reveal type="popup" state="$:/state/$label$" animate="yes">
<div class="tc-drop-down">
<dl>
<dt>$label$</dt>
<dd>$text$</dd>
</dl>
</div>
</$reveal>
\end

\define footnote(label,text)
<<ref "$label$">>
<<definition "$label$" "$text$">>
\end

\define footnotes(label,text)
<<definition "$label$" "$text$">>
<sub><span style="color:green">$label$ : </span> $text$</sub>
\end
$:/palettes/ContrastDark
alert-background: #f00
alert-border: <<colour background>>
alert-highlight: <<colour foreground>>
alert-muted-foreground: #800
background: #000
blockquote-bar: <<colour muted-foreground>>
button-background: <<colour background>>
button-foreground: <<colour foreground>>
button-border: <<colour foreground>>
code-background: #000000
code-border: <<colour foreground>>
code-foreground: <<colour foreground>>
dirty-indicator: #f00
download-background: #080
download-foreground: <<colour background>>
dragger-background: <<colour foreground>>
dragger-foreground: <<colour background>>
dropdown-background: <<colour background>>
dropdown-border: <<colour muted-foreground>>
dropdown-tab-background-selected: <<colour foreground>>
dropdown-tab-background: <<colour foreground>>
dropzone-background: rgba(0,200,0,0.7)
external-link-background-hover: inherit
external-link-background-visited: inherit
external-link-background: inherit
external-link-foreground-hover: inherit
external-link-foreground-visited: #02A1D6
external-link-foreground: #02A1D6
foreground: #fff
message-background: <<colour foreground>>
message-border: <<colour background>>
message-foreground: <<colour background>>
modal-backdrop: <<colour foreground>>
modal-background: <<colour background>>
modal-border: <<colour foreground>>
modal-footer-background: <<colour background>>
modal-footer-border: <<colour foreground>>
modal-header-border: <<colour foreground>>
muted-foreground: <<colour foreground>>
notification-background: <<colour background>>
notification-border: <<colour foreground>>
page-background: <<colour background>>
pre-background: <<colour background>>
pre-border: <<colour foreground>>
primary: #02A1D6
sidebar-button-foreground: <<colour foreground>>
sidebar-controls-foreground-hover: <<colour background>>
sidebar-controls-foreground: <<colour foreground>>
sidebar-foreground-shadow: rgba(0,0,0, 0)
sidebar-foreground: <<colour foreground>>
sidebar-muted-foreground-hover: #444444
sidebar-muted-foreground: <<colour foreground>>
sidebar-tab-background-selected: <<colour background>>
sidebar-tab-background: <<colour tab-background>>
sidebar-tab-border-selected: <<colour tab-border-selected>>
sidebar-tab-border: <<colour tab-border>>
sidebar-tab-divider: <<colour tab-divider>>
sidebar-tab-foreground-selected: <<colour foreground>>
sidebar-tab-foreground: <<colour tab-foreground>>
sidebar-tiddler-link-foreground-hover: <<colour foreground>>
sidebar-tiddler-link-foreground: <<colour primary>>
site-title-foreground: <<colour tiddler-title-foreground>>
static-alert-foreground: #aaaaaa
tab-background-selected: <<colour background>>
tab-background: <<colour foreground>>
tab-border-selected: <<colour foreground>>
tab-border: <<colour foreground>>
tab-divider: <<colour foreground>>
tab-foreground-selected: <<colour foreground>>
tab-foreground: <<colour background>>
table-border: #dddddd
table-footer-background: #a8a8a8
table-header-background: #f0f0f0
tag-background: #fff
tag-foreground: #000
tiddler-background: <<colour background>>
tiddler-border: <<colour foreground>>
tiddler-controls-foreground-hover: #ddd
tiddler-controls-foreground-selected: #fdd
tiddler-controls-foreground: <<colour foreground>>
tiddler-editor-background: <<colour background>>
tiddler-editor-border-image: <<colour foreground>>
tiddler-editor-border: #cccccc
tiddler-editor-fields-even: <<colour background>>
tiddler-editor-fields-odd: <<colour background>>
tiddler-info-background: <<colour background>>
tiddler-info-border: <<colour foreground>>
tiddler-info-tab-background: <<colour background>>
tiddler-link-background: <<colour background>>
tiddler-link-foreground: <<colour primary>>
tiddler-subtitle-foreground: <<colour foreground>>
tiddler-title-foreground: <<colour foreground>>
toolbar-new-button: 
toolbar-options-button: 
toolbar-save-button: 
toolbar-info-button: 
toolbar-edit-button: 
toolbar-close-button: 
toolbar-delete-button: 
toolbar-cancel-button: 
toolbar-done-button: 
untagged-background: <<colour foreground>>
very-muted-foreground: #888888

🢔⦗h0p3's Wiki⦘🢖
Happiness
yes
link
show
show
show
show
show
show
show
show
show
show
show
show
show
show
show
show
show
show

yes
yes
yes
$:/core/ui/AdvancedSearch/Standard
$:/themes/tiddlywiki/vanilla/themetweaks
$:/core/ui/ControlPanel/Basics
$:/core/ui/ControlPanel/Plugins/Installed/Themes
$:/core/ui/ControlPanel/LoadedModules
$:/core/ui/ControlPanel/Plugins/Add/Plugins
$:/core/ui/ControlPanel/Info
$:/core/ui/MoreSideBar/All
$:/core/ui/SideBar/Open
$:/core/ui/ControlPanel/Toolbars/ViewToolbar
closed

KIN
{
    "tiddlers": {
        "$:/info/browser": {
            "title": "$:/info/browser",
            "text": "yes"
        },
        "$:/info/node": {
            "title": "$:/info/node",
            "text": "no"
        }
    }
}


























































loaded
$:/themes/tiddlywiki/snowwhite
{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/vanilla/themetweaks": {
            "title": "$:/themes/tiddlywiki/vanilla/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: normal;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 300;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour tag-foreground>>;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-tiddler-missing .tc-title {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg  {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n  fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n  fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n  fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n  fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n  fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n  fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n  fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n  fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n  fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 3px 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg  {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down-language-chooser img {\n\twidth: 2em;\n\tvertical-align: baseline;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n    width: auto;\n    margin-bottom: 0px;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical  {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical  {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical  {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar .tc-tab-buttons button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tmax-width: 500px;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 28px;\n\tpadding: 14px 14px 14px 14px;\n\tborder: 2px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 14px;\n\tright: 14px;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: block;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground-colour: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-plugin-info-chunk h1 {\n\tfont-size: 1em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk h2 {\n\tfont-size: 0.8em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk div {\n\tfont-size: 0.7em;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info:hover > .tc-plugin-info-chunk > img, .tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info > .tc-plugin-info-chunk > img, .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\twidth: 2em;\n\theight: 2em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > img, .tc-plugin-info.tc-small-icon > .tc-plugin-info-chunk > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 1em 1em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder: 1px solid <<colour table-border>>;\n}\n\n.tc-chooser-item {\n\tborder: 8px;\n\tpadding: 2px 4px;\n}\n\n.tc-chooser-item a.tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-foreground>>;\n\tbackground-color: <<colour tiddler-link-background>>;\n}\n\n.tc-chooser-item a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
            "text": "15px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
            "text": "22px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
            "text": "14px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
            "text": "20px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storytop": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyright": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
            "text": "686px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
            "text": "960px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
            "text": "350px"
        },
        "$:/themes/tiddlywiki/vanilla/options/stickytitles": {
            "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
            "text": "no"
        },
        "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
            "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
            "text": "fixed-fluid"
        },
        "$:/themes/tiddlywiki/vanilla/options/codewrapping": {
            "title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
            "text": "pre-wrap"
        },
        "$:/themes/tiddlywiki/vanilla/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! normalize.css v3.0.0 | MIT License | git.io/normalize */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS text size adjust after orientation change, without disabling\n *    user zoom.\n */\n\nhtml {\n  font-family: sans-serif; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n  margin: 0;\n}\n\n/* HTML5 display definitions\n   ========================================================================== */\n\n/**\n * Correct `block` display not defined in IE 8/9.\n */\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nnav,\nsection,\nsummary {\n  display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9.\n * Hide the `template` element in IE, Safari, and Firefox < 22.\n */\n\n[hidden],\ntemplate {\n  display: none;\n}\n\n/* Links\n   ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n  background: transparent;\n}\n\n/**\n * Improve readability when focused and also mouse hovered in all browsers.\n */\n\na:active,\na:hover {\n  outline: 0;\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9, Safari 5, and Chrome.\n */\n\nabbr[title] {\n  border-bottom: 1px dotted;\n}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.\n */\n\nb,\nstrong {\n  font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari 5 and Chrome.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari 5, and Chrome.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n\nmark {\n  background: #ff0;\n  color: #000;\n}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsup {\n  top: -0.5em;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9.\n */\n\nimg {\n  border: 0;\n}\n\n/**\n * Correct overflow displayed oddly in IE 9.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari 5.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n  overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n *    Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  color: inherit; /* 1 */\n  font: inherit; /* 2 */\n  margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10.\n */\n\nbutton {\n  overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8+, and Opera\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n *    and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n *    `input` and others.\n */\n\nbutton,\nhtml input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n  cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n  line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome\n *    (include `-moz` to future-proof).\n */\n\ninput[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box; /* 2 */\n  box-sizing: content-box;\n}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * Define consistent border, margin, and padding.\n */\n\nfieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n  border: 0; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n\noptgroup {\n  font-weight: bold;\n}\n\n/* Tables\n   ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\ntd,\nth {\n  padding: 0;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "\"Helvetica Neue\", Helvetica, Arial, \"Lucida Grande\", \"DejaVu Sans\", sans-serif"
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "Monaco, Consolas, \"Lucida Console\", \"DejaVu Sans Mono\", monospace"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
            "text": "fixed"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
            "text": "auto"
        },
        "$:/themes/tiddlywiki/vanilla/sticky": {
            "title": "$:/themes/tiddlywiki/vanilla/sticky",
            "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n``\n</$reveal>\n"
        }
    }
}
960px
310px
255px
770px
0px
700px
700px
pre
fluid-fixed
yes
classic
//My son, brother in autism.//

My son is truly damaged, and it is largely my fault, both genetically and memetically. My son does not believe in himself, he does not have hope, and he is a boy in pain. Not every circumstance is in my control, but I can see how I have contributed to his suffering and created a sad child. 

I must help him become happy. I must give him hope. I must protect him. I must cultivate him. I must be a good rolemodel for him. I must empathize with him deeply. I need to make up for my mistakes, and I can. It may never be perfect, in fact it could be a series of crises, but I must. My son needs me to be a good father, or at least the best that I can be.

* [[Our Son: The Conqueror of Happiness]]
Solidarity is a fascinating deck. It is one of the few that can truly win in response to something lethal on the stack. The deck itself, when played correctly is reactive. It sits and waits, sculpting its hand, optimizing combinations, waiting for the right time. Usually, you wait until the very end to combo (duh); you try to wait until you see that you are about to lose, or will lose during the turn. Pick the correct part of the turn to combo, and unleash your fury. You’ll say “In response to your lethal damage, I will win.” What other decks do this? Not many.

Mind you, I’ve only played this deck for two days, but I am really enjoying it. It has done well in our ‘casual’ gauntlet, and I think we will build it. Our decks do not follow any B/R lists, but we usually have pretty low budgets, so we go unpowered, yet we have some pretty powerful decks. Academy, necro, even a pimped KCI  (who wouldn’t want to play 4x tinker?), you name it. I’m hoping to really perfect the decklist for general play in our group, so any suggestions would be greatly appreciated.

Here is what I’ve come up with so far, which hasn’t strayed too far from the Legacy original:

Spells-41:
2 Brain Freeze
4 High Tide
4 Reset
2 Turnabout
4 Brainstorm
4 Opt
4 Impulse
3 Frantic Search
4 Meditate
3 Three Wishes
4 Remand
2 Flash of Insight
2 Cunning Wish

Land-19:
13 Island
3 Flooded Strand
3 Polluted Delta

Sideboard
3 Blue Elemental Blast
2 Brain Freeze
1 Chain of Vapor
1 Echoing Truth
1 Hurkyl's Recall
1 Three Wishes
1 Stifle
2 Stroke of Genius
1 Turnabout
1 Force of Will
1 Vision Skeins


You’ll notice that it is slightly different from what you might netdeck, I’ll explain my reasoning. First off, I see the deck heading in two different directions. One is a control-combo foundation the other would be a pure combo-consistency basis. Control gives you versatility, protection, and answers, being quite forgiving in a short-sighted perspective, while, conversely, going for consistency gives you turn by turn land-drops and better hands altogether, but also gives you consistency mid-combo, for example, when responding to Gaea’s Blessing or working around a resolved Chalice of the Void.

I have found that redundancy of a more pure combo, giving up some control, gives natural consistency, better responses (from a macro perspective), and more speed in the end. 

Force of Will is the obvious card not included. I’ve decided to remove it because it is generally a card that is antithetical to what the deck is trying to do in some ways. The deck is a reactive deck in its entirety. Opponent puts lethal damage on the stack, I go lethal in response, if they can, they respond to me, and then I try and respond again. Going control allows you to eliminate some of their tempo (but at a large cost to you sometimes), and it also gives you answers on the stack itself. But, overall, going control does not help the very combo itself. It makes you more likely to stall, and less likely to go off earlier if you are put on a tighter clock. Why reach for the counter spell, when I could build a more consistent version that can disregard what my opponent did by going lethal once again? The deck is reactive in virtue of the consistency of its combo cards working together, not in virtue of any individually based reactive cards themselves (such as counters). Pushing the consistency has been far more effective in my metagame, even though I really, really hate to lose a card as powerful as Force of Will in a deck that can viably run them. It really took some decent testing to come to this point, especially as I am more comfortable as a control player.

The base combo and order of spelling casting goes something like this::

1.) Cast High Tides
2.) Cast your Card advantage spell(s)…Meditate or Three Wishes 
3.) Sculpt your hand with card quality spells, like Opt, Brainstorm, Peek, Impulse, Cunning Wish, Frantic Search
4.) Pitch, shuffle, and pop lands and fetchlands to maximize the quality of cards in your hand and what you are drawing.
5.) Reset, Turnabout, or Frantic Search to untap our lands and do it again
6.) Rinse and repeat 1-5 until you amassed a major storm count with some breathing room for further responses, then Brain Freeze your opponent and Wish for Stroke of Genius or Vision Skeins to deck your opponent and win.

This is just an order of how you play your cards. Of course, your actions must take into consideration a set of priorities that would still allow you continue to keep comboing. So, sometimes you’ll high tide, float mana, reset, and then cast your meditate, as you may not have had the mana to meditate and then reset, and so you are forced to reset before drawing. You have to stabilize your mana acceleration before you can even begin to worry about decking your opponent (most of the time). Your gas drawers help you stabilize, and later help you generate the massive storm and buffer you want before you pwn your opponent.

Generally, this deck wants to drop a land each turn, right up until you need to combo, and then you’d be happy to never see a land again. And, before you can combo, you really need 3 land bare minimum, and at least 1 Hide Tide, 1 untap mechanic (preferably Reset), and 1 card advantage spell (preferably Meditate). While you can win without any one of these in your starting combo, it is very suboptimal and extremely limiting. You’ll usually only play spells during your opponent’s turn, and in the first few turns it will either be to Remand for tempo advantages or to sculpt your hand and library with Opt, Impulse, an Brainstorm, as all of these do no diminish the size of your hand, but help to optimize the quality of your hand and library in preparation for comboing. While I recommend casting these only during an end-step, once in a while, you will find mana-sources scarce and your hand lacking, and if you know your opponent is not going lethal next turn, you may consider drawing your 8th card, in hopes it is a land, and casting a card-quality spell if it isn’t to get your land, in this way you aren’t burning your spells unless you have to. But, most of the time, you’ll be working to grab your high tide/reset/meditate in hand as early as possible.

Again, I can’t emphasize how important it is to have an actual card drawer that gives actual advantage. A hand without a meditate/three wishes is rarely viable. Sure, you might be able to generate the mana, but a failed opt+BS nets you nothing but a fizzle. Meditate turns your mana advantages in multiple threats, and serves as part of the real engine of this deck. All too often I think people get stuck simply because they haven’t valued true card advantage in this deck, especially as we have numerous ways to generate card quality, but have far more limited card advantage.

So, that is the basics of this deck, here are my choices and why I’ve made them thus far:

4x High Tide, 4x Reset: completely obvious. The only question would be in regards to whether we would want 1 of each in the sideboard to wish for, but in reality, this deck is better in redundancy than it is in finding answers. Generaly, the better a deck is built, the less it will want to use cards like Cunning Wish, and more likely it will be to have redundancy and proper proportions.

19x Land, 6x of them Fetch: Dropping land is vital, and missing one or losing one is almost a Time Walk for an opponent. I think running 19 is really the bare minimum, as consistency is at a prime in a combo deck, and it won’t hurt this version as much as we are running what I consider to be an exceptionally powerful card, Frantic Search, to dispose of lands in hand or drawn within a Meditate or Three Wishes. I’d even consider putting this up to 20, as it can improve the value of Frantic Search mid-combo, while giving us more consistent early games and draws.

2x Brain freeze: Only two? Yeah only 2. You never want this in your opening hand, and you really only need one, especially as Remand can be cast on the original brain freeze without removing the storm copies, allowing you to Brain freeze yet again (which is quite powerful when we play multiplayer), why waste more slots on a card that we only want to see once or twice at most?

4x Remand: I ranted on the control, but I have a hard time removing this from the deck. Why? Remand is STILL a cantrip, and it is not a loss of card advantage like FoW’s -2 cards in hand. It isn’t a hard counter, but it provides tempo. In counterwar matchups, Remand can act as a hard counter as much as you’d really need it to, and against other decks it provides timewalks + 1 card. And, as explained, this is quite synergistic with Brain freeze, as you can also take a low storm count brain freeze and double it effectively with remand.

4x Brainstorm: No real comments to make. Everyone knows they are immensely powerful with fetchlands, and in this deck, even your other card quality spells are synergistic with brainstorm, as you can help to get useless cards out of your hand for more useful ones.
4x Opt: Many run Peek. Personally, I prefer the power of opt, as it gives me more, hehe, options. I usually know my opponent’s decklist, and I often have very good idea what they have in hand. Opt is more often superior to Peek, and can let me see 2 cards and get rid of stuff on top much more effectively.

4x Impulse: This is a fantastic card, and will pull you out of some tight spots. You see four cards, and you clear the top of your library. Dig deep, get the one that really matters, and move along.

3x Frantic Search: A powerful card. With land or Flashes in hand, it effectively has no drawback. It is better than free after high tide. It makes it possible to run more land heavy, but also proves to make the deck very resilient. It is a mini-reset, mini-meditate. However, it isn’t a great card until you’ve already started comboing, so I think 3x might be the best number to run (especially in testing).

2x Cunning Wish: Down from the normal 3x, I think this card is another one I don’t wanna see too often at all. I’d prefer to have a strong draw card in this slot usually. But, it serves as versatility, and it can do some trix in a pinch. Plus, it grabs a real win for you post-brain freeze.

4x Meditate: some go 3x for Cunning wish, I simply prefer redundancy. This is a must have card, and it is just as essential as casting high tide or reset. 

3x Three Wishes: A controversial pick, and one that I have been quite satisfied, although maybe this should go down to 2x. It is a subpar Meditate, but this deck is always seeking more gas, and our little card quality cantrips simply don’t boost our actual capacity to continue the combo in a meaningful sense beyond sculpting. Gas is gas, and Three wishes is the next best pick to Meditate.

2x Turnabout: A usual 2-3x, and it remains a sub-par reset, but can be versatile in gaining tempo advantages if necessary…sometimes a true timewalk. But, it is vital to untap, and so this really a 2x minimum from what I’ve tested. The inclusion of Frantic Search makes this less necessary.

2x Flash of Insight: a 2x number that can do neat trix. I usually try and dump it via Frantic Search, but sometimes you’ll cast for 1. The flashback is hard to passup, especially when you really, really need a single card. I’m not particularly fond of it though.
	Voltaire was one of the most influential satire writers of the Enlightenment. He was a leading philosopher, author, and was known for his clever assaults on the French government, Facile Optimism, and organized religion.

The European monarchy and nobility were ridiculed for their greed, jealousy, and poor judgment. The Baron (referred to as My Lord the Baron of Thunder-ten-Tronckh) is quick to judge Candide for an innocent kiss to the princess, giving Candide many kicks in the behind while expelling Candide from the castle. The Baron represented the impulsive commands given by European monarchs. Candide is brought into the Bulgarian (actually Prussian) army; Voltaire mocks the famous “tall” soldiers. Marchiousness of Parolignac symbolizes how almost every monarch would sell their soul and even other peoples lives, disregarding the necessity of character and values, for riches and treasures (like huge diamond rings). The sheer greed of the European monarchs disgusted Voltaire. Senator Seignor Pococurante was a perfect example of what Voltaire thought about the nobility’s unappreciative view towards their possessions. The Senator was shown to have everything he could ever want, and yet Candide and Martin find that wealth does not bring happiness.

	Voltaire finds organized religion (church) to be corrupt and hypocritical. During the course of the story we find many corrupt priests and leaders of the church. These men strike political deals (as in the case of the mistress Lady Cunegonde), commit adultery, and harbor non-Christian values. Voltaire, through Candide, mentions that in a utopian environment there is only one God, and no need for monks, priests, or other such corruptions of the church.

	Wealth, status, and greed are some of the main themes examined in Candide. Almost every person in the book was corruptible and buyable. Ship captains ran off with Candide’s loaded sheep, people wondered at Candide for how he had not the slightest hint of sadness when losing a fortune and even the Jewish merchants would pay only half of what a diamond was worth out of sheer greed. It is evident that Voltaire finds all people, the monarchs, nobility, clergy, sailors, and even common ordinary people corruptible and easily twisted by the very sight of wealth. Voltaire in defining a utopia (El Dorado) and through the use of characters shows that wealth, status, and power are of no use, are the root of much evil, and warp even the purest of heart.

	Voltaire believes love and romance is not always to be, and optimism in the area of love is ignorance. He shows the relationship between Lady Cunegonde and Candide as being hopeless. When they finally get to settle down, Cundegonde is ugly and old, and Candide no longer loves her, but marries her out of pride. 

	In Candide, the “Enlightened” philosopher Pangloss’s many tragedies point out how, ironically, life is not perfect (never will be) and is not always for the best. The book of Candide itself symbolizes the complete lack of insight of the “Enlightenment.” Voltaire proves that life is not always for the best by simply observing the tragedies and horrible outcome of Candide’s life and of the many other characters in Candide. Voltaire conveys that man’s misery comes from himself, and that evil is innate. The happiest man in the world realizes what the world is, and is comfortable saying that the world is not perfect, and that “there is a pleasure in having no pleasure.” (spoken by Martin the philosopher)

	Candide is relevant to today’s society because it addresses core issues of humanity. Candide addresses what causes pain, why the world is not perfect, the irrelevance of worldly wealth in attaining happiness, the hypocrisy of the church, and the everlasting corruption of the government.
	I hate chocolate because I enjoy it too much. Chocolate is a drug. It spurs on our hedonistic desires. Chocolate is the boxable and buyable eternal bliss of our nation. We are suckered into its wonder-drug goodness. 

Maybe at one time chocolate was simply an innocent and beautiful candy and delight. But, just like Edward’s “Turkish delight” (Chronicles of Narnia), chocolate stops us from thinking clearly. We are consumed in our desire; the more we have the more we want. Does that mean we should simply stop using chocolate?

	We idolize chocolate; we overstep into the oblivion of pleasure. Chocolate represents the ghastly demise of thought and the experience of reality, which is often the experience of pain. Chocolate is a weakness, we are unable to simply remain in ‘the calm,’ – we want pure pleasure as the antidote to pure pain. We become disillusioned, believing ourselves to possess a strength we in fact do not have. Our minds are altered by this drug! We give up that which is most precious to being human, our rationality and reason. Chocolate is our soma. Why wipe the day away? Life is rough, but at least it has character, unadulterated truth.

	Forget the excess of chocolate idolatry. If we cannot enjoy chocolate responsibly, then why should we use it at all?
	Rationality is a necessary component of persons in the original position. Reason, supposedly leads us to the two principles of justice. Rawls lists attributes of the rational person. Rational people prefer more social good than less. The rational person is “deprived of information about [his or her] particular ends, [he or she has] must have enough knowledge to rank the alternatives.” Rational people know that “in general they must protect their liberties, widen their opportunities, and enlarge their means for promoting their aims.” 

A rational person has a “coherent set of preferences between the options open” to him or her. Ranking these “options according to how well they further [his or her] purposes;” he or she attempts to follow the plan that will satisfy “more of [his or her] desires rather than less.” Rational persons follow plans that have a greater chance of being “successfully executed.” 
Rational individuals do not suffer from envy. The principles are “derived on the supposition that envy does not exist.” Envy does not promote justice. Because envy is collectively disadvantageous, and does not conform to the veil of ignorance, envy cannot be found in the rational individual.

	Rawls says, “the assumption of mutually disinterested rationality, then, comes to this: the persons in the original position try to acknowledge principles which advance their system of ends as far as possible.” They do this by striving for the “highest index” of social goods, since this would “promote their conception of the good.”

	Those in the original position must be capable of a sense of justice. This capability is public knowledge, which insures the “integrity of the agreement” formed in the original position. These rational persons rely on each other to “act in accordance” with the principles decided in the original position—“their capacity for a sense of justice insures” that the principles will be followed. Rational people only enter agreements they know they can keep. Rawls explains, “Conceptions of justice are to be strictly complied with;” “guided by the theory of the good and the general facts of moral psychology, their deliberations are no longer guesswork;” “Rational individuals with certain ends and related to each other in certain ways are to choose,” “using deductive reasoning from their beliefs, interests, their situation, and the options open to them,” “among various courses of action in view of their knowledge of the circumstances.”

# 2.50
# 4 pounds

----------------

# Ted’s opportunity cost of washing a car is 12, Tom’s is 6. Tom has the comparative advantage for washing cars.
# Ted’s opportunity cost of washing a car is 3, Tom’s is 2. Tom has the comparative advantage for washing cars.
# No because they both have the same comparative advantage. ½
# Bill has the absolute advantage for replacing clutches, no one has the absolute advantage for replacing brakes. Bill has the comparative advantage for replacing clutches.
# (Image)																					
# B
# Y= -X + 64  rather than Y= -1/2X + 32

----------------------------

<<<
Wealthy parents who give birth to a child with a minor birth defect sell their child to another wealthy but childless family and buy a "perfect" newborn child from a family badly in need of cash.
<<<

I find the above transaction disturbing and ridiculous. The value of any person (in the womb, child, elder, etc.) cannot be measured; people are invaluable. “Selling” a person is placing a price/value on a person, thus degrading the status of that person, (they now are not invaluable). I am against any transaction that removes the invaluable status of the person; the above transaction is a crime against humanity. I’m against the death penalty, but I’d truly enjoy laying the smack down on any “consenting adult” that would agree to this nonsense—so yes, I would definitely agree with prohibition of marketing of a person (yes, this has more implications…like “is Hollywood marketing people?” etc.)
	Psalm 13 is the song of an individual in pain; he is staring death in the face. His case is the classic example of suffering, and the response of the faithful. Psalm 13 is the short and effective lament of an individual. 

The basic form of a lament of the individual is: (a.) the complaint, (b.) the appeal, and (c.) the expression of confidence in G-d’s help. Psalm 13 follows this form. Verses 1-2 form the complaint, while verses 3-4 compose the appeal, leaving verses 5-6 as the expression of confidence in G-d’s help.

<<<
 	How long, O Lord? Wilt Though forget me forever?

How long wilt Though hide Thy face from me? (NASB Psalm 13:1)
<<<

The first verse of Psalm 13 leads the reader to believe that, “[G-d] may simply have forgotten,” or even worse that, “[G-d] has intentionally turned away,” indicative of the wrath of G-d (Keck 726). The phrase “’How long?’, is a biblical formula for fright and exasperation, [which] demands an explanation from the provident G-d appears to have allowed chaos and suffering rather than order and blessing. Verse 3a can be translated, ‘How long do I lay up counsel in my heart,’ as though to say, ‘must I keep on learning forever from my pain?’”(Mays 439). The word “eternally” or “forever” in the first line of verse one may have two meanings. The first meaning is the possibility of G-d continually ignoring the prayer of the psalmist and the other concerns being “forever cut off from [G-d’s] remembrance and love (Dahood 76).

<<<
		How long shall I take counsel in my soul,

Having sorrow in my heart all the day?

How long will my enemy be exalted over me? (NASB Psalm 13:2)
<<<

Verse 2 is more focused on the psalmist. It is traditionally suggested that the psalmist was seriously ill and facing imminent death as found in verses 1-2 (Keck 726).  Who is the enemy? The enemy could represent a person or group of people, or maybe the enemy is to be understood as death.

<<<
		Consider and answer me, O Lord, my G-d;

Enlighten my eyes, lest I sleep the sleep of death. (NASB Psalm 13:3)
<<<

The appeal asks for an answer, “the request that [G-d] ‘answer’ is particularly appropriate, since the complaint in v1-2 was framed as a series of questions” (Keck 727). The NIV’s “look” may be more accurate than the NRSV’s and NASB’s “consider;” “the request calls for [G-d] to reverse the action of hiding G-d’s face.” Without intervention, the psalmist will surely die. The psalmist requests that G-d turn his face towards the psalmist (look) and intervene in this injustice (answer). The phrase “Enlighten my eyes” may have a two-fold meaning. The first “phrase means ‘to restore to health,’” while the second “may denote ‘to grant immortality,’ since ‘to see the light’ is idiomatic for ‘to enjoy immortality’” (Dahood 77). The psalmist knows he is near death; the phrase “Lest I sleep the sleep of death” is best taken as a physical reference to death (Buttrick 73). 

<<<
		Lest my enemy say, “I have overcome him,”

Lest my adversaries rejoice when I am shaken. (NASB Psalm 13:4)
<<<

	Although in verse 2 and the first line of verse 4 we find “enemy,” verse 4b refers to “adversaries” in plural, “suggesting human enemies who will rejoice over the psalmist’s defeat or demise” (Keck 727). The reader struggles with the reference to this enemy or these enemies. Does enemy represent moral evil, death, a person or persons against the psalmist, or even his affliction? The phrase “when I am shaken” is also interpreted as “when I stumble.” These have many “connotations; here it connotes stumbling into the jaws of death” (Dahood 78). This “stumbling into the jaws of death” may give be indicative of the identity of the enemy: death. Although the meaning of enemy and adversaries is significant to this psalm, we may never actually know for sure what the psalmist meant.


<<<
But I have trusted in Thy loving kindness;

My heart shall rejoice in Thy salvation.

I will sing to the Lord,

Because He has dealt bountifully with me. (NASB Psalm 13:5-6)
<<<


	Verses 5-6 compose the lament. The psalmist jumps from expressions death and enemies immediately into expressions of trust and praise of kindness. This transition is rather abrupt and unexpected. Certainly the reader is slightly deterred by the psalmist’s immediate progression into the praise of the Lord. Did the author mean for this contrast to stand out so clearly? If the contrast was meant to be so clear to the reader, then the reader might be forced to reckon with the possibility that all people may experience suffering and are still expected to have a constant faith in G-d. The psalmist’s trust seems to be ongoing; “trust is properly directed to the fundamental attribute of [G-d’s] character: ‘steadfast love’” (Keck 727). Another interesting contrast is when we find that although “the enemy had been ‘exalted over me,’ now [G-d] has ‘dealt bounty over me,’” forming a parallelism.

	Psalm 13 is rather ambiguous in terms of what the author felt towards G-d. The psalmist jumps from questioning G-d to praising G-d indefinitely. The reader is left wondering why the author poses these bi-polar claims within four verses of each other. Does this psalm justify a concurrent questioning and praising of G-d? The purpose of this particular psalm may be more than to simply express suffering and a desire for intervention, but may also serve as an exemplary mindset for those in suffering. When we suffer we are still to believe and praise G-d, for G-d’s ways are not our ways, suffer and believe. Psalm 13 is a good example of simultaneous complaint and praise of G-d during a period of suffering.

A historical strength of Psalm 13 has been the sheer simplicity of the poetry. Psalm 13 is boldly honest, concluding in positive expressions. Obviously applicable, this chapter speaks to those who feel temporarily abandoned by G-d. Although the psalmist begins to harbor doubts about the goodness of G-d, his confidence prevails, promising to praise G-d for deliverance from death. The chapter reflects the psalmist’s anxiety from G-d’s apparent apathy or anger. Does the psalmist suffer because of his enemies, or because death has chosen him, or because G-d has forgotten him, or because G-d is punishing him? The psalmist’s case and question is timeless. His brief psalm is an excellent example of enduring question of why G-d would and could let suffering and evil exist.

-----------------

''Works Cited''

Buttrick, George. //The Interpreter’s Bible: Vol. IV.// Abingdon Press. New York: 1955.

Dahood, Mitchell. //The Anchor Bible: Psalms I 1-50.// Doubleday. Garden City, New York: 1966.

Keck, Leander. //The New Interpreter’s Bible: Vol. IV//. Abingdon Press. Nashville: 1996.

Mays, James. //Harper’s Bible Commentary.// Harper & Row. San Francisco: 1988.
	Job is a book abundant with explanations for the suffering of Job. Job had four friends (not very kind either) that attempted to demystify why Job was suffering.

	Job’s first friend, Eliphaz, seems to say that because Job is guilty of sin, he may undermine his religious freedom to complain about suffering. Eliphaz goes on to explain Job’s “guilt” when he says, “Your mouth condemns you, not I, your lips testify against you” (Job 15:6). Obviously Eliphaz holds that Job is corrupted with sin and has no right to complain about his deserved suffering. Eliphaz interesting explains that a spirit told him, “’Can mankind be just before G-d? Can a man be pure before his Maker? He puts no trust even in His servants; And against his angels He charges error” (Job 4:17-18). Is Eliphaz also explaining that humanity is condemned to be evil before it starts? It sounds as if mankind is bound to do wrong, but that we still cannot complain about the consequences of doing evil. This argument is not an adequate justification for the problem of suffering because it does not explain why we are simply ‘bound’ to do the wrong and how we still can be held accountable for evil.

	Bildad is another of Job’s “friends.” Bildad says that Job is to blame for his own suffering. Bildad explains, “’If you would seek G-d and implore the compassion of the Alimghty, If you are pure and upright, Sure now He would rouse Himself for you” (Job 8:5-6). G-d protects and restores the righteous. Bildad believes that evil and suffering doesn’t happen in the righteous person. G-d seems to reward the faithful, and allow suffering as just to fall upon those who are not righteous. This argument greatly falls short of properly addressing the problem of suffering because we seem to find righteous people that still suffer, which is quite contradictory to his claim.

	Job’s third friend, Zophar, is just as unencouraging as the others. Zophar says, “For you have said, ‘My teaching is pure, and I am innocent in your eyes.’ ‘But would that G-d might speak, and open his lips against you, and show you the secrets of wisdom! For sound wisdom has two sides. Know then that G-d forgets a part of your iniquity” (Job 11:4-6). Zophar seems to say that Job is getting off easy. Is Zophar pointing out that G-d is merciful even to the wicked, that not all sins are justified through suffering, and that maybe Job has it much better than he deserves? Zophar goes on to explain, “This is the wicked man’s portion from G-d, Even the heritage decreed to him by G-d” (Job 20:29). Zophar believes that Job has been fated this lot of suffering. Given that G-d would not fate us a lot of suffering and evil, Zophar’s claim seems to attempt to redefine both G-d’s and our purposes.

	Elihu is a different breed than Job’s other three friends, possibly because he is younger. Elihu says, “Let his flesh become fresher than in youth, Let him return to the days of his youthful vigor; Then he will pray to G-d, and He will accept him, That he may see His face with joy, And He may restore His righteousness to man” (Job 33:25-26). Elihu holds that suffering is G-d’s form of education that changes the sinner into a righteous person. Suffering is a means to the righteousness for mankind. Interestingly, Elihu says, “’Behold, let me tell you, you are not right in this, For G-d is greater than man.’ ‘Why do you complain against Him, That He does not give an account of all His doing’” (Job 33:9-13)? Elihu alludes to the idea of a transcendent G-d, a G-d that needs not explain why things are the way they are. Elihu has the most interesting of the four claims. Ironically, he seems to know that G-d allows suffering as a device to educate the evil into righteous, yet we somehow cannot know this because G-d is transcendent. The argument from transcendence is from first appearance a cop-out, and suffering as an education-device is inadequate when it seems that G-d simply could program our environment to teach us in other, non-suffering ways.

	Luckily for Job, he doesn’t need to rely solely on his friends’ advice; Job has a dialogue with G-d. G-d answers Job in terms of transcendence. Who is Job to question G-d? G-d explains, “Where were you when I laid the foundation of the earth” (Job 38:4)? G-d can do as He wills because He wills only that which is perfectly good. Imposing suffering at particular moments seems to be a necessary aspect of what a perfectly good being does. No doubt, we are left in awe at G-d’s answer. Who are we to so boldly answer these questions, when only a perfect being such as G-d may know them?
	Leibniz undertook the task of proving that G-d would make the best of all possible worlds, and that our world is the best of all possible worlds. Leibniz thought human free will was not the cause of evil, but rather that evil arose out of the environment. Leibniz holds that the occurrence of evil is essential to the superior goodness of the whole. To be more specific: Leibniz argues that G-d created an environment with evil so that the world could be the best of all possible worlds—“G-d made a world wherein there is evil,” a necessary evil (14). Leibniz does not hold evil to be a by-product, it wasn’t just permitted, but that evil is an essential ingredient woven into the fabric of this “best of all possible worlds.” To Leibniz, G-d had to create a world with evil, else it would not be the best of all possible worlds.

	Leibniz’s first argument is: If we are convinced of the existence of an all-knowing, omnipotent, perfectly good creator, we must deduce that this world must be the best of all possible worlds; otherwise, the creator would not have sufficient reason to create this world. In response to the concept that evil is alone a creation of the free will of man (thus making man less than excellent), he responds, “it is wrong to bring into existence, knowingly, a being less excellent than one could have brought into existence” (2). Thus, G-d created the most excellent being, a being that was determined by its “excellent” nature to produce evil. Further, G-d is responsible for this deterministic creation and all the evil produced from this creation, and He has done no evil because that which was created was simply a part of the greater whole. Leibniz holds that all of creation, including every being within our world, is the most excellent of all possible creations because it brings about the greatest possible net balance of good. For those who choke on this idea, he further comforts, “One must understand that G-d [respectful emphasis] loves virtue supremely and hates vice supremely, and that nevertheless some vice is to be permitted” (6).

His argument is tempting because it attempts to solve, in a creative fashion, how G-d and evil can co-exist. Rational people tend to say that the creator of a deterministic or fatalistic object or environment is morally responsible for the deeds of that object or environment. If a person creates a robot, and that robot murders ten other beings, then that person (the creator) is morally responsible, at least in large part, for the death of those ten beings. Leibniz holds that G-d created a deterministic and/or fatalistic environment with determined necessary truths: among those are all existent evil. Leibniz is accusing G-d of not only permitting, but also creating evil. The problem is found in the notion that a being who a deterministic and/or fatalistic enivronment with evil, is committing an act evil—thus, G-d would be committing evil by creating a deterministic and/or fatalistic environment with evil  (even if it were simply for the purpose of having “the best of all possible worlds”). Although G-d may be part of the causal chain that leads to the existence of evil, He is not morally responsible for the existence of evil. Leibniz attempted to show that G-d is responsible for the existence of evil, but was acting in the interest of the “best of all possible worlds” (which supposedly is the action that would be chosen by a perfectly good, all-knowing, omnipotent being). The real question we must ask is: How is it possible for G-d, creator of the universe, to not be responsible for the existence of evil? Leibniz outright rejects the idea that G-d is not responsible for evil, placing the blame solely on G-d the creator—Leibniz is incorrect. Leibniz believes that G-d is responsible for the existence of evil. Here is the basic argument against Leibniz’s claim:

# A being who creates a deterministic or fatalistic object or environment with evil, is committing an act evil.
# A perfectly good, omnipotent, omniscient being cannot commit an act of evil.
# Since G-d is a perfectly good, omnipotent, omniscient being, He could not create a deterministic and/or fatalistic object or environment with evil.

Leibniz’s argument does not conform to the very definition of G-d, a G-d that is perfectly good, omnipotent, and omniscient. Is it that G-d is missing one of those attributes, or that he did not create the best of all possible worlds, or that he did not create a deterministic and/or fatalistic world? G-d cannot be morally responsible for evil, and yet he is still part of the causal chain that led to the existence of evil…How is this possible?

There are other ways to deal with the problem of evil. One could argue that the world is not necessarily the “best of all possible worlds” because it has evil, but rather because it merely possesses the possibility of evil, a possibility created through the free will of mankind. To further the argument, we would say that the “possibility of both good and evil,” agency, is good in itself and is an essential ingredient of the best of all possible worlds. Leibniz could keep his “best of all possible worlds,” and maintain that G-d has not committed an act of evil in creating this world, simply by changing what ingredients form the best of all possible worlds. 
However, Leibniz oversteps, and commits to the idea of G-d necessitating evil for the necessary greatest good. He should have simply explained that the greatest good is found in the “possibility of both good and evil.” This would allow G-d to be part of a causal chain leading to the existence of evil, without G-d being morally responsible for that evil. Ironically, this allows us to maintain that this world is the best of all possible worlds. Although I highly disagree with Leibniz’s conclusions, obviously he was part of the causal chain that led to this rewritten paper—thus helping to promote and maintain the best of all possible worlds. Right?
	Viktor Frankl in his book, Man’s Search for Meaning, explores the stages of thought found in the prisoners of Auschwitz. He explains that prisoners go through three phases of mental reactions: “the period following his admission; the period when he is well entrenched in camp routine; and the period following his release and liberation” (26). Frankl examines a variety of mental reactions common through each of these stages. Viktor Frankl holds a numbing of the senses and a deadened morality for the sake of survival as a significant principle that guided prisoners throughout the Holocaust.

	Even from the beginning of a captive’s imprisonment there is very little consideration of morality or ethical issues. Frankl explains that, “Every man was controlled by one thought only: to keep himself alive for the family waiting for him at home, and to save his friends” (23). Although one could make the argument that the concern for one’s family is an ethical concern, Frankl demonstrates that prisoners were not actually concerned about the morality of whatever it took to save themselves from death. Dawning upon Frankl’s first phase the prisoner strikes out his or her previous life. The prisoners come to grip their fate, they most likely will not survive the concentration camp, but they should do whatever is necessary to survive as long as possible. Ironically, even thought the majority of prisoners desired to live, supposedly, “the thought of suicide was entertained by nearly everyone, if only for a brief time” (36).

	Frankl explains the second phase as a time of “relative apathy in which [the prisoner] achieved a kind of emotional death” (39). Prisoners began some basic human functions in terms of the loss of feelings and disgust for what was around them. Frankl says that, “the prisoner who had passed into the second stage of his psychological reactions did not avert his eyes any more. By then his feelings were blunted, and he watched unmoved” (40). Apathy was a self-defense mechanism for prisoners who had lived long enough in concentration camps. In the midst of apathy towards the diabolic activity found in the camp, prisoners became consumed with an almost animalistic instinct for survival. Undernourishment led to a serious “preoccupation with food” (52). Interestingly, some prisoners kept up their hope and desire to live through images of their families. The author himself says, “nothing could touch the strength of my love, my thoughts, and the image of my beloved” (58). 

	Victor Frankl goes on to explain a silence among the prisoners. Frankl states, “On entering camp a change took place in the minds of the men. With the end of uncertainty there came the uncertainty of the end. It was impossible to foresee whether or when, if at all, this form of existence would end” (90). Life to the advanced prisoner didn’t seem to have much of a future. Prisoners could not even think in terms of how it would be like outside of the camp, instead they could only think narrowly in terms of life (and the end) within the camp.

	The last stages of imprisonment consisted of possibly the largest shift in perspective. Victor Frankl explains, “We had to learn ourselves and, furthermore, we had to teach the despairing men, that it did not really matter what we expected from life, but rather what life expected from us. We needed to stop asking about the meaning of life, and instead to think of ourselves as those who were being questioned by life—daily and hourly” (98). The life of the prisoner was a daily trial. Would they win that hour or that evening?

	The liberated prisoner had no idea howto feel. Most prisoners didn’t want to even think about what had happened. Frankl demonstrated that non-prisoners of these concentration camps could not truly understand or evaluate how these people thought and felt. Thus, the liberated prisoners had difficulty explaining what went through their minds, most attempt to remain silent about the horrendous activities within concentration camps such as Auschwitz.

	Lack of sleep, insufficient food, apathy, images of family, and the desire to survive were some major thoughts throughout the life and experience of those imprisoned in concentration camps. Frankl shows a breakdown of a person, eventually the meaning of life appears to be one big set of trials.
	
	
//In memory of Dr. Bowman.//

-----------------

//“All women are psycho, all men are jerks.” --Kurt Vonnegut//

//“There is neither Jew nor Greek, there is neither slave nor free man, there is neither male nor female; for you are all one in Christ Jesus.” -- Galatians 3:28 (NASB)//

	Ancient women, as found in the Old Testament and Euripides’ plays, were not treated with equality. Women are naturally weaker in physical strength. We find in the ancient cultures of the Hebrews and Greeks that women were also viewed as weak in many other aspects of life. They were considered immoral creatures, driven by passion, representing the ‘lesser’ side of humanity. Women were not treated with equality in both the Old Testament and Euripides’ plays, they slaves and second class citizens.

Ancient societies were patriarchal societies. Men ruled the house, men ruled the state, and men controlled the market. Men were allowed to have polygamous relations; while women were whores and unclean if they were polygamous. Both the Old Testament and Euripides’ plays express obvious patriarchal societies as the setting. Women were treated as objects and property. They were the vessels of shame and misery. They followed the male head of the household or they died. Women were slaves. Some women were referred to as servants and concubines and mistresses, but we should be deceived. Since these women still did not have choice/power in how they wished to live their lives, they were clearly slaves—property to be ordered around. The similarities between the rights, liberties (or lack thereof), and treatment found between women and slaves are astonishing. Women at best were second class citizens—a true citizen actually has power of him or herself.

	A person reading the book of Genesis could easily read that women were responsible for the “fall” of mankind. Adam said, “’The women whom you gave to be with me, she gave me fruit from the tree, and I ate’” (Genesis 3:12). The Lord asks Even, “What is this that you have done?” in a very accusatory tone, as if the woman was completely at fault for the “fall” (Genesis 3:13). The Lord answered in retribution towards all women, “yet your desire shall be for your husband, and he shall rule over you” (Genesis 3:16b). The Hebrews had justification for their treatment of women. The Hebrews could simply say that the Lord made it such that women were to be subservient to men. Obviously, the text appears to promote a patriarchal slavery of women rather than an egalitarian view.

	Euripides portrays women as crazed, jealous, emotional, backstabbing sex-fiends. In the eyes of the Greeks, women are seductive, highly sexual, immoral predators. However, Euripides was ahead of his time. To his credit, Euripides was generous enough to actually even consider displaying the experiences of women. A normal Greek would not have been as concerned with the feelings and experiences of the women found after the Trojan war. So, in a sense, Euripides was promoting the value of women more-so than a normal Greek would be expected to uphold.

	The relationship between Sarah and Hagar, of the Old Testament, is very similar to the relationship of Andromache and Hermione, found in the Euripidean play Andromache. Although slightly different, these two stories offer a distinct parallel between how the two cultures perceived women and how women ‘supposedly’ interacted with each other.

Sarah is the wife of Abraham. Hagar is the concubine and slave of Abraham. Sarah is unable to bear children and therefore goes and gives Abraham her hand-servant Hagar. Abraham conceives a son, Ishmael, with Hagar. Sarah becomes jealous of Hagar. Sarah conceives evil plans for Hagar, and eventually is able to banish Hagar from Abraham’s household.

Hermione is the wife of Neoptolemus. Andromache is the slave and mistress of Neoptolemus. Hermione is unable bear children. Andromache bears a child for Neoptolemus. Hermione becomes jealous of Andromache. Hermione conceives of evil plans for Andromache, wishing death upon Andromache.

	Comparatively, these stories reflect the jealousy found between wives and concubines. As Hermione states, “it is not decent for one man to keep two women in the reins of marriage. No, the man who wishes to live with propriety is content if he looks to a single loved one in his bed” (Morwood 81). Sarah hated Hagar just as Hermione hated Andromache. Sarah and Hermione played the desperately jealous, evil, and conniving wives, while Hagar and Andromache appear to play more innocent roles. Hagar and Andromache were forced to sleep with their owners; Sarah and Hermione always wanted to sleep with and bear children for their husband/owners, but were unable. 

	Out of both the Old Testament and the Euripidean plays, we find an emerging concept of women’s roles: they were to have sex, have kids, and raise the children. But, there appears to be slightly different slants on perspectives on women as a sexual being in these two texts.

	In contrast, women of the Old Testament were not seen as the same sex-fiends as found in the Euripidean plays. Old Testament women were portrayed more as weak-willed and immoral, failing to fear the Lord. Lot’s wife and his daughters both showed a lack of will power to fear the Lord and abstain from incestual relations with their father. Sarah laughed at the Lord. Eve was the first human to sin. The main perspective on women was that because they were immoral and weak-willed they were, under the Lord’s command, to be subjugated under males. It seems that at first women became slaves of men because the Lord commanded it. However, it appears that the subjugation and demeaning treatment of women in Euripides’ plays was always the accepted opinion of the Greeks. The enslavement of women seems to be based on two different ideas. Women were enslaved for Hebrews because the lord commanded it, while the Greeks enslaved women because they absolutely felt females were a lesser class of humanity. It is more difficult to infer that the Hebrews explicitly felt that women were not equal—whereas we could easily infer that women were not equal to men for the Greeks. The basis of inequality separates these two cultures. The Hebrews may not have believed women were unequal to men, they simply treated women unequal because the Lord commanded them to do so. This is far different from the explicit degradation and lower value of women found in Euripidean plays.

	Women in both the Old Testament and Euripides’ plays experienced very similar circumstances. They were servants, slaves, concubines, and wives. They were seen as immoral and weak. They were second-class citizens of humanity. Women were not equal to men; this may have been the greatest tragedy in both the Old Testament and Euripides’ plays.
	

--------------------

''Works Cited''

Coogan, Michael. //The New Oxford Annotated Bible//: 3rd Ed. Oxford University Press. 
Oxford: 2001.

Morwood, James.// Euripides: The Trojan Women and Other Plays//. Oxford University 
Press. Oxford: 2000.
	In her critique of Nozick’s Anarchy, State, and Utopia, Susan Okin explains an absurdity that follows from Nozick’s conception of justice. Nozick attempts to form a system in which a “society is best and most morally arranged when it leaves each to produce what he can by the use of his own talents, and to enjoy the produce of such labor and luck combined” (88). Nozick’s entire theory assumes that people “own” themselves. If people did not own themselves, then there wouldn’t be much sense in the idea that people could be entitled to other holdings (which is the whole point of entitlement theory). Under Nozick’s conception of justice as entitlement, all persons are “entitled” to the products created from their own capacities and labor. Okin explains that since all human beings are the products of female capacities and labor, then all human’s are owned by their mothers. Okin uses a reductio ad absurdum to defeat Nozickian entitlement theory. Nozick is unable to sustain the two propositions that 1.) All individuals own themselves and 2.) All individuals are owned by their mothers. 

	Nozick holds that “individuals’ entitlements to things they own take precedence over any other rights” (77). Nozick seems to prefer legitimately acquired property rights over rights to life and basic necessities. With an understanding of the primary significance of legitimate entitlement Okin walks her audience through a possible objection to her own argument. She defends against the idea of motherhood monopolies violating ownership rights of men and infertile women. The rights of non-owners are violated iff they are left worse off than they would be in a “baseline” situation. Okin states, “these women do not ‘worsen the situation of others; if [they] did not [produce children] no one else would have, and the others would remain without [them]’”(84). We can see that in the Nozickian world all people can “be in the market” for buying and selling children and persons. Thus, there is no monopoly created by mothers because all people still have the possibility of legitimately acquiring children. Unfortunately, Nozick’s system appears to devalue personhood while uplifting something even greater, entitlement and property. No doubt, I am pleased that my mother has yet to keep me in a cage for her own amusement, sell me, or kill and eat me as any Nozickian mother could. 

In defense of Nozick one could argue a distinction between infants and persons. If all infants are products of female reproductive systems (natural capacities and labor), then all infants are the “property” of their mothers/owners. Thus, infants do not own themselves. This does not explicitly necessitate that people do not own themselves. Nozick could argue that infants are not yet persons. Surely the mother is entitled to whatever or whomever is excreted from her womb as a product of her “natural assets.” But if a product evolves and develops into something as unique as a true person, does the mother still actually “own” that newly developed person? Nozick may have the position that only a person can be entitled to something. Otherwise, one could argue that an environment, a world, a universe, or some other inanimate object which “put its labor and effort” into creating all things within and from it, would also be owned by that environment or object. The universe would then own all within it, creating another absurdity. If Nozick proceeded to argue that infants were not persons, then obviously infants couldn’t own themselves (even if a person could be owned in the first place). Mothers (and fathers) could “own” their children. Nozick’s escape is in the notion that the very moment in which an infant is no longer an infant—where one “becomes a Nozickian person,” that person acquires himself or herself. Is it possible that the sudden appearance of a newly created person with autonomy, intelligence, rationality, moral agency, and free will gives that new person an entitlement to his or herself at that moment? Is the act of becoming a person also a part of legitimate acquisition of one’s self? People lose and gain holdings legitimately all the time; “losing” a son or daughter for that son or daughter to be entitled to themself may just be a part of the entitlement theory. Losing the rights of entitlement to a child, when that child becomes a person, may simply be a part of parenthood as a business venture—parents are just taking an economic “loss” when children become Nozickian persons. Even if infants come into the world already as holdings of their parents, persons that develop from infants are not necessarily holdings of their parents. 

On a different note, Okin’s argument appears sexist for neglecting the role of men in the process of procreation. Although she briefly goes over ways in which women acquire sperm, she merely assumes that women are freely given sperm or buy sperm. Women can and do legitimately acquire sperm, but Okin neglects the possibility that certain couples work together to produce a child. Thus, in at least certain circumstances, a child could belong to more than just its mother. Especially, if no contract of legitimate transfer is made other than that both parties wish to “own” a child, and then both parties not only play a role in the production, but are also joint “owners” of that child. One could argue that women play the most extensive and difficult roles in reproduction, but certainly the male played a vital role in conception as well; maybe ownership could be disproportionate. Even if mothers are entitled to the greatest proportion of ownership, many fathers would still hold at least some entitlement to a child they have labored to produce. Given that some sperm is “donated,” freely given, or legitimately transferred without asking for entitlement to products from that sperm (beyond payment), one could say that at least under certain circumstances, both a woman and man both “own” a child within a Nozickian world.

Okin fumes about pronoun usage, but we can’t hold that against her; she makes an excellent case against Nozick’s entitlement theory. Nozick doesn’t fail to take into account women; he simply neglects the truth that under his theory his own mother “owns” him; he cannot be entitled to himself. Nozickian entitlement theory is injured when people cannot “own” themselves because they did not produce themselves.
	The Trial of G-d is a novel idea, maybe even a dangerous idea. The play portrays a trial of G-d as an activity that many communities have put into practice. This play is brilliant and maddening. We hold in contrast the destruction of G-d’s chosen people and G-d’s ever present love for His chosen people. What are we to make of catastrophes such as the Holocaust? G-d appears to be responsible for some less than G-dly actions. G-d allows evil to exist; we are baffled and angered.

	Act one sets up the theme and characters of the play. The setting is a bar in a Ukrainian village. Earlier this village had been populated by a Jewish community. The Jewish community was massacred by a mob of anti-Semites. The play is being shaped to represent the holocaust. We are forced to reckon with the questions asked and the thoughts of those who suffered through the holocaust. How could G-d have let his chosen people be massacred? 

	At first we find the main character Berish to be distraught. The audience easily identifies this man as grumpy and angry. Slowly, the story reveals that Berish is not without faith, yet he is very angry with G-d. He is angry enough to say that G-d has sinned. The rationale of those who suffered the holocaust can be found in this man Berish.

	Maria is rather aggressive. She clearly holds the basic Judeo-Christian stance. She says, “[G-d] is [G-d]: sometimes He is kind, other times He is not—He’s still G-d!” (47). The audience is apt to sympathize with Maria.

	The three minstrels, Mendel, Avremel, and Yankel, perform the duties of rabbis, judges, and mediators. Odd and yet somehow traditional, these characters are learned and experienced in the world and in faith. Although jolly and pleased with holiday amusement, they help set up the very serious basis of the story: judging G-d’s actions.

	Hanna and Sam the Stranger are opposites. Hanna is young and fragile while Sam is strong, cynical, and worldly. Sam is almost evil in his intelligence. Hanna is almost innocent in her intelligence. Hanna is plain and honest, Sam is a slick stranger. Hanna is quiet, Sam is outspoken. Sam seems to be the only person who does not suffer in this play, Hanna suffers the most. The characters do not represent most of us, they are either too evil or too good, suffer too much or cause too much suffering. 

	The trial starts and ends strongly in favor of Berish the prosecutor. G-d appears to bring about evil upon his chosen people. Berish and his family, and maybe other Jewish families of his small village, didn’t appear to deserve punishment. In the eyes of Berish, G-d not only allowed genocidal evil of his chosen people, but G-d supposedly brought about by His will these hateful and evil events. 

	I am profoundly touched by this seemingly unreasonable faith in G-d. How can Berish have faith in G-d while at the same time despise G-d? To be perfectly honest, I don’t know how to answer this play. It seems as if we must simply embrace our faith in the midst of experience that is clearly contradictory to our faith.

By far the most difficult dialogue to comprehend is when Berish explains, “I lived as a Jew, and it is as a Jew that I shall die—and it is as a Jew that, with my last breath, I shall shout my protest to [G-d]! And because the end is near, I shall shout louder! Because the end is near, I’ll tell Him that He’s more guilty than ever!” (136). The mix of hate and faith is very difficult to grasp. Berish has almost a blasphemous disrespect for G-d, how could he still have faith? We hate what G-d does, but we praise G-d for who he is. There seems to be an attempt to separate the identity of G-d from the actions of G-d.

In the last few minutes of the play we observe an explosion of thought and activity. Sam is satan; satan was defending the Lord in this trial!? A closer look at Sam’s dialogue reveals how the question of G-d and evil is almost diabolical. Satan the Stranger is quick to point out very tradition ideas. But, in light of the prosecution’s case, the audience is left questioning the validity of these very traditional ideas of G-d. 

This tragic farce zeroes in on the very questions of evil and G-d. How do people live through these experiences? A verdict against G-d would lead most to lose their faith in G-d. To our horror, we find even the minstrels desire the ‘faith’ that Sam exhibits. If anything, Sam lacks faith! Faith is not an understanding of what G-d is, or who He is, or why He does what He does; faith is simply an extraordinary belief outside of what we can see or experience.
	Lucius Annaeus Seneca was a philosopher and statesman. He was a tutor to Nero, and chief administrator of the Roman Empire with Burrus. Although Seneca was ironically wealthy, he was not concerned with wealth or worldly goods. He was a true stoic. Seneca’s Letters from a Stoic accurately depict the beliefs of a Roman stoic.

	Stoicism began as a philosophical tradition founded by Zeno (of Citium), developed by Cleanthes and Chrysippus, and named for the Stoa Poikilé (Painted Porch) in Athens where they taught (Honderich 852). Although there are a variety of assertions made by Stoics over the ages, there are some basic principles that all Stoics hold. The defining principle of Stoicism is the acceptance of misfortune without complaint. Another major tenet of Stoicism is the immense significance of rationality and necessity of reason in order to understand the world and follow divine order. The overarching structure of Stoicism, as a whole, isn’t necessarily about “how and why the world is the way it is,” but rather, “how should one behave and think?” Stoicism could be thought of as a philosophy of ethics and morality. Seneca clearly wrote a great deal on “how one should live one’s life.” To say Seneca was a “Stoic” is to say that he accepted misfortune without complaint, was self-content, and valued rationality, reason, and the pursuit of wisdom.

	Seneca’s Letters from a Stoic provide excellent examples of Stoic beliefs. Over and over Seneca explains that, “The wise man is content with himself” (Seneca 51). Self-content is a very Stoic belief. Not only is the wise man self-content, but a “wise man feels his troubles but overcomes them” (Seneca 48). The wise man overcomes troubles because troubles are arbitrary to a Stoic. One trouble Seneca faced was his health and age. But, even in his old age he says, “Fruit tastes most delicious just when its season is ending” (Seneca 58). Not even old age or death will truly trouble this noble stoic. Another example of Stoic thought can be found when he says, “’Any man’…’who does not think that what he has is more than ample, is an unhappy man, even if he is the master of the whole world’” (Seneca 53). Like a stoic, Seneca denounces worldly goods because they do not lead to true happiness. Seneca said, “a holiday can be celebrated without extravagant festivity” (Seneca 67). Stoics supported moderation and the prevention of gluttony and excess. Seneca also revealed that, “A good character is the only guarantee of everlasting, carefree happiness” (Seneca 73). Seneca, like any good stoic, is concerned with how one ought to live when he discusses how only a virtuous person can attain true happiness. Seneca also wrote, “no one can lead a happy life, or even one that is bearable, without the pursuit of wisdom, and that the perfection of wisdom is what makes the happy life” (Seneca 63). Seneca, like all true stoics, value wisdom.

	The profound value of the pursuit of wisdom can be found in both the Symposium and Letters from a Stoic. Plato, through Socrates as a character, easily qualifies as a stoic as we read about him in Alcibiades’ speech, “You should know that [Socrates] doesn’t care at all if someone is beautiful…or is rich or has any of the other advantages prized by ordinary people. He regards all these possessions as worthless…” (Plato 55). Socrates is very much a stoic in his approach towards riches, worldly goods, and even beauty to some extent. Although Socrates was an ugly man, he ironically replies to Alcibiades’, “You must be seeing in me a beauty beyond comparison and one that’s far superior to your own good looks” (Plato 58). That beauty stems from Socrates’ pursuit of wisdom. Only the wise man can be a virtuous man, only the virtuous can properly display beauty. Beauty, as defined by Socrates, requires the pursuit of wisdom and excellence. Plato clearly holds virtue to be the basis of happiness. Only the wise man can be virtuous, only the virtuous can be happy; thus, only the wise can truly be happy. This concept of wisdom producing happiness through virtue is clearly a major similarity between Platonism and Stoicism. 

	Neither Plato nor Seneca were afraid of death. Their courage in the face of death was the sign of a learned and wise man. Seneca explains, “though human beings may perish, humanity in itself - the pattern on which every human being is molded – lasts on” (Seneca 120). He goes on to explain that the, “soul is in captivity unless philosophy comes to its rescue…the soul….makes for the open and finds its relaxation in contemplating of the natural universe” (Seneca 122). Plato used the Forms to defeat death. The Form of Man is the soul. A metaphysical explanation of ‘the self’ allowed both Plato and Seneca to not be afraid of death. Just as Plato may have had some influence on later Roman stoics like Seneca, both Platonic Forms and Seneca’s Stoicism clearly influenced the Christian rationale for this concept of the soul. We cannot neglect the chain of influence throughout ancient western philosophy, and the impact of Platonic and Stoic ideas woven into the very fabric of our society.

---------------

''Works Cited''

Honderich, Ted. //The Oxford Companion to Philosophy//. Oxford: Oxford University Press, 1995.

Seneca. //Letters from a Stoic.// London: Penguin Books, 1969.

Plato. //The Symposium.// London: Penguin Books, 1999.
//“Which brings me to my conclusion upon Free Will and Predestination, namely let the reader mark it that they are identical.”  	-Winston Churchill//

//“We have to believe in free will. We’ve got no choice.” 	-Isaac B. Singer//

	Alvin Plantinga is widely acclaimed in the philosophy of religion community for his defense of theism, or more exactly, the logical possibility of theism. He uses contemporary modal logic to defend and formulate rigorous epistemological and ontological arguments (Honderich 683). Plantinga ultimately argues that belief in God can be a rational, logically consistent, and a warranted belief, even in the face of the evidential argument from evil.

''Problem of Evil''

The Problem of Evil previously jeopardized the logical consistency of theism. The precise argument for the Problem of Evil is often credited to J.L. Mackie. The theist’s difficulty arises from the following propositions:

# God is omnipotent, omniscient, and perfectly good (and extant).
# Evil exists

Mackie states that theists are logically inconsistent, forming a contradiction, when they claim that propositions (1) and (2) are simultaneously true (Mackie 263). Mackie relies upon the idea that a perfectly good, omnipotent, and omniscient being (God) would do all in His power to terminate (or never allow) the existence of evil.

Plantinga believes that theists are not explicitly contradicting themselves when they hold propositions (1) and (2) to be simultaneously true. He goes on to explain a series of arguments which appears to allow for the possibility (however small or great) for (1) and (2) to be concurrently true.

''The Free Will Defence''

The “Free Will Defence” is one of more effective theories used to further the logical consistency of theism. Alvin Plantinga is very famous for his expansion on this argument. He explains that, “If a person S is free with respect to a given action, then he is free to perform that action and free to refrain; no causal laws and antecedent conditions determine either that he will perform the action, or that he will not” (Plantinga 93). This particular definition of free will is not the traditional explanation, but Plantinga must be very concise about what he means by free will to examine the workings of a delicate argument, i.e. this is just the tip of the iceberg. His above definition only requires that nothing (not even God himself) can prevent a choice or determine the choice of a truly free person.

With a base understanding of what a ‘free person’ can and cannot in fact do Plantinga moves on to the core of the Free Will Defence. He explains, “A world containing creatures who are sometimes significantly free (and freely perform more good than evil actions) is more valuable, all else being, equal, than a world containing no free creatures at all” (Plantinga 93). He is very careful not explain a world in which God’s creatures are always free; primarily because one could easily argue that persons are not always free, that at times persons are simply driven or caused to behave in a particular way. Take for instance a mental disease or incapacitating drug, victims are truly not free with respect to any action because they are forced by an outside factor to act as they do in these circumstances. But, Plantinga doesn’t need permanently free persons. The Free Will Defence only requires that persons are at least sometimes free so that it might be possible for God to not be responsible for evil, and so that (hopefully) it will be apparent that theism and the existence of evil can be logically compatible. One must remember: Plantinga is only looking for the mere possibility of theism being logically consistent. And in the end, this is all the theist really needs (at this point in philosophy at least) to maintain the appearance of a rational belief.

Orthodox Judeo-Christian believers may not realize what the Free Will Defence requires. It requires, in some senses, a minimization of the transcendent God’s powers, or at least a more concise definition of what is and is not possible for God in this instance. Often, people are unwilling to place limits on God’s abilities, but in this rigorous argument, God has certain logical limits; Plantinga is straightforward about this issue. He explains that, “God can create free creatures, but he cannot cause or determine them to do only what is right. For if he does so, then they are not significantly free after all; they do not do what is right freely” (Plantinga 93). The Free Will Defender must accept that there are certain things that an omnipotent God simply cannot do, including determining (in any way) the actions of a truly free person. God can’t create a married bachelor, a squared circle, or make 2+2 equal 5, these are all propositions that Plantinga feels God has no control over. It should be noted that Plantinga is defending a freedom that is very extensive, far beyond what most consider just a normal “choice.” He defends a free will that in itself is a creative power, a power given by God, a power that God no longer has in all instances, a power in which that free person truly acts freely.

The problem of evil, and even the discussion of God, relies upon the assumption that there is moral good and moral evil. Plantinga examines the free person’s ability to create moral good and moral evil. He says, “To create creatures capable of moral good, therefore, he must create creatures capable of moral evil; and he cannot leave these creatures free to perform evil and at the same time prevent them from doing so” (Plantinga 93). Plantinga is further stressing the capabilities of those who have free will, and consequently refers to God’s lack of capability in that instance. Can God stop a person from performing a moral evil? Yes. But in the moment God would do such, the person (who is experiencing this divine intervention) will not be in fact free, for God prevented an action that a truly free person would have been capable of choosing.

The Free Will Defender believes that, “God did in fact create significantly free creatures; but some of them went wrong in the exercise of their freedom: this is the source of moral evil” (Plantinga 93). If free creatures, those who make certain choices outside the power of God, are the source of all moral evil, then God is not responsible for moral evil, because he didn’t create it. By eliminating the possibility for free creatures to create moral evil, God would have eliminated the possibility for free creatures to create moral good. An important aspect of his argument for us recognize is that only free persons (God as such is traditionally considered person as well) are capable of creating moral good and/or moral evil. Essentially, this leads Plantinga to explain that “it is possible that God could not have created a universe containing moral good (or as much moral good as this one contains) without creating one containing moral evil” (Plantinga 94).

''The Objection''

The previous argument only outlined ways in which an omnipotent and perfectly good being could possibly not be responsible for the existence of evil. But, as we will find, the most difficult argument for the theist to overcome is the problem of evil from God’s foreknowledge of evil. Plantinga beings to reveal this difficult problem when he says, “It is logically a possibility that there be a world containing significantly free creatures who always do what is right” (Plantinga 94). He does not really mean the Free Will Defender holds the above claim to be true. Instead, he says that the Free Will Defender is forced to reckon with the possibility of God knowing what free persons would do within a given possible world, and then choosing to create a world in which free persons would choose (of their own creative freedom) to only do what is right. Even worse, Plantinga shows that the Defender must answer to just the possibility of a world with only moral good and no moral evil. The Objector states:

(3) God could have created just any possible world he chose, including those containing moral good but no moral evil.

Keeping (3) in mind, the Objector goes on to say, “Being perfectly good, [God] must have chosen to create the best world [He] could; being omnipotent, [He] was able to create just any possible world [He] pleased. He must, therefore, have chosen the best of all possible worlds; and hence this world, the one [He] did create, must be (despite appearances) the best possible” (Plantinga 95). Leibniz put forth the idea that God, if he exists, must create the best of all possible worlds. The Objector will also side with Leibniz because it seems very rational. If God must choose to create the best of all possible worlds, and God can create a world with moral good and no moral evil (a world better than the actual, present world), and the actual, present world has both moral good and evil, then God did not create this world. The objector could easily to follow up his previous claim with: “God the creator does not exist.” What does the Free Will Defender say to an apparently valid argument like the objectors? Plantinga answers, “The Free Will Defender wonders whether there is a best of all possible worlds. Central to the Free Will Defence is the claim that God, though omnipotent, could not have created just any possible world he pleased” (Plantinga 95). The Defender rejects (3), consequently, a very rigorous argument ensues to show why (3) cannot be true.

''Possible Worlds''

Plantinga speaks in the language of “possible worlds.” We are faced with the question: “What possible worlds could God have created?” Obviously God created the heavens and the earth, and the universe, etc.—but, he couldn’t have created himself, or “numbers, propositions, properties, or states of affairs: these have no beginnings. We can say, however, that God actualizes states of affairs” (Plantinga 95). What the hell does Plantinga mean?

Painstaking arguments, such as the one Plantinga put forth, often assume that readers have a certain set of knowledge. To some philosophers, it is quite clear that God can only do what is possible for God to do, and so forth and so on. Logical constraints are already set upon God in this discussion. If God wasn’t subject to the laws of logic, then there wouldn’t be much point in questioning the logical consistency of the concurrent existence of both God and evil. Plantinga takes the logical constraints to be true, and so he must deal with the Objector’s argument, and utilizing a very rigorous logic to defeat the objection may be his only option. Plantinga introduces modal logic at this point in his writing. We ask ourselves: “What is a possible world?” A possible world is a world that differs in some way from our “actual” world; it is what many consider to be a hypothetical world. To dig deeper into the meaning of a possible world, one must understand the concept of contingent and necessary truth. A contingent truth is a truth that could possibly have been different. For example:

(4)	The North won the civil war.
(4’) 	The North did not win the civil war.

Even though (4) is actually true, can we not at least ponder the possibility that (4’) could in some hypothetical sense be true? Imagine a world that is almost exactly the same as our actual world during the point at which the South or the North would decidedly win or lose the war; and in this world only one difference occurred, the North did not win the civil war. A contingent truth is just like (4) or (4’), either could have possibly been true. Plantinga is primarily concerned with these truths, especially since they provide the most difficult problems for the theist.

A necessary truth is “true in all possible worlds” (Fischer 49). An example would be 2+2=4. Most people are willing to take for granted that whether the North won or did not win the civil, 2+2 would always equal 4. There isn’t a possible world in which 2+2=4 could be false. Often, necessary truths are self-explanatory. For example: “a bachelor is not married,” and “A is A,” represent self-explanatory truths that must be true in all possible worlds, thus they are necessary truths as well.

A possible world is simply a combination of propositions, these propositions range from necessary truths to contingent truths. A possible world will always have an internally, logically consistent set of truths. 

	Plantinga explains, “Properties are not creatable: to suppose that they have been created is to suppose that although they exist now, there was a time at which they did not; and this seems clearly false” (Plantinga 96). Properties are just ideas; all logically consistent ideas exist in all possible worlds. The color blue for instance is just a configuration of light waves, blue is a property, the configuration of light waves that makeup blue are true in all possible worlds, regardless of whether those light waves actually exist. Plantinga goes on to say that, “Necessary states of affairs do not owe their actuality to the creative activity of God” (Plantinga 96). Clearly the very possibility of properties is not created by God, number theory and rules of logic cannot be created by God. These exist with God. This may be a very hard thing to swallow for some theists, but Plantinga must have this understanding to further his argument, otherwise it appears that the evidential argument from evil is true. However, God obviously must actualize some states of affairs; those are the contingent states of affairs. Plantinga elaborates, “We may say that God can actualize a given possible world W only if he can actualize every contingent state of affairs W includes” (Plantinga 96). Basically, God can only do what is possible for God to do.

''Freedom''

	Plantinga’s argument becomes very difficult at this point in the text. He clarifies his explanation of free will when he says, “a person is free with respect to an action A at a time t only if no casual laws and antecedent conditions determine either that he performs A at t or that he refrains from doing so” (Plantinga 97). He is taking into consideration the concepts of contingency and necessity, both of which derive their meaning in his argument from whether or not they act as antecedent conditions. 

Free persons are not free to do anything; they cannot jump over Draper, or fly, or drink twenty gallons of vodka in an hour. What does it mean to be free? To be free is to have the ability to do otherwise (van Inwagen 20). But is this enough of a definition for Plantinga? He explains that, “If I am free with respect to an action A, then God does not bring it about or cause it to be the case either that I take or that I refrain from this action; he neither causes this to be so through the laws he establishes, nor by direct intervention, nor in any other way. For if he brings it about or causes it to be the case that I take A, then I am not free to refrain from A, in which case I am not free with respect to A” (Plantinga 97). 

''Contingency and God’s Inability to Create Some Possible Worlds''

	Plantinga explains that there are “contingent states of affairs such that it is not within the power of God to bring about their actuality” (Plantinga 98). God cannot cause the world to be such that I freely refrain from washing my dishes, for that wouldn’t be free at all. It is true that God can create a world in which I freely refrain from washing my dishes, but he cannot cause me to do so. He then explains that, “God could have actualized a given possible world W if and only if for every contingent state of affairs S that W includes, there is a time at which God can actualize S” (Plantinga 98). A world can’t be created unless God can actualize everything in it. Plantinga unravels his argument as he says, “Given just the possibility that there are created free agents, it follows that there are any number of possible worlds including God’s existence and also including a contingent state of affairs S such that there is no time at which God can actualize S” (Plantinga 98). There are possible worlds that God cannot create because he cannot actualize all states of affairs. For example: God cannot actualize a state of affairs that in which a free being will in fact take or refrain from an action. God could not have actualized a state of affairs in which free beings will in fact act morally and always refrain from moral evil, thus God couldn’t create a world where beings always chose what is morally good.
Response and Counterfactuals

The atheologian may still remain unconvinced, he or she could respond, “[God] may also know, furthermore, that if [He] creates me and causes me to be free in these circumstances, I will refrain from A. If so, there is a state of affairs [He] can actualize, cause to be actual, such that if [He] does so, then I will freely refrain from A” (Plantinga 98). The Defender is still not safe from the atheologian’s firepower. How does God’s foreknowledge of the future affect Plantinga’s argument? Plantinga launches off into this idea of counterfactuals, he uses the following examples:

(7) If Curley had been offered $20,000, he would have accepted the bribe.

(8) If Curley had been offered $20,000, he would have rejected the bribe is true.     (Plantinga 100)

	Plantinga points out that we often make the fatal mistake of assuming that either (7) or (8) must be true. Is every proposition necessarily true or false? On the surface, a reasonable person could easily that only (7) or (8) can be true, and that (if there is an answer at all) one of them must be true now. The Free Will Defender will say that we can’t possibly know the answer to that question. An example of a counterfactual is: if I was bald, then I would receive an A on my religion seminar paper. The antecedent would be my baldness, and the consequent would be me receiving an A on my religion seminar paper. The counterfactual appears absolutely ludicrous at face value; the consequent does not follow the antecedent. Plantinga shows us that those who believe that either (7) or (8) must be true are making a counterfactual statement. 

We journey further into the possibility of counterfactuals being either true or false. Plantinga asks us to “consider those possible worlds that include its antecedent; and then of these consider that one W that is most similar to the actual world (7) is true if and only if it’s consequent – that is, (9) Curley took the bribe, is true in W. A counterfactual is true if and only if its antecedent is impossible, or its consequent is true in the world most similar to the actual in which its antecedent is” (Plantinga 100). 

Counterfactuals can only be true in two ways. We must understand that the antecedent doesn’t actually causally necessitate the consequent. If Curley is free, then no one can know whether or not he would have accepted the bribe. The Defender simply needs to reject the validity of counterfactuals, this allows for a free person to truly act freely, removing the argument (at least for now) that God knows the answers to counterfactuals.

	Of course God can choose whether to create the universe, or whether to create Curley, or whether to make Curley free, but if Curley is made free, then only Curley can choose to refrain or take any given action (in which he is free).

''Leibniz’s Lapse''

	Leibniz and the Objector make the mistake that God can create any possible world, and that God would (by his very nature) choose to create the best of all possible worlds. God clearly cannot create the best of all worlds (not necessarily possible ones), that is: a world with moral good and no moral evil. I agree that Leibniz’s Lapse is a mistake. Obviously, God is giving a creative power to all his free creatures, or at least that is the case within the Free Will Defence. But, why can we not say that God still didn’t create the best possible world possible for God to create? An overarching structure of God creating a universe where he did not possess all creative powers might in fact be what he considers to be the better, if not best, of all possible worlds. Leibniz can simply imply that a world with moral good and no moral evil is logically inconsistent with the existence of God, especially in consideration of the actual world. Doesn’t the Defender arrive at this very conclusion as well? Leibniz isn’t wrong, his argument simply needs to be put into context. The Free Will Defender still believes that God must create the best of all possible worlds that is possible for God to create, and God can only possibly create worlds in which there will eventually be both moral good and moral evil which result from the free choices of persons within that world.

''Circling Back to His Original Position''

The Free Will Defender employs “the truth that a pair of propositions p and q are jointly consistent if there is a proposition r whose conjunction with p is consistent if there is a proposition r whose conjunction with p is consistent and entails q” (Plantinga 114). He does not need to show the probability of these possible worlds, in fact, he might not even think anyone could actually know the probability. Plantinga excellently concludes:

The essential point of the Free Will Defence is that the creation of a world containing moral good is co-operative venture; it requires the uncoerced concurrence of significantly free creatures. But then the actualization of a world W containing moral good is not up to God alone; it also depends upon what the significantly free creatures of W would do if God created them and placed them in the situations W contains. Of course it up to God whether to create free creatures at all; but if he aims to produce moral good, then the must create significantly free creatures upon whose cooperation he must depend. Thus is the power of an omnipotent God limited by the freedom he confers upon his creatures. (Plantinga 115)
	
	Does Plantinga make a good ontological argument? No. In fact, Plantinga simply put theism, and certain types of knowledge, into a new category. Because we can’t know certain things, and because of how he defines what it means to be free, and because of how he defines what is and is not possible for God to do, both the theist and atheist are left only with a general possibility of God’s existence. Philosophers of religion are, however, indebted to Plantinga, because this defense gives the theist at least the possibility of holding a logically consistent belief. The theist no longer is clearly making a logically inconsistent statement when they hold the both the existence of God and evil to be simultaneously true.

''Creative Creatures''

	Plantinga’s rigorous argument brings to the forefront of religious philosophy the concepts of personhood and free will. He develops a system that delicately fits together a possible world in which evil and God concurrently exist. Originally, I would have had problems with placing limitations on God. As a Christian, I prefer to think that I have choice (and that keeps me responsible for my sins, and God responsible for no sins); but, I also like to think that God could, and would, at any point He felt necessary prevent me from performing evil actions. In reconciling what it would mean for God to prevent moral evil, and the fact that this doesn’t appear to happen that often, I have been struck by sense of awe at how much discretion is left to the free person.

 Freedom, at least after reading Plantinga, appears to be so much more than a mere choice to buy jelly beans, to recycle my plastics, or to mow my lawn. For Plantinga’s argument to work, God has given a gift beyond measure to His free creatures: the ability to create. I believe humans do have God-given free will, and I believe that this requires that God allows me to create specific truths, truths about my faith, beliefs, attitudes, and behaviors. Not only has God allowed me to create, he gives away his ability to control my actions in all circumstances that I act freely. Free will is the power to create.

------------

''Works Cited''

Honderich, Ted. //The Oxford Companion to Philosophy//. Oxford: Oxford University Press, 1995.

Mackie, J.L. “Evil and Omnipotence.” //Philosophy of Religion//. Ed. Michael Peterson. Oxford: Oxford University Press, 2001. pg. 263-273.

Plantinga, Alvin. “The Free Will Defense.” //God and the Problem of Evil//. Ed. William Rowe. Oxford: Blackwell Publishers, 2001. pg. 91-120.

Van Inwagen, Peter. “The Incompatibility of Free Will and Determinism.” //Agency and Responsibility//. Ed. Laura Waddell Ekstrom. U.S.: Westview, 2001. pg. 17-29.
	The book Silence by Shusaku Endo reminds me of my faith; it reminds me of my walk with Christ. The story is beautifully written, but I’m not amazed by how well it was written. I am amazed by the subject of the book. Endo captures the very essence of the Christian life, falling down in the face of pain and suffering, and the glimmer of hope beyond our personal failure.

	Have I ever suffered as much as the Christians in this book? I admit I have never been persecuted like the Japanese Christians and missionaries in this book. I am almost ashamed of my faith, or lack there of, when I read about people (fictional or non-fictional) who have the courage to sustain faith even through suffering.

	The book shows humanity’s inevitable failure. The father Sebastian Rodrigues endures his faith, almost as if his faith isn’t even the cause of suffering, but simply has a component of suffering in itself. The father does well to prevent his own apostasy for most of the story. He holds out, but in the end, he fails. I’m almost at the point where I don’t blame him. I can see why he made his decision. I can’t help but think that I’d make the same choice as well. Actually, I’d probably have caved into submission even sooner.

	The antagonist Inoue was not what I expected. I thought he would have look more savage, I’d expect him to be less civil with the father. I’d hope that Inoue was just a barbarian. But, the Lord of Chikugo was crafty and wicked. Inoue wanted to break the Christians, not make martyrs.

	Kichijiro was by the far the most interesting character in the story. Obviously Kichijiro was a Judas, but he was driven back to his faith again and again. I don’t know whether to be confused or simply remind myself that most Christians, including myself, are like Kichijiro. 

	The pain in this book isn’t just physical suffering. The physical suffering spurs on choices that lead to a greater pain. The greatest pain is the pain of apostasy. It is the suffering of those who turn away from G-d because of physical suffering and persecution. It breaks the person, and causes shame. We dishonor G-d by failing Him.

	Am I supposed to think that the priest’s actions at the end of the story were a good thing? The priest didn’t think he was committing a sacrilege against G-d. The open admittance of betrayal seems to make the priest guilty in the end. I cannot see how betrayal really leads to a greater form of happiness or love the Lord. I absolutely believe I would turn away from G-d in the face of the torture and suffering found in this story, but I know that it is the wrong choice. I’m not saying that I would have made a different choice than the priest, but clearly, publicly betraying G-d, committing apostasy (or leading others to believe this is the case) is simply wrong.
	
	How does one begin to compare and contrast Paul, Apostle to the Gentiles, and Dante, author of The Divine Comedy? Paul cultivated the ekklesia, organizing the church as an institution within Gentile communities, while Dante had the benefit of a millennium of experience and knowledge, lived with a medieval outlook. Dante’s perspectives on “Christianity, God, and God’s plan for humanity” may be starkly different from the Apostle Paul’s perspectives, however, we cannot neglect the basic links of faith shared between both Paul and Dante.

	Paul is one of the most powerful human personalities in the history of the Church. He was a missionary, theologian, and administrator. Paul often acted as an apologist and had a high impact on Christian theology, most notably found in his Letter to the Romans. He argued against other Christian leaders on disputed issues. He discussed the ongoing authority of the Jewish law; he defended the maintenance of high standards within the decline of the practices of kashrut, circumcision, and other Jewish law; and, he explained God’s plan for the Gentiles. Paul distinctly wrote about God’s intentions for both the Jews and Greeks, the concept of the Chosen, and the relation between the body and the spirit. Paul always maintained the necessity of unity, respect, and order. He was apocalyptic and firmly believed in the God’s providential hand in the world. Paul helped form the foundation of the early church; he was God’s instrument.

	Dante Alighieri was a political philosopher and Italian poet who wrote the epic poem The Divine Comedy. Dante depicts an after-life based on “individual freedom and responsibility,” and “divine retribution and reward” (Honderich 176). In terms of his own Christian understanding, Dante was greatly influenced by the scholastics. Very prominent philosophers of religion and influential theological arguments came before Dante: Augustine’s masterful fusion of Platonic philosophy and Christian theology, St. Anselm’s ontological argument, and St. Thomas Aquinas’ synthesis of Aristotelian reason into theology. Dante’s Inferno is the most widely read portion of his comedy. He depicted characters with ironic punishments befitting the crime committed. Dante’s readers are struck by the sheer order, unity, and symmetry present in the poem. Dante’s Inferno captures fundamental beliefs of Christian orthodox doctrine, while illustrating a vivid Hell; his poem is intertwined with a medieval understanding of the world and God.

	The paradox of the material and immaterial is a distinctive feature of both Paul and Dante. Paul spoke more decisively on “the body.” The relation between “the Body of Christ” and the physical form of Jesus is a difficult dualism to understand, even modern Pauline scholars struggle with what Paul meant. Dante was clearly influenced by scholasticism; especially in reference to the paradox of the material and immaterial. The basic medieval solution to this dualism is to understand the immaterial to be more real and closer to God while the material world is less real and further from God. In Canto 3 of the Inferno we see shades and more immaterial beings, while in Canto 34 we see ice, lead, and heavy material. Dante obviously intended for this gradual increase of materiality to be apparent as he traveled closer to the bottom of Hell.

	Paul’s primary theological problem can be found in the two dispensations, the first being God’s election of the nation of Israel and His gift of the law to Israel, and the second as His offer of salvation to any all (Jews and Gentiles) who have faith in Christ Jesus (Sanders 137). Paul attempts to smooth the rough edges between the Old and New Testaments. Paul believes that God preordained this transition from Judaism to Christianity. He accepts (in some aspects) Roman dominion; he certainly would be willing to accept that God had preordained the Roman Empire so that Christ could fulfill prophesy. Dante also supports this idea of a providential hand of God. Medieval thinkers had to explain the existence of the Roman Empire and the development of the early church in terms of providence and predestination. The Roman Empire was a precondition to the birth and death of Jesus Christ. Dante fittingly used Virgil in the Inferno, who described the initial establishment of an imperial authority in the Aeneid. Dante’s choice of an Roman epic poet indicates a respect for not only the great artist himself, but also signifies Dante’s belief that Virgil, like many founders of Roman society, necessarily existed for the sake of Christ, so that Christianity could inevitably take root and spread to all people.

	Paul, like the earlier Christians thought that the world was soon coming to an end; “the coming of the Messiah meant that the end had begun, and his resurrection was the first act of the eschatological scenario” (Meeks 175). Paul uses apocalyptic imagery to respond to concerns of church members who had passed before the return. Paul eventually declares that the community of Christians crosses even the boundary of death (Meeks 175). The primary function of apocalyptic language was to reinforce the cohesion and unity of the Christian community. In turn, this would allow for Christianity to spread rapidly while remaining more stable (with fewer interruptions). Dante did not speak much about the apocalypse. His lack of focus on this subject is mainly because the apocalypse was a difficult issue for those who realized that Paul’s outlook of the future was wrong (here is where the millennium of experience clearly changed Dante’s perspective). But, Dante’s poem The Divine Comedy, especially the Inferno, illuminated generations with vivid descriptions of divine retribution and reward. Readers of the Inferno become more mindful of what is meant by the concept of judgment, which is not much different from Paul emphasis on the importance of knowing where one was going in the afterlife.

	The Apostle Paul paved the way for early Christianity. The Medieval outlook and philosophy could not exist without Paul’s work. Moderns must understand that Paul’s theological, evangelical, and administrative had one of the largest impacts on western tradition, one of those traditions being Dante’s medieval outlook and experience. Although they lived different lives and looked at the world through different lenses, both the Apostle Paul and Dante are both connected by their faiths.
	





Works Cited
Achtemeier, Paul. Interpretation: Romans. Louisville, Kentucky: John Knox Press, 1985.
Alighieri, Dante. Inferno. Trans. Charles Singleton. The Norton Anthology of World 
Masterpieces. New York: W W. Norton & Company, Inc., 1999.
Honderich, Ted. The Oxford Companion to Philosophy. Oxford: Oxford University Press, 
1995.
Meeks, Wayne. The First Urban Christians. 2nd ed. New Haven: Yale University Press, 
2003.
Perry, Marvin. Western Civilization: A Brief History 5th ed. Boston: Houghton Mifflin 
Company, 2005.
Sanders, E.P. Paul: A Very Short Introduction. Oxford: Oxford University Press, 1991.

	
//Not posted on Hypercynic, but it was a significant letter I wrote around the same time.//

Dear Mrs. Phelps,
 

I apologize for any silence or lack of communication on my part. I am a very (very) vocal person within the proper context or group of people. In most cases, over the past year, the verbalization of my opinion would not have resulted in anything truly useful. In cases that I don’t know exactly what I ‘ought to do’ I prefer to follow some principles of Utility. Hence, my lack of communication overall—for any seeming rudeness I apologize. I meant no harm. Now that I am finished teaching at JHHS, and moving on to other things, I feel it is appropriate and useful to “open up”, so to speak, and express my true opinions. I questioned whether I would actually give this letter to you at all. I have considered the possibility that you may dismiss my thoughts, and perhaps passionate opinions, as childish rhetoric or the expression of some inexperienced and ungrateful colleague. I believe, however, as you are truly a kind and wonderful person, you will be objective and charitable as you read this letter. Please excuse my casual and fragmented writing style, as I hope the way in which my ideas are expressed will not take away from the validity of the statements.
 

I have accomplished so much in such a short time. Last year I was single, childless, and without a college diploma—now I am somehow concerned with money, housing, marriage, children, insurance, and all of the wonderful responsibilities of adulthood. Part of my ‘Rite of Passage’ into adulthood has been holding a real job. Teaching English is a real job. Thank you for giving me the opportunity to teach high school English over the past year. You have guided me through a testing and time consuming educational experience.
 

I am happy with most things in my life, with the exception of my job as a teacher at John Hardin High school. There are a number of reasons that I have not been happy about this component of my life. I wish to explore these reasons, partly because it is important for me to understand what has occurred, in some therapeutic sense, and in part because you have a right to know. The year did not go as smoothly as I had hoped. A number of barriers and problems arose that have caused me to realize that I am not meant to teach here, or in the public school setting at all. I feel, at the very least, as you provided me the opportunity to teach in the first place, I owe you a proper explanation of my reasons for not pursuing a career in teaching high school English.
 

You once phrased my experience as being “baptized by fire.” That statement is so very true. Everyday I came to work, I felt as if I were in a hellish war zone. Teaching is difficult, especially when you’ve never taught a population like John Hardin’s before. No matter how much meta-teaching one might receive in a college class, I believe people are never truly prepared to teach in the actual classroom (I know I certainly wasn’t prepared). Ironically, nothing we teach can completely prepare these kids for the real world either. Even lacking preparation, I do not regret the journey or the job. I have lived and learned, and I am pleased and greatly honored to have taught at this institution. Regardless of my conclusions about teaching here at John Hardin, I want you to know that you have my deepest appreciation and respect—you have given me an opportunity that few will ever have. This year has been life-defining and is sure to set the course of my life. Thank you for being a friend, a mentor, and an investor in my future. 
 

I love both learning and teaching. I am called to these professions, specifically teaching, as a vocation and a purpose. Teaching is more than a job or a lifestyle; teaching is my calling. To whom much is given much is required. God has blessed me with an unmatched mind, I must, therefore, use what God has given me to help others by distributing knowledge and thought. I am designed to teach others to think. You would expect JHHS to be a proper location to fulfill my purpose. So, why would I choose to not teach at JHHS?


The purpose of a school is to learn, teach, acquire knowledge, and think. Unfortunately, I find here at John Hardin, and probably in public schooling in its entirety, people are not usually concerned with actual learning and teaching. There are exceptions to my basic generalization, but overall, as a relatively objective outsider, I have found this to be true in most all cases. Don’t get me wrong, learning does occur. But, is that learning concerned with the correct topics and concepts? Is it substantial and sufficiently thought provoking enough to create lifelong learners? --Clearly not. We may, therefore, conclude that John Hardin is not acting as a school in the truest sense of the term—we have not fulfilled our purpose to the fullest extent. 
 

Why haven’t we? Is it the fault of the teachers? To some extent maybe, but for the most part I would say, No. Who is, in the end, responsible for the failures of public schooling? The parents and students themselves of course! There are two significant reasons why schools are failing. Public schooling fails because of a political climate that removes self-responsibility, and it also fails because people, in general, are becoming relativists lacking the desire to seek truth.


School wasn’t always like it is today. In the past, parents and students were held responsible, and were, in general, more concerned with academic progress than the parents and students of today. Why the change in our parents? Here is a tip to understand people: Modern parents and students are dim-witted—they are cogs to be controlled. This doesn’t mean they aren’t actually responsible for their actions, but rather, they are easily distracted and manipulated. Who distracts and manipulates them, and why?
 

Politicians and power-hungry pseudo-teacher careerist administrators are at the very core of the public schools political problem. People want power; power is acquired and maintained via a content public. School administrators and especially politicians will say and do anything to get the vote. The struggle for power of these governmental and educational politicians lead to the public declaration of two principles: 1) The school is solely responsible for the beliefs and behaviors of children, while neither the children themselves nor their parents are responsible for their own beliefs and behaviors, and 2) all children are ‘academically’ equal. These are very dangerous and disturbing ideas. Of course, these ideas are easily spread because they are popular—they relieve the moral burden of a parent, while leaving a ‘way out’ for students. Parents, and society in general, simply do not want to take responsibility for their actions and the actions of their children. A politician can easily soothe the ears and minds of parents with the idea that someone else is actually responsible for the failings of these children. If Johnny is failing English, it must be the school’s  (or teacher’s) fault. Parents want to believe they did what was best for their child, and are easily led to the conclusion that anything that goes wrong must not have been their responsibility, but instead must be due to the menace of chance or the villains we find teaching in the public school system. We as teachers know better. But, most people do not understand this large socio-political problem. Essentially, people are afraid of the truth; People want lies. Politicians are more than willing to give them lies to gain political support (power). Those ideas changed the social and parenting landscape—now, parents want answers from the school system as to why their children are smoking dope, failing classes, increasingly suicidal, rebellious, disrespectful, amoral, and prone to screw up. Parents really believe that it is the fault of the school system and not the fault of themselves and their children.
 

People are cogs in a system. Even given their free will, they naturally gravitate towards their conditioning. The attitudes and behaviors of parents and students cannot and will not change without the proper social conditioning. This conditioning can only occur, ironically, through those who lead and teach them how they ought to think and how they should behave—a duty of a parent. So, yes, they are in the end responsible for their actions. However, I do not see their beliefs and behaviors changing without a shift in our current political climate. Primarily, we require a transformation in that echo chamber which disseminates the ideas of social irresponsibility—we must prevent any incentive for this chamber of politicians to blame the school system instead of the voter. In my opinion, that isn’t going to happen. As a result, the same hogwash will be embedded in the minds of the general public, parents and students, preventing the public school system from holding these parties responsible for their own actions. Without holding parents and students responsible, what incentive do they have to put forth the effort and to maintain the discipline required to learn and grow? 


The second reason public schooling, and even the public in general, is on the brink of destruction is the philosophical evolution from reason to irrationalism, from to truth to “truthiness,” from reality to relativism. We, as a Western culture, have lost sight of the concept of truth. You may have heard something like: “what is true for you may not be true for me” (I got this from students analyzing poetry all the time). Or maybe you’ve heard, “what is right for you is right for you, what is right for me is right for me.” This sort of thinking smacks of post-modern relativism. It is the view that the meaning and value of human beliefs and behaviors have no absolute reference, and especially that moral or ethical propositions do not reflect absolute and universal moral truths—instead all “truths” are relative to social, cultural, historical, or personal references, and there is no single standard by which to assess any proposition of truth. When we think through relativism to its fullest extent (ironic to say the least), we arrive at a number of conclusions, including:


# A blatant contradiction in meaning and significance such that it is impossible to discuss anything as it is “all relative” to one’s perspective. Apparent truths, even axiomatic ones, like 2+2=4, have no meaning, and can be whimsically denied through the relativistic idea that reality is what we perceive it to be.
# Amorality, and consequently, that it is meaningless for the moral or ethical judgments or acts of one person or group to be judged by another since there most likely aren’t universal moral standards in the first place.
# Personal responsibility is an illusion created through some form of social Darwinism.
#  Egoism, or maybe even narcissistic egotism, claiming that an individual should pursue their own interests with zero regard for the interests or rights of others.
# And, connected to Egoism, yet still distinctively different, Hedonism—the complete lack of concern for anything but one’s own happiness (often short-sighted as well).


How do you teach truth to people who don’t believe in absolute truths? How do you instill morals into those who believe ethics and morality are illusions? You can’t reason with a true Romantic, and you sure as hell can’t reason with a post-modern relativist. Society has generated a group of idiots…a lot of them. What then should we as people (specifically teachers in this case) do? Since politicians will be politicians, and the content of the conditioning will not change, we must then: Let the system fail, and be ready to pick up the pieces! Only when crack addicts hit absolute rock bottom will they choose to rebuild their lives. Let the post-modern world hit rock bottom, and be there to equip them when they are ready to change. Our job, as educated and intelligent teachers, is to do exactly that—to let the public feel the complete consequences of their actions, and then help rebuild and restart. If we expect them to be responsible for their actions, then let them be responsible---let them have what is coming to them. This doesn’t mean innocent students who are respectful, moral, and hard working will be hurt. If anything they will benefit as the superstars of their generation. They will be the survivors in the game of  ‘survival of the fittest.’


So, after reaching these conclusions, I must also defend the premises. Most importantly, I need to show that the school is failing in the first place. I have worked inductively, and I apologize for that. An explanation and some elaboration are certainly in order. The evidence of a social and/or educational breakdown is lacking. As previously asked, ‘why would I choose not to teach at JHHS?’
 

Offered are a few glimpses of my experiences at JHHS that may help answer that question. Hopefully, these examples will show some of the reasoning behind my distress. With the knowledge of what has occurred, and why it occurred, we will be in a better position to understand my choices concerning my future career(s). Provided, in no particular order, are a few encounters and basic overviews of the past year that support my claims against parents, pupils, and politicians.


#      Sports are more important to this school than academics. 
##      Football players are given precedence and special treatment, to the point that administrators will call me during class to “do whatever it takes for Johnny to be in the game tonight.” Where is their concern for the other students in my class? 
##     Our basketball team attends the sweet sixteen (not the actual state championship), and JHHS is let out of school. The very same week our academic team went to the state finals, and JHHS wasn’t let out of school—we barely even heard announcements concerning the academic team. We don’t have “pep rallies” for the academic team or for academically successful students.
##      Coaches are hired for their ability to win games, not their ability to teach in the classroom. Coaches are also the first to receive administrative positions.
##     A ridiculous amount of money and effort is put towards our sports teams, while many teachers don’t even have enough books for each student.
 

There are three arguments that would give us reason to allow sports in our school. The first would be the physical fitness acquired through sports, the second would be the entertainment provided by sporting events, and finally, sports can be used as a means to socialize children. We have physical education to cover the first. Entertainment can be found elsewhere. The last reason, dealing with the process of socialization and mental development of children, seems like the best reason.
 

School is a place to develop a number of social skills, including many learned through sports. These social skills, however, can be learned through avenues other than sports. Therefore, as there are many options to socializing these children, sports are not truly necessary to the development of a child. We have no vital reason to uphold sports as much as we do. School is clearly a place of learning though—academics, rather than sports, should be the priority of school. 
 

#      Tests scores are the greatest concern of the school.
##      We were forced to use multiple-choice and open response tests simply to prepare our students for testing. There was no concern for the validity or effectiveness of this testing method. High-test scores were the only concern.
##     Curriculum mapping is based on preparing students for the test. The curriculum is not concerned with teaching kids to learn and think, but instead to make sure the content is fresh in their minds, so as to help them regurgitate information for high-test scores. In the creation, organization, and execution of the curriculum, cramming content knowledge is more important than making sure the students are thinking.
##     I have been commanded on numerous occasions to “Teach the test.” The commander is not actually concerned for the academic welfare of the student, but concerned with high-test scores and not getting into trouble.
## In order to “teach the test,” traditionally relevant curriculum and activities have been thrown away. For example: English classes no longer read “The Scarlet Letter,” instead they watch the movie.
## As a relevant side note, many schools base their teacher salaries on the teacher’s ability to get high scores on tests.
 

In my eyes, “Teaching the test” is one of the more disgusting educational practices. Even teachers themselves uphold this practice! Why? There are only three explanations: 1) the teacher/administrator actually believes these tests are effective in assessing a student’s academic abilities, 2) the teacher/administrator believes that test scores affect school finances, and, he or she attempts to raise them as high as possible, and/or 3) the teacher/administrator does what he or she is told, and “teaches the test” so as to not get into trouble. The last two reasons are clearly immoral and irrelevant to the question: “what is best for the student?” The first reason, if based on true claims, would seem acceptable. 
 

Are these standardized tests actually effective in assessing a student’s academic abilities? No. Multiple choice questions and open response questions only test a student’s ability to follow certain test-taking rules and regurgitate content knowledge. No good assessment of writing or thinking skills can be found in these tests. 
 

The fact is: nobody actually cares if you can recite the characteristics of Puritanism, or regurgitate examples of Romantic literature, or explain the basic outline of a short story, when you don’t have the ability to think and to apply what you have learned in some meaningful way. Content knowledge is pointless outside of the ability to use it and think about it. The public school system, possibly due to political limitations, has forgotten this fact, and instead has opted for a incredibly awful method of assessment. If I can instill in my students the ability (and the desire) to think, then I know they will do fine in life. Memorizing and regurgitating content knowledge, traditionally found only in grammar school, is easy if you possess the ability to think. 
 

“Teaching the test” is an awful practice. We should be ashamed. How dare we create a generation of kids that view schooling and education as a series of hoops to jump through, rather than a creative and fantastic world of learning? I am not going to live a lie, and think that I am really teaching kids the important aspects of education, primarily the ability and desire to think and reason, when I am cornered, commanded, and forced to falsely teach in a manner that is designed to merely raise test scores.


# Teachers are blamed for the failures of students, while parents and the students themselves are not held accountable for each student’s academic performance, behavior, and attitude.
## When looking at demographics and statistics concerning the academic performance of students, especially of students with low test scores, it is assumed that we as a teacher have failed to reach a certain segment of the population of JHHS. We refuse to accept that it could be the community, family, or culture the child lives within that conditions the child to perform so poorly. We relieve the burden of academic responsibility from the student--as if we as teachers form the primary reason that he or she is failing.
## When a student fails a class, a parent is encouraged, via the allowance of such behavior and the incentive of a higher grade for their child, to call the teacher and complain about his or her child's grade. Teachers are almost forced to respond to complaints by giving the students grades they don't deserve. Bonus and makeup work are already expected, and undue leeway and special treatment are becoming expected. 
## Parents and students actually get away with cussing out a teacher. 
## Students are given far too many chances to commit obscene and disrespectful acts, over and over, until they are finally removed from the school.
## Due to a poor disciplinary system from the top down, and our mysterious attempts to remain politically correct, if a student does something wrong, or is in the habit of doing something wrong, we hold that the child has been conditioned into such behavior, and that somehow, because the child was conditioned in this way, the child is not responsible for his or her actions. Therefore, it becomes the teacher’s responsibility to accept this conditioning, lacking any true objective and impartial judgment, and continue teaching while a student is disruptive.
## Teachers are blamed for not using diverse enough teaching methods. Example: not using enough hands-on, group-work, or technology in the classroom.


While I recognize that some people shouldn’t be teachers, either through their misbehavior or lack of qualifications, I believe most teachers do the best with what they have been given, and do actually deserve their position as teacher. The fact remains that teachers are wrongly held responsible for the failures of students in both the academic and social realms. No matter what he or she does, the public school teacher is someone who simply can’t win.


I am appalled by the social allowances made in this school. Regardless of the household they are raised in, people are responsible for their actions. If a child is loud and obnoxious, even if they are raised in a household or culture where this is acceptable, I should not have to put up with their misbehavior. Let the child bear the rod, and believe me, they will learn not to be loud and obnoxious.


Academically, a teacher cannot force a student to learn. If a child chooses not to learn, then guess what, that child isn’t going to learn. I should not have to motivate children—the child themselves or their parents should be the motivating force. Teachers are expected to be supreme motivators, while; ironically, they lack any real power or control to hold a child responsible for his or her actions.


If a child of a powerful parent has a bad grade, I am pressured to pass or raise the score of that child, even if they do not deserve the grade. The only incentive I have to fail a child is the fact that they don’t deserve it. Failing a child means complaints from all ends, paperwork, phone calls, and stress. Once mommy or daddy complains, the game is over, and I am almost forced to just hand over a grade—whether it be through late work or bonus work, I am expected to cut a deal with these kids. Nobody could possibly believe that we should just fail the child.


Keeping up with a child’s academic performance is not a teacher’s responsibility. It is the responsibility of the parent. I shouldn’t be forced to “save-my-butt” every time a child is too lazy or incompetent to successfully navigate my class by writing and calling home every week.


As for teaching methods: Whatever happened to the good old Socratic method? That method seemed to work. I find that many modern teaching and learning methods are not very useful as they miss the entire basis of education in the first place. Knowledge is abstract, period. Thus, people who are proficient with abstract ideas will, generally, be better learners and thinkers; while those who are not talented with the ‘abstract’ will, generally, be poor learners and thinkers. The fact is: if you are attempting to teach an abstract subject, then students must use the parts of their brain to learn those abstract truths. So, yes, school discriminates against those who are not a specific type of learner. And? Hasn’t this been the case for thousands of years? I see no reason to cater to people who will never be good learners. Give them what they need, and move on. They weren’t meant to be in school for an extended period of time—the world needs janitors and fast-food workers, and that segment of the population can fulfill that purpose.


In the end, a student’s behavioral problem is not my problem. I am here to teach and instruct—to distribute knowledge! I am not here to socially condition students, nor to teach them how to behave. These are the responsibilities of a parent, not a teacher.
 

# It is widely accepted that all children are academically equal (or at least equal in potential).
## Smart kids are punished with more work, while “academically disinclined” kids are simply passed through the grade levels.
## The academic performance levels of students in my classes varied to extreme degrees. I often had classes where I had college level students who are forced into the same classroom as students who could barely read.
## I was forced to teach to the mid-level students in the class so that I didn’t go so quickly that academically disinclined kids didn’t understand the material at all, and so slowly that I bored my smart kids completely to death. In the end, I really did go too fast for academically disinclined kids, and too slowly for smart kids—I had no way to help those children reach their potential.
## We expect all students to reach a certain level of proficiency in areas that are often not directly pertinent to the majority of our students will need in the future. 


The belief that all children are academically equal, or at least equal in potential, is absolute madness. All children, academically speaking, are not equal. Some kids will never be capable of completing Calculus or reading Beowulf. Some kids, even at young ages, would be bored of completing Calculus or reading Beowulf, as they would find these to be too easy. As we have so many students with “equal potential,” we are forced to create an environment that is not conducive to growth for those who are above or below the academic capabilities of the mid-level student.


This system is unfair to those who aren’t mediocre. Students that need help will never receive it because I don’t have the time in class to cover each and every point three times over. Students that are extremely intelligent are bored out of their skulls because I have to go at a slower pace for the rest of the students. 


Did you know that students on the lowest end of the learning curve of Kentucky schools are not referred to as special education kids, or identified as a student that needs tutoring or extra help, until they are at the very least FOUR years behind the grade level they should be at? I’m sure that a student that never learned to read by age 12 is somehow actually going to be emotionally ready to learn to read after social pressures have collapsed whatever hint of self-confidence the child may have possessed in the beginning…yeah right!? There is no hope for those kids inside the public school system. 


Students on the highest end of the learning curve are punished for being intelligent—we as teachers are supposed to “modify” the curriculum and simply hand these kids more work to do than the average student. I refuse to give smart kids more work to do for no reason. If anything, we should at least ‘magnet’ those children together, and let them excel elsewhere. We keep them around because they give us some glimmer of hope for the world and the next generation. 


# Remaining politically correct is so awfully important to the school system. This subversive sensitivity isn’t even used to provide equality among students, but instead, to prevent law suits.
## Giving actual statistical evidence of a claim having anything to do with race, ethnicity, gender, or any background is automatically suspect in the eyes of administrators.
## Discussing issues concerning minorities is discouraged, as if students must simply swallow the opinions of the school without thinking for themselves.
## Controversial issues or statements cannot be evaluated or used because it could “offend someone.” Even if these concepts are the very ideas that our students will approach in their daily lives.


Political correctness is a creation of relativism. You are what you eat, what can I say—even teachers and administrators are brainwashed. Sometimes the truth is offensive (no matter how you phrase it). Tough luck! Truth is truth, and if you are offended by it, then I am offended that you are offended by what I said, and then you’ll be offended by me being offended, ad nauseam/infinitum. To be PC is already absurd to some extent; to be PC because you could get a lawsuit is just pitiful.


Just because an issue is emotional or politically charged doesn’t mean we shouldn’t approach the issue. If anything, those are the issues we should be approaching, as they are currently relevant. It is a good place to start setting an example of when, where, why, and how we as citizens of humanity should be thinking about and pursuing these types of controversial issues.


6) Some teachers and many administrators have become careerists, lacking the moral fiber to do what is right, while adhering to any actions that may boost their professional appearance.


I will go no further in my examples on this subject. I am disgusted enough as it is. Naming names will do no good, and could only hurt an already difficult situation. My experience on this playing field is real. Believe me, I’ve seen far too many cases of backstabbing, gossiping, and flat out sabotage. It has been my experience that these people are socially dangerous. I do not have the means, nor the will to use their vile political tactics against them to defeat them. Too many administrators are willing to give up actual thinking and education for metateaching, test scores, and the ease of simply giving in to the will of the parents or student.



Personally, I have felt discriminated against in two ways (not by you of course).


1) I am discriminated against because of my age.


You told me from the beginning this would be the case. I was an idealist enough to believe it may not be true. I was stupid.


I know I am young, new to teaching, and bound to make some mistakes. But, surely all teachers were clearly, at some point, ‘new to teaching’ and ‘bound to make some mistakes.’ Not all teachers are young when they start. But, age shouldn’t make a difference. It, unfortunately, does make a difference—and maybe that has to do with the mindset of employers in general. But, it wasn’t just the employers; it was also from a few of my fellow faculty members. I really got the feeling from a number of teachers (and even overheard a few) that someone my age should never be teaching, especially not in a high school setting.


While being evaluated, I found that, because of my age, I was critiqued quite harshly compared to how someone older would have been critiqued.


I have been chastised for following directions on the specific occasions that teachers were asked to wear a specific type of dress and color. Apparently, I looked too young. You may have noticed that, excluding six days, I wore a tie and dress pants every day. It isn’t like I was attempting to make a fashion statement—I was obeying directions in the first place. What other teachers were pulled aside because they wore a red t-shirt for spirit week, as they were asked to do in the first place, as if they had committed some obscenely unprofessional act? I call it self-righteous hypocrisy. 


In all honestly, I feel I have damn well earned my position. Maybe I don’t have a master’s degree. Maybe I don’t have ten years of English teaching experience. But what do those things have to do with actual successful teaching? Many of people I see here are “educated” and “experienced,” but clearly lack the very critical thinking skills they are supposed to be teaching. 


2) A past childhood action has been held against me.


You may have found out already, as the rampant gossip in this place would not surprise me: As a “bored and brilliant” 14-year old kid I took the initiative to become fluent in computer science, and inevitably arrived at the stupid conclusion that I should use this skill to break through a number of computer security features on my high school network. Yes, I screwed up. I am not proud of my behavior, and it certainly had a huge impact on my life. I have learned a lot since then. It was one third of my lifetime ago. Because of my actions I have had to grow up quickly; and, I think I’ve been relatively successful.


A number of current JHHS teachers were present at my old high school during the incident. They and a few administrators have held this past action against me. In fact, I have been approached directly on this issue a few times, as if I would do the same thing at this age. It is humiliating and completely ridiculous that my record as a minor should be brought against me today. How would those select teachers and administrator’s feel if I brought everything they did as a child against them today, as if they still had a disposition towards such activities?


The fact is: if people are truly concerned with learning and teaching, then they will pursue it. In general, I fail to see this institution’s wholehearted pursuit of truth and knowledge.
 

Public schooling has become, both internally and externally, a political scene. Teaching and pursuing truth and knowledge in this establishment is like casting pearls before swine.
 

After ranting for ten pages, I would like to show some positive perspectives of my experience.


What did I do during the year?


My job, at least in my opinion, was simply to teach English. English is used to communicate an amalgamation of topics and subjects—if it can be written, basically any type of knowledge, then is a part of English as a whole. With that in mind, English teachers of course have a monumental task. As we clearly cannot cover all of English, we are forced to choose the most significant parts—I believe that a classic approach to English covers most of the truly significant facets. Classical English classes taught reading, writing, logic, literary appreciation, grammar (rote memorization), semantics, rhetoric, and even history. I think the classical approach has been quite effective—it should be emulated. Even though classical English can narrow down the priorities to a small set of significant topics, we as public school teachers remain completely overwhelmed and daunted by the task of teaching even these few and particular skills and concepts. Despite the fact that these are important English concerns, and being that we only have so many resources and so much time to teach, we, as public school teachers, are forced to further divvy up and prioritize their significance. It is no longer a question of what we will choose to not teach, but rather what few things we must teach at the sacrifice of everything else? We are forced to give a bare-bones education to the children. Economizing the subjects we teach is not easy, and so, I do admit that I understand some of the curriculum mistakes English teachers have made. When I had to choose what was going to be covered I kept thinking about what skills were necessary for both practical living and essential to the makeup of one with the potential to continue to grow academically. I decided early on that I wanted to create kids who have both the ability and desire to read, think, and write—period. I didn’t care if they scored well on tests, followed the school’s curriculum map, pleased their parents, pleased me, or pleased the people around them. That doesn’t mean they didn’t score well, or follow the curriculum map, or please anyone—but these were not my goals. So how did I think I could arrive at a classroom of students who could effectively read, think, and write?


While I respect the fact that people cannot learn and truly think without having a few regurgitatable facts to rub between their fingers, content knowledge is severely lacking when compared to the utility and imperative natures of critical thinking and communication skills. Basically, the primary objective of a modern public school English teacher is to get a student to read, think, and then to communicate those thoughts. These primary objectives, of course, include basic grammar, reading techniques, and essay forms. In my class we didn’t just cover “how-to” do these; we also endlessly practiced them over and over again. Secondary objectives include teaching content knowledge, appreciation of historical time period and literature, and the finer points of communication, including some forms of semantics and rhetoric. Even if academics require the secondary skills, I would argue that most people do not need to know such things to continue with their daily lives. While I don’t expect every student to be fluent and skilled in the secondary objectives of English, I do expect every student to be extremely familiar and competent in fulfilling the primary objective of English. I concentrated on the primary objectives. We read everything in the curriculum (because we had to cover it) and more. We thought about and discussed everything we read. We wrote on everything we read. Practice, practice, and more practice—I simply can’t expect good reading, thinking, and writing, if we don’t do it every single day.


Our students lack the ability to effectively read, think, and write. I wanted to change that failure above all others. I asked my students to read, think, and write—we did this every single day in all of my classes (even if it was boring and difficult). No matter where these kids were in their education, they would always be challenged, and, in my opinion, they were significantly challenged in the right areas. 


Was I effective? To some extent, yes. Although the majority of my students never reached proficiency in any of my three English requirements, they did pursue them, and they did grow in those areas. And, I believe they grew more in the areas of reading, thinking, and writing than they do in a normal English class. Did I teach perfectly? No. Could I have done things in a better fashion? Of course! After all, I’m learning as well. Did I teach the subjects as I ought to teach in my situation? Yes!


Many of these students can’t read, think, and write because they have been so rarely asked to read, think, and write that they lack both the fundamental skills used in reading, thinking, and writing, and the confidence to believe they are capable of good reading, thinking, and writing.


My classes, especially during the last semester, without question, chewed, reviewed, and digested more text, with the possible exception of AP English, than any other class in JHHS. We hammered our books and then some. Now of course, I commonly got the complaint, “I don’t understand any of this Mr. Morrissey.” So, we went over it again, we discussed it in class, we wrote about it; I did everything short of spoon-feeding them the answers. How else are my freshmen going to become better at reading Shakespeare than by actually sitting down, and reading and interpreting, line by line, a piece of literature created by old Bill? How else are my Juniors going to become better at reading Romantic literature than by actually sitting down, and reading and interpreting, line by line, poetry from Emily Dickinson? You get the picture. True exposure through actual experience with the text seemed like a keen idea to me. 


When I look back in history and literature, I don’t look at someone’s grammatical perfection and say, “Oh my gosh, that is great writing.” Half the time I don’t even say, “that was well said.” In reality, I look for ideas; I look for the thinking behind the writing. I want to see how that literature influenced the world around the author, and how that literature shaped who I am today. I want to see what is happening today, think about those events with an educated perspective, and react and communicate respectively to current events. If anything, I hope I ingrained that belief into my students.


Over and over and over again I asked the same question about every piece of literature or writing assignment: what is the meaning and purpose? Those are the fundamental questions my students should always be striving to answer when they read a book, glance over a magazine article, watch a TV show, listen to a guest speaker at a rally, or are subject to any form of communication.


My students’ first writing-hurdle was to get them to simply get words on a page. Once a person is comfortable with that process, then I can help them (him/her, whatever, I prefer the plural neuter) become better writers. I refuse any meta-teaching example that would say otherwise. If I can’t get my students to write anything in the first place, then what is the point of teaching them the fantastically interesting minutiae of academic writing. Once my students were open to writing, then and only then could we begin working on the important characteristics of good writing and the processes involved in creating a well-written piece. Some students did reach this stage, and the structure, reasoning, and clarity of their writing benefited from advice and practice. Many of my students barely reached this stage. Yet, they were required to work in areas that needed work. It honestly warms my heart to see kids like Rakeya Bennett, bless her heart, actually completing her On-Demand test because they felt more secure in communicating their thoughts (or lack thereof in some cases). 


What did I enjoy about teaching?


I love to see people think, and I did see kids think. I love being challenged by my students, and I was certainly challenged! As I said earlier, learning and teaching is a calling. I am fulfilled in a world of knowledge. A number of times I was able to share that world with my students. Generally, I was fascinated by two groups of students. The first being the academic superstars, kids who I know have the potential to influence the world with their minds. Some of these received the benefit of my empathies, advice, and even new approaches to a number of subjects. The second group is composed of the kids that tried their hardest, even if they didn’t succeed. These kids were great—I loved their attitude towards learning and life. I believe they will be successful and influential in virtue of their sincere effort.


My students were asked to read and write so much it eventually became habit. That is what I want! Only after developing the habit of reading and writing can I help them to cultivate and hone their skills. Most of my kids genuinely benefited from my class, and I am pleased by their growth. Getting many of my students to actually enjoy reading or writing, sometimes on unexpected subjects, was also truly fulfilling. Not all of my kids are going to enjoy the classics or academic writings. And, you know what? That is fine with me. That doesn’t mean they shouldn’t be required to understand the classics or academics, but it does mean we should also strive to help these kids love reading and writing (in whatever subject interests them). After all, the ‘wonderful’ authors we read today were just people that loved to read and write on subjects that were interesting to them. I will be pleased as long as my kids remain, in the pursuit of truth and justice, an integral part of that colossal chain of human communication, in any subject matter, by reading, writing, and communicating from one person to another. Part of “being human” means that you know where you came from, and I think I provided those basics to my kids. I hope they take away the desire to continue reading and writing in the subjects both interesting and uninteresting to them. I was very pleased to see my kids acquire new tastes in reading and writing. I know, as a number of students have written me letters, that I have made a very positive impact in their lives, both academically and socially.


Sometimes I felt like a proud parent of these kids, even if I’m not their mom or dad. My effort this year was well spent on my students. I learned about my students, the school system, and myself. I have had to ask myself, if I really care about these kids, what is the best thing I can do to help them? I believe I can achieve more for the world elsewhere. Who knows where I will be ten years from now? Hopefully, I will be learning and teaching. 


Who am I?


I believe the above question is very relevant for anyone who wishes to teach. You don’t teach for the money. You don’t teach because it is fun. You teach for other reasons, some of which are connected to your identity and purpose. In my evaluation of the past year, the question, “Who am I,” came up often.


I am a pessimist and a skeptic, and for good reason (and hell yes, I am a pessimist about whether it is a good thing to be a pessimist). One should always question the status quo; one should always ask the question ‘why’; one should always pursue truth and justice. The pursuit of truth and the questioning of claims in general are a necessary part of the development of civilization. My lack of optimism about the state of our world, and even the state of this school, does not allow me to simply remove myself from the world. Instead, such an awful set of circumstances requires, as my duty, that I find, choose, and execute the best possible plan to address the situation. The common response to a person who complains about an institution is: “then get in the trenches and fix it yourself.” I believe I have been in the trenches long enough to identity the major problems, and I also believe that fixing it cannot occur within the walls of John Hardin alone. Rather, a philosophical change in the overall population must occur. My purpose is to change that overall opinion, whether it be politically, socially, or educationally, and to pursue truth and justice as realities. I find that Post-modern relativism is highly destructive. The question I have been trying to answer over the past year has been: “what can I do to stop post-modernism?” I’m still trying to find the answer. I don’t believe I can effectively fight post-modern relativism in this setting, thus my purpose is not to teach in JHHS.


I am a hardcore theist, philosopher, existentialist, and Christian (all of which are quite related). I’m not concerned with what will make my life comfortable. I am not generally concerned with other people’s opinions of me. I just know that I have a purpose, and I must fulfill it at all costs. 


Part of my journey has led to me to and through JHHS. I thank you for letting me be here to learn, teach, and experience. 

Sincerely,
[[h0p3]]
We are through the holiday season (finally).

j3d1h had her Birthday. She was sick for it, a cold. You'd be surprised how much snot we bubbled out of her nose. She was choking and coughing horribly all night. We pumped Mucinex, Benedryl and Tylenol into her for 2 days (literally around the clock...her fever subsided quickly, thankfully). Oddly enough, she has some extra spunk in her after being sick (although, she still has the sniffles and stuffy nose). The kid is almost full blown walking everywhere now. It is kinda odd to look across the room and see a kid walking at you...she has been quite active in the past few days. She's getting much better at walking/running....in time, using silverware, consistently dropping a deuce in the toilet (she is scared of water *sigh), and speaking will make her even better.

I do believe the broom is my favorite tool in the house. I'm always amazed at what that child can do to the floor in less than 30 seconds. She manages to throw food she doesn't care for on the floor, and since we are cleaning the floor anyways, we brush&quot;left-overs&quot; in her high-chair onto the floor to make it a 5-minute cleanup, ...broom pwnage. ...which reminds me, I'm getting a late X-mas present, a t-shirt that say &quot;Pwn Star&quot; lol.

The car the acting odd...transmission issue possibly. Time to goto the mechanic.The fluids are checked often enough, and it seems like everything I can do is taken care of. (&lt;---what is this called again?...it is supposed to be a terrible no-no..but I don't really care, we speak like this all the time...not that I am attentive to what I'm actually writingggggggggggggggg...oops, too late, can't erase it now.) I'll have to find someone to bum a ride to drive us back, maybe even borrow a car for a few days.

I'm sitting here at work, doing my usual. Reading and writing, even about the mundane, keep me alive in here. These people are...Tards. Unwise and unintelligent people... (Sound elitist don't I? pfft...) The only reading that goes on that I can see, beyond work related/required is crappy novels, often love stories (bleh). Hey, it isn't like I read a ton anymore either. My reading, unfortunately, is forced to be online (which isn't very high quality, but with a good eye and a mind for searching out significant information in that ocean, you can find some very interesting things to read)....But, atleast I do something real. Of course, to blue-collar folks, they look at thinking and ideas as something that isn't real because it isn't concrete.

I realize that k0sh3k and I are very different from the rest of the world...we perceive it very differently. When I look at the world, the most real things to me are actually abstract ideas. That doesn't me I don't use concrete things, but I truly look at the concrete as a means to the abstract, that our solid bodies (yeah, I'm &quot;slightly&quot; gnostic in some sense...minus the whole Demiurge bullshit) of mass simply don't compare in purity to those wonderful, ethereal abstract ideas. I can't point a concrete thing out that isn't based upon ideas. Ideas are the cause of things, not the other way around. Most people perceive the world in the concrete...in fact, even people who consider themselves good at dealing in abstract concepts are usually quite concrete. Even people I'd consider generally intelligent eventually will throw away ideas for the concrete, they lose their pursuit of ideas because they are &quot;practical.&quot; Since when did practicality matter? Show me one thing in God's Will that was practical that wasn't first based and made primarily for the sake of an idea. You can't. Practical thinking is the way of the lazy. Period. It is a quick judgement of those who don't have the patience or resources to continue to think in the realm of ideas.k0sh3k and I don't live amongst these people or these things. Sure, we are forced to encounter them...But, we aren't one of them.

Of course, this may just be my bias from where I live, where it is impossible to find anyone like us. But, I am convinced there are few like me in this world. Gives me a good topic to write on...k0sh3k/Jim/Allen/I have had an interesting topic going on for a while. It is primarily me on oneside (as usual)...but I am correct (as usual). It is a discussion of the &quot;supposed&quot; differences between intelligence in wisdom. I'm sure they must get tired of me ;P...better not to broach the subject at all? Why take the time to really examine it? Does it hurt your head? lol.

By the way, had some B&amp;N cards to blow, grabbed the full set of Calvin and Hobbes and a book about Dragonology *cough, guess which one I like the most? =)

anyways, I'll get to work and maybe write on that topic for a while...my mind has already drifted a lot today.
Got bored at work, so here are my thoughts:

Freedom is a multi-faceted and hugely positive term encompassing the ability to act consciously, well-balanced and with self control towards a given constructive direction. It is oftentimes gauged by the degree of absence of external restraint or external control.

In general, Freedom is concerned with choice. I find it hard to separate “freedom” from the concept of “free will.” The ability to do otherwise is what makes a person free.

This concept, freedom, is one dear to the hearts and minds of almost all of those in western culture. We idolize it, and even make up pseudonyms for it, like Liberty. By the way, we often mistakenly merge Freedom and Liberty, as they have much to do with each other. Liberty, however, is generally considered a concept of political philosophy and identifies the condition in which an individual has immunity from the arbitrary exercise of authority. This would be an external restraint; thus, I’d call Liberty a subset of freedom.

Regardless, everyone and their mother are deeply concerned with maintaining freedom and liberty. The crowd exclaims, “Oh, noes! Don’t violate my rights, freedoms and liberties!” Do they even understand what these words mean? Do they understand the significance? Do they understand the purpose of freedom?

So, what is so important about Freedom? Is it important in and of itself? Where does it come from? Is it natural?

Let’s explore!

For the time being, I will have to make certain assumptions.

Premise number one: the universe is stable, calculable, and physically deterministic in every way. Billiard balls can cause other billiard balls to move when they strike each other. The universe is governed by physical laws that cannot be broken by anything wholly contained within that universe. All matter is subject to the laws of physics. And, regardless of what you may have read, concerning quantum mechanics and the appearance of randomness, I tell you there is far too much design and order to believe that this is random.

Now, now, does this mean that the laws of physics are never broken? No way! There ARE anti-entropic objects and institutions. In fact, when we evaluate the possibility of freedom inside a deterministic universe, we will surely find that the laws of physics cannot govern absolutely, they must be broken if freedom is to exist.

If you don’t like the idea of a deterministic universe, then get out! I have no time for those who look at the universe as random. Even if randomness may or may not give us more ample opportunities to defend the concept of freedom, we would be abandoning the very things that would make freedom so significant. Free beings within a random and orderless structure can’t make significant choices. Those beings would have no way to know the effect of an intended action. There really are a lot more complications to randomness. Even some pseudo-randomness (whatever that might be) sounds more like a cop-out and an indescribable and poorly put together concept of the universe than a real defense of freedom and reality.

Premise two: Those contained by the universe cannot naturally have power over the universe. In order to have power of the universe, one would have universe making-and-breaking properties. One constrained by the universe clearly didn’t make that universe. Go figure.

Premise three: Thus, something greater than the universe must have created the universe, specifically, God. God is not imprisoned by the universe, and such order and design had to come from somewhere. Again, God’s existence, for the sake of the article, is assumed.

Alright. So, basically, for humans to be free means that we are breaking the laws of the universe. It means we are not bound by the laws of the universe. As we clearly are not the creators of the universe, then we must have acquired our free will through other means.

It is the old argument, the Imago Dei, that God has granted us ‘choice’ through freedom. This means that God has granted humans the ability to break the laws of the universe. Which, yet again, is another old argument: The Unmoved mover.

God has instilled in us the ability to be an unmoved mover -- Those who can move objects without moving themselves. We have a distinct causal power to act upon the universe without requiring physical abilities. How limited this may be, who knows? I suspect that we act upon our brains, as it is pretty central to our nervous system…

As to the consideration of self-ownership as portion of freedom, we may apply Nozickian and Lockian proprietary philosophy, and simply say that God, the being who originally owned us, imbued us with the ability to own ourselves. It is ironic that Libertarian views are so unjustifiable, as they base freedom on utilitarian property law, which, when evaluated, is contradictory…as people could not naturally own themselves. Luckily, we already have the key to abuse, use, and unlock the secrets to the heart of “freedom fighting,” without having to agree that freedom is all that important, but while maintaining their basic premises.

Okay, so now we can say that it is at least possible for freedom to exist. What is it?

Freedom, or free will, is the ability to do otherwise. It can be the ability to think otherwise, believe otherwise, and physically act otherwise. It can be large or small, moral or immoral. Freedom gives true choices. Doing what you want to do isn’t freedom. And, yes understanding freedom within the psychological and egoist determinism is difficult. We must simply explain that in some possible world, a free person chose otherwise, regardless of this determinism. Essentially, a free person, even in the context of psychological determinism, only needs to have the ability to do otherwise, regardless of whether they actually do in reality choose to do otherwise is somewhat inconsequential. In light of some possible worlds’ argument, we can simply explain psychological determinism in terms of probabilities…but not necessities.

So, what is the significance and purpose of freedom?

We have freedom because we have the Imago Dei; God imbued us with the Image Dei; thus, God gave us freedom (or free will). A gift from God is already amazing enough, and must have innate value simply because of that. The very Image of God is a precious thing as well, thus we may think that beings with this ability would simply have innate value in virtue of the autonomy or the gift itself, on top of the value that stems from simple existence and being a gift from God. Clearly, it is very significant at this level. Kantian ethics can apply here….well, maybe. I’m not yet going to say that people are ends in themselves. But, at least we can verify that people are important, in part, because of this Imago Dei.

Ah, but defeating the laws of physics just doesn’t seem THAT important. And, you know what, God also gave us the properties of existence, like everything else in the world…so being a gift from God may not be enough either. There is a reason for this freedom.

Freedom is the architect of responsibility!!! Rocks falling from cliffs, water flowing down a stream, and even spiders spinning their webs are reacting to their respective deterministic environments and NOT responsible for their actions. These things HAD to occur. It isn’t as if they could have done otherwise. Even the spider didn’t have a choice. This…animal is just composed of chemicals reacting to the particles around it. We are more than mere chemical reactions! The rest of the universe is not. The rest of the universe has no choice in what it does. The universe is a machine, a very complex one, but a machine non-the-less. It is enslaved to the deterministic laws of physics. The creator of such a machine is responsible for it. The unmoved movers that act upon and within it are responsible for that which exists and occurs within the universe.

Our original Unmoved mover is God Himself. All that is beautiful and natural in the world is good, and created by God alone. Our freedom has acted upon the world, and yes, we are responsible for it; we, however, have created that which is painful and evil in this world.

With freedom, we have the ability to influence, to create and modify this machine we live within. Our creation; our responsibility.

As we own ourselves, and can recreate ourselves (to some extent), then we are also responsible for ourselves. Our actions have meaning! This isn’t random. This isn’t deterministic. This is choice.

Choice and responsibility manufacture the existence of MORALITY. Our choices aren’t just choices, they entail something more. Choices are moral choices. They entail substance, and relevance. If you believe relevance and significance can exist, then you must believe it exists through this alone. Good and bad stem from choices. Morality IS significance. It means there is a value to what we do. And, a reason we should do some things, and reason we should not do other things.

Freedom is the foundation of Morality. Freedom allows for the possibility of moral choices. Freedom’s relevance is found in that it creates the possibility for us, and our choices, to be relevant. There is a huge different between a Godbot and someone who can deny the Will of God.

Freedom exists for us to BE moral people. We are free so that we can choose to fulfill the Will of God. The ultimate purpose of our freedom is to give that freedom back to God, when we give up our desires to follow God’s Will. We are free for the sake of God’s glory.

Great!        We’ve solved the mystery. Now what?

Well, people don’t view freedom as this. People want to think they have “inalienable” rights, and freedom for the sake of themselves. People believe freedom exists for the pursuit of Happiness!?? WTF are they thinking? They use Freedom to be hedonists, to pursue themselves!

Freedom is IDOLIZED in our culture. In our self-worship, we have proclaimed –freedom- as our best attribute, and the thing we should base our lives around. We act as if it is THE thing to protect. We act as if freedom, in virtue of our oh-so-obvious self-importance, has become an end in itself, as if Freedom were innately significant, rather than a tool and catalyst for that which is important—The Glory of God!.

Freedom is not innately important, and it isn’t some inalienable right, as God can always take away what He has given. Freedom exists for us to serve God, to become slaves once again.

We are blasphemers and idolaters. We pursue ourselves, happiness, and freedom. We do not seek that which is most important.
In economics, which is really a study of power and why people do what they do, the theory of comparative advantage explains why it can be beneficial for two parties (countries, regions, individuals, ...) to trade, even though one of them may be able to produce every kind of item more cheaply than the other. What matters is not the absolute cost of production, but rather the ratio between how easily the two countries can produce different goods. The concept is highly important in modern international trade theory.

Comparative advantage may be compared (haha) to absolute advantage. When one entity (be it a company or a country) is able to produce more efficiently than another entity it has an absolute advantage: that is, assuming equal inputs, the entity with an absolute advantage will have a greater output.

At the core of the theory is the idea that one’s economic interest lay producing what one has a ratio-based advantage in producing. Those who are more efficient at producing X, should produce lots of X, and uses excesses of X to trade for the excesses of those who have comparative advantages producing Y and Z. Albeit, I’m not one who believes in excess. But!, I do think that as long as the excess is used for the greater good, and spread across those who DO need, then we have much better justification for producing, at least in the little picture, excess. Excess beyond the sum of all need, including preparation and savings, is not a good thing. Luckily, comparative advantage can still be applied in smaller settings, as the excesses can overflow to places that don’t have the same producting.

I always loved the idea of “comparative advantage.” The very nature of it is concerned with efficiency and giving to the community the products of your specific and maybe unique talents. In fact, I’ve grown accustomed to this concept; you could say I am fond of it because it has moral implications. It defines and lays the groundwork for brief and practical existential claims.

Do what you were made to do, use your gifts to preserve and develop yourself and the people around you! This is economical design, the efficiency of God’s creation, and an aspect of beauty rarely recognized within the church.

Usually, we think of “Gifts” in an extremely narrow sense. Gifts of the Spirit aren’t necessarily spiritual in nature. Rather, those gifts are used FOR the Spirit, maybe given by Spirit, and maybe we are motivated by the Spirit to use those gifts. But, these gifts range and vary greatly, equivalently with the number and variety of purposes predicated of all people.

Who isn’t happy using their gifts for the right reasons? Purpose people, PURPOSE! We are fulfilled in the execution and completion of our duties, and clearly our duties have to do with the gifts bestowed to us. Those gifts give us a comparative advantage. Thinking in terms of comparative advantage, and truly applying it, would be quite utopian.
uggghh...k0sh3k has been throwing up and it has been pretty bad for a few days already. She didn't want to goto the doctor (and I don't think she'll need to), but she is getting better today. Pray for her. By the way, she also applied for the directorship(?) at the Wesley House at UofL. 60k a year, but I don't know if that includes a &quot;parsonage&quot; or some shit. I have no idea.

As for me...I'm doing well. Christmas has been busy, and we've chosen to use a Nativity set in place of a tree...after all this &lt;em&gt;is&lt;/em&gt; &lt;strong&gt;&lt;em&gt;Christ&lt;/em&gt;&lt;/strong&gt;mas. Work has been slow and boring. Who cares? You do what you have to do. I stole dad's WoW account (buy you a new one dad, I can upload the entire WoW directory to my site and let you download it, and I'll grab you a CD-key if you need) because Blizz is retarded and banned me for &quot;3rd party software.&quot; Tough. Took me 3 weeks to bot to level 50, and I'll be hitting 60 this week (before X-mas) I hope. HWL gear is now grindable at a VERY reasonable level (and if I say it is reasonable, then it is broken). Pfft, I'll be encoding more PvP vids for no one in paricular I'm sure. But, hell, it is fun.

We are gonna have A & J Gipso----oh, snap..I mean, &lt;em&gt;L &lt;/em&gt;for dinner on Sunday (after all, it isn't like I'd let my child even walk into their house)...which btw, j3d1h is walking somewhat....

For any family reading this: we got a great present for you (especially for those overseas), and it cost me a pretty penny. I'm a cheapskate, so 100$ makes me cringe like no other. But, I was convinced by a greater power than myself ('teh wifey').

South park is on! GTG (Gotta go)!!
The Form of Gaming: A Philosophical and Ludological Discussion on Games

 

We all play games, or we all play what we think are games. Why? It is simply a part of human nature to challenge one’s self, to accomplish, and to win. Games provide a safe and proper environment to test ourselves. In my opinion, the beauty of the game is that it can reflect any other problem we may face in life, with the exception that a game can be adjusted to be more fair (unlike life), we can view justice as a 3rd party looking more objectively at what is really occurring, and that problems, quizzes and tests within games don’t have severe impact on the quality of our lives (or, at least, they shouldn’t). Games are really microcosms of what we experience in life, and yet wonderfully opposite of life in that games have no real consequences when played either well or poorly. We play them in virtue of themselves, and they have proven to be both enjoyable and insightful.

 

In this article, I hope to present a case for what makes a game a game, why we play them, and the intricate principles universally found in a true game. The explanation is both descriptive and proscriptive as it will portray the meaning of gaming and also depict the sort of thinking required to adjust current activities and future ones, activities which we blindly call ‘games’, to better conform to the true idea of gaming.

When we ask, What is gaming? or what are games? or even, what is the perfect game? we are really asking, what is the form of gaming?

 

And, what is the form of gaming? To start, you really need to know what a form is in the first place. Formally :-), the definition of a form is:

 

That assemblage or disposition of qualities which makes a conception, or that internal constitution which makes an existing thing to be what it is --called essential or substantial form, and contradistinguished from matter; hence, active or formative nature; law of being or activity.

 

Philosophically speaking, the word form has been used to translate the Platonic idea (eidos), the permanent reality which makes a thing what it is, in contrast with the thing's particulars, which are finite and subject to change. However, for practical purposes, Aristotle was the first to distinguish between matter (hyle) and form (morphe). The perfection of the form of a thing is its entelechy in virtue of which it attains its fullest realization of function. For example, to Aristotle, the entelechy of the body is the soul. The origin of the differentiation process is to be sought in a prime mover, i.e. pure form entirely separate from all matter, eternal, unchangeable, operating not by its own activity but by the impulse which its own absolute existence excites in matter.

 

Forms are abstract ideas, perfect images (logos), from which actual particular things endeavor to mimic and imitate. Some philosophers, like Aristotle, thought these forms were real things themselves, maybe objects hidden in some heavenly body of the universe, who knows? But, for our purposes, we can use the basic understanding of form, which is hardly controversial. Our consideration of this topic is a less metaphysical approach, and far more semantic and logical. We are searching for the necessary features that are found in all of the possible particulars of a subject. The perfect image, idea, and configuration of a thing are what we seek.

 

An example of form in practice could be the form of scissors. When we refer to scissors, we are first referring to scissorness. We are reducing all scissors to the very concept and logos of scissor, from which all other scissors mimic in model, function, and construct. Scissors can be different colors, shapes, and sizes; they can cut different cuts, and some don’t even cut very well at all! Scissors vary in material used to make them, and the material they are designed to cut. Some scissors are good, others bad. But all these properties are arbitrary characteristics of each particular scissor. We seek that which is not arbitrary about all scissors, but rather that which is completely necessary about all scissors. The question of what is the form of scissor? is a question concerning the ultimate substantial and universally held concept that binds all scissors. When seeking the form of scissor you seek whatever makes a scissor a scissor. By referring to scissors, in general, speaking of its form, we are speaking about an edge tool having two crossed pivoting blades. All scissors follow that form. The form of scissors is definitional of the all scissors in the relevant and basest sense. Of course, in the end, particular scissors can be more or less scissor-like than other particular scissors, but none of them perfectly mimic and match the very form of scissor. The perfect scissor is the form of scissor.

Just as scissors are defined by its form, games are defined by their form. We don’t seek the particular game, we seek the perfect game, the form of game.

 

So, what is essential to gaming? What is this form of gaming?

A game is a contest or competition, physical and/or mental, according to certain rules, which is perceived to have irrelevant outcomes beyond the fact you win, lose, or tie, such that: the gamer would play the game simply in virtue of the opportunity of playing the game itself. Perfect games test the skill of the player and nothing else. The game can be against yourself or others (environments are rulesets, not opponents). But, in the end, gaming is a test of one’s skill that should have no real consequence beyond winning, losing, or tying.

 

Any other effect from or influence upon this rule and skill based competition is simply a non-game event, concept, or object. All other non-competitive aspects of gaming, that aren’t specifically and solely testing the player’s skill, against a certain set of rules and/or opponent(s), for the purpose of playing for the sake of winning, simply IS NOT gaming. The screaming fans, the music, the social life, the graphics, fame and money earned from playing, and even the narrative--these are not a part of the game in any substantial and relevant sense; these are mere particulars of a game. While these arbitrary properties can be found surrounding the center of the true game itself, they do not qualify as game.

 

Analogously, scissors are used to cut in a certain fashion (with two crossed pivoting blades), just as games are used to test the skill of a player. Cuts by a scissor are used for any number of purposes: shortening a piece of paper, removing tags, etc, just as the testing of a player’s skill through gaming can be used for the purposes of amusement, recreation, etc. Do not confuse the secondary purposes of a form with the true and actual form-making purpose. The meaning of scissors does not include arbitrary particulars or secondary functions, and the meaning of game does not include arbitrary particulars or secondary functions. Thus, the form of scissors only includes the function of being used to in a certain fashion (with two crossed pivoting blades), just as games are used to test the skill of a player.

 

It may seem I used a synonym, contest, to define gaming, which at face value seems problematic. I assure you though, it was quite intentional and very relevant, as the purpose of this particular definition was to limit the meaning, specifically in terms of gaming as a competitive concept, as opposed to the other reasons why people game, which are completely different from the very nature and form of gaming.

 

What principles of gaming are absolutely necessary to its form?

1.)    Fairness

2.)    Rules

3.)    Test

4.)    Played for the sake of playing (win, lose, or draw as the sole consequences considered)

 

1.) Fairness is conformity with the rules or laws, without fraud or cheating, and the simple justice that one reaps what one sows. In the context of a game, fairness is a social contract by which the player(s) understand and agree upon set rules that are followed and enforced with honesty and impartiality, that a player is fully responsible for the outcome of his choice, and that the causal relations are strictly based on player skill linked to an appropriate and definite outcome.

Applied to gaming, actual fairness will usually mean players have equal opportunity to accomplish goals, and that they reap what they sow in every possible aspect (to be dissected). In the form of game there should be equivalent risk vs. reward ratios and equal, proportionally scaling reward and result with player skill. In true fairness, only the skill of a player is taken into account. How much money he has, the color of his skin, how many friends he has, the time he has to expend playing, or his graphics card, has nothing to do with fairness. These should not be taken into account, or have any effect on the outcome in a perfectly fair game.

 

To further flesh out the meaning of reap what you sow, we must maintain that action A always results in action B. At any point that the causal relations, in parallel circumstances, would produce different results from the same cause, you have a violation of basic fairness and just gaming (not only that, but you’ve probably witnessed the destruction of all meaning and significance in a world by eliminating causality and responsibility altogether). Cause A must produce effect B for you to be effectively reaping what you sow. This type of causal thinking is really the basis for reaping what you sow. But, this principle goes further. It is the idea that one gets what one deserves for an action. So, result B must be appropriately caused by A. We can often hold basic causal relations so that A results in B, but the question is whether B is an appropriate effect of A. The appropriate effect of a cause must be very, very carefully weighed, and it is without question the most difficult aspect of the perfect game (the form of game). An example way to check the appropriateness of an effect is to compare its proportions to another causal chain. Consider A to B vs C to D. Does A cause a proportionally similar result in B as C does to D?

 

These are questions of desert and justice. Judging fairness becomes quite complicated. It must be remembered though, in gaming, effort and skill should be the measure by which we determine results, and nothing else.

Is perfect fairness possible?

 

Some games do a better job than others in creating a setting of fairness. Chess would be a good example of pretty fair and balanced game. In chess you find that both players have nearly equal opportunities, and deserved and deducible consequences of actions. Other games might not reach this fairness aspiration as easily. But, that doesn’t mean we shouldn’t strive to create as fair as possible games as we can. When designing and evaluating the foundation of a game itself, we should seek fairness as the prime principle guiding the game. Everything rests upon this principle being upheld. And, it certainly means, we should seek to play fairly.

 

To be noted: While certain games have handicaps, such that it isn’t initially fair at face value, as long as both players, including the handicapped, understand what is occurring, and why, then fairness can still exist.

There is yet another problem for understanding fairness. While relativism is a ridiculous concept, a very controlled version of it poses an applicable question. Remember that we are not thinking of fairness as if it were in the eye of the beholder. Our concern is rather how fairness as a universal principle will judge each case or match within a particular game. Are there situations in which fairness requires more than just a flat, simple and fair rule structure and the abiding of these rules? Must these rules take into account players themselves? Must these rules be specific to an exact instance of a particular game in helping to determine the outcome of who deserved what? It is quite likely that rules of a perfect game would be infinite in nature, here is why:

 

From a simple starting perspective, we want to say, Let the best man win. And, yes, this might be as close to fairness as we come in practical reality. But, this does not really address an innate flaw in particular games we play, as they do not take into account the possibility that one person won the game not in virtue of skill and effort, but because they were innately better at the game. What if I played a game of basketball against the prodigy Michael Jordan? Clearly, he deserves to beat me in many ways. He is simply the better basketball player. But, the measure is somewhat skewed, as Michael Jordan may have innate abilities that make him inherently better and more suited to the game of basketball than me. If and when I have the pleasure and opportunity to go 1 on 1 with Michael Jordan, and he would surely destroy me, could he rightly pull me, bloody and beaten, off the ground after a match and tell me he truly deserved to win, as if he was completely responsible for all the events in the game? Sure, he plays with skill, but it is more than that, as he probably has height, weight, speed, stamina, dexterity, and maybe even mental advantages. It is possible he was born with inherent advantages that could overcome any amount of my own basketball playing properties. MJ can’t be responsible for his inherent advantages, only self-created advantages. Is it in fairness that we judge win conditions solely on the strict performance with no regard for who was performing?

 

To further illustrate this point, more in the extreme direction: What if Stephen Hawking played a game of basketball with Michael Jordan? MJ would obviously win by the standards of basketball we see. But, would MJ win because he deserved to win? I suppose the wheel chair limits Mr. Hawking to an extent that he cannot really play effectively at all, and this isn’t even his fault. There is a skill and reward barrier that Stevo will never breach, for example: he can’t slam dunk the ball. Is this his fault? Is Stephen Hawking responsible for his inability to play basketball perfectly?…no. What is playing basketball perfectly for someone in Stephen’s shoes? Maybe to some extent he is responsible for his performance on the court. Insofar as he can move his wheelchair from one side of the court to the other, in beautiful and wonderfully timed zigzag motions, designed to overcome his virtuoso opponent, and when he rolls over MJ’s foot with his prepared spiked wheel chair tires as a means of disabling his opponent (Stevo is very smart you see), then yes Stephen Hawking is playing basketball. But, insofar as he is innately incapable of doing certain actions in basketball, Stephen Hawking is not gaming. Stephen Hawking is only gaming when his own skill from his own will, as opposed to something like his genetics, is the sole factor in an outcome.

Might it be the case that when we look at particular matchups in particular games that the rules must take into account the actual players themselves? If Stevo tried his darnedest, and played the best he could actually have played given his situation, and MJ missed 39 out of 40 shots, and clearly didn’t perform the best he could have performed given his innate abilities, then would we not say that Stevo played the best given each players circumstances? Did not Stephen Hawking deserve to win in this instance?

 

To really judge Stevo’s win and loss conditions, we might be required to ask: what resources did he have to work with in the first place, and what did he do with those innate resources? If he was given very limited resources, how would Stevo’s performance matchup with someone else in his exact same circumstances?

Playing a million games, for Steven to get a single hoop might be monumental in comparison to Michael Jordan sinking 1,000 straight shots. Even if a player loses, they may have lost by less than most would have lost in their position. Isn’t this the sort of thing what we should be judging?

 

By applying this type of thinking, we would therefore want to match equal players against each other or we would want a mechanism by which to judge the performance of each individual in each particular set of circumstances. As for the first, particular games like boxing, wrestling, and ultimate fighting already try to do this. They setup matches in a certain weight classes. They at least TRY to eliminate innate inequalities, whether by selection of naturally equal opponent or by means of handicap. Can every particular game do this? Maybe not. But, that doesn’t mean we shouldn’t at least do our best to make this the case in our practice of gaming and game development. It is evident that pitting pre-formed groups of practiced professionals against a put together group of preschoolers isn’t fairness. The other option, of course, is a creation of a mechanism that would weigh the effort and skill put forth by each player to determine who played the best given their individual circumstances. This is the perfect solution, one built into the very rules of the game themselves. But, it is very impractical, and maybe impossible for non-omniscient beings. However, we can certainly appreciate the principle. When we evaluate or design games, games which are really attempting to mimic and imitate the form of gaming, we must do our best to create fair player bases and fair matchups, or apply rules that scale with the player base to best determine their individual performance and what appropriate consequence is due to each player.

 

Scaling win conditions based on the players themselves would of course be quite theoretical and nearly impossible for us to generate, but it might be a necessary part of the perfect form of game. Scaling the win conditions to take into account the players themselves would allow for people to reap what they sow, and that is certainly the relevant issue at hand. After all, Gaming isn't about what you have, it is about what you can do with what you've been given.

 

In conclusion, fairness is NOT relative to any one individual or communities opinion. It is actually a form itself. The application and understanding of fairness, and attempting to conform rules and tests we make, games or otherwise, still fall short of the very high standards of fairness. While it may not be practical to create games that are perfectly fair, we should at least aim for this principle. Reachable, maybe not, but that shouldn’t stop of us from constantly evaluating and adjusting games to conform to the principle of fairness. We must recognize that most games we create and play are flawed, and we should be quick to distinguish when a person reaps what they sow and when they don’t. Does this mean that we don’t have any real winners or losers in our so-call ‘games?’ No. It means that we need to be particularly observant and careful in our judgment as to why and what consequences occurred, reserving judgment to discern whether players reaped what they sow, and then we can adjust our perceptions as to who really won, lost, or tied in a game. Remember: You are only responsible for what you could possibly have been responsible for. Consequences should be based upon what you are responsible for.

 

2.) Rules are essential to games as well. Rules serve as the framework of fairness, as well as existing for the sake of the very game mechanics themselves. These are agreed upon, and understood to exist. Some rules, especially concerning fairness directly, must be understood by all participants, while some rules, especially metagamed, can be hidden. However, all rules must be understandable. It must be possible to logically arrive at all of the rules, whether through empirical and experiential evidence, math, or deductive reasoning. Rules are really a subset of Fairness, but as I wished to highlight the very principles of fairness, I have distinguished rules as another topic to consider; we should be aware that all rules should be under the watchful eye of fairness.

 

While there is a general rule of fairness that permeates throughout all other rules, in general, by rule in a game, we are referring to a game mechanic. Game mechanics, of course, must be fair, but they have more to do with directly laying the framework for the actual Test in a game than anything else.

 

Game Mechanics seem pretty straightforward. In physical games this includes boundaries and procedures, and also the consequences of violation. In video games this includes those virtual boundaries and procedures, and so on and so forth. Game mechanics will include things like gravity, and other physical or virtual forces that act upon the player or influence activity within the game itself. Game mechanics form the environment, and range in simplicity and complexity. To be noted: even seemingly simple base game mechanics can deceptively still be the foundation of a game of great depth and difficulty.

By base rules or base game mechanics I mean the original and spoken rules of the game that must be initially understood to even begin play. To give an example, let’s consider the mighty, mighty game of Tic-Tac-Toe.

 

In Tic-Tac-Toe, the base rules/mechanics would be something like this:

 

1.)    A 2-dimensional 3x3 playing grid, generally composed of 2 parallel lines perpendicularly aligned upon an identical pair of lines.

2.)    Both players fairly decide on who goes first amongst themselves.

3.)    There must be exactly 2 players, one player is O, the other player is X.

4.)    Players will interact with the playing grid using only their respective letters when marking.

5.)    The player who goes first is the first player to mark a playing field with his corresponding letter.

6.)    Marks must be within one of the 9 given blank fields found on the paper playing grid.

7.)    Once a field is marked, it cannot be marked again by either of the players.

8.)    After one player marks, the other will be given a chance to mark, and they rotate in turns laying marks on the grid until a player wins or all 9 fields have been marked.

9.)    A player wins when they place three of their own marks in a horizontal, vertical, or diagonal row.

10.)            If no player wins, and all 9 fields have been marked, then the game is a tie (called a cat in this game).

Other possible rules to consider, often socially based:

11.)            A player generally has a short amount of time to make a decision, and cannot stall the game any longer than is required to make a decision, which shouldn’t take more than a few seconds.

12.)            Rule accountability is managed by both players.

13.)            A violation of the rules may result in a game loss if the opposing player so chooses.

14.)            Usually, multiple games of Tic-Tac-Toe, with both players having gone first an equal number of times are required for the best player, with the highest average of wins to be named the overall winner.

These are the game mechanics of Tic-Tac-Toe. Prima facie, Tic-Tac-Toe’s rules generally follow rules of fairness. All of these rules are knowable by all players. Players decently seem to reap what they sow in this game, and there are clear objectives and rewards, even if skill doesn’t amount to too much (it is a kid’s game after all).

 

When evaluating the base mechanics, we’ll find that tic-tac-toe is a very simple game. Some games aren’t as simple though. You’ll notice that Chess would have a much larger ruleset, and we may even be able to produce games with infinite rulesets.

We are still missing a key element in understanding the rules of a game. There is another level we must take this to in order to really hit the heart of what game mechanics really mean in a substantial sense, especially with respect to the concept of fairness, and applications of reaping what you sow in virtue of your skill alone. We cannot simply look at base rulesets to determine fairness; we must calculate the meaning of the base mechanics to fully understand the consequences and possible future action trees available to all player(s). This calculation, which gives deducible and relevant insight into the hidden mechanics that can and must be inferred from the base mechanics, results in metagame rulesets.

What do I mean by metagame? Literally, it is the game after (outside) the game. In reality, it is the strategy of a game.

Game mechanics, after evaluation, become far more extensive than one would originally realize. We should be able to deduce from the base rules an even further set of rules, the rules of the player and strategist, that which we might call the metagame.

 

Metagame, essentially, is the addition of further rulesets formed from assumptions of strategic play using our initial base rulesets, traditionally based on the anticipation of an opponent’s strategy or, and more importantly and inclusively, the expected results of a player’s own possible choices that limit and distinguish the better courses of action available to a player. Metagame is the development or a narrowing down of choices concerning future action trees that increase a player’s probability of winning. Metagaming, the verb, occurs when a player takes advantage of the metagame for purposes of winning more often (we might simply call metagaming just strategic play). By means of the estimation of how other players will make decisions, and knowledge of how the rulesets working together to create further deducible rulesets, the metagamer can build his strategy designed specifically against his opponent’s strategy or simply to improve upon a previous strategy of his own.

Metagame stems from base game mechanics and strategies that will evolve from those base rulesets. Thus, fair metagames are based on fair base rulesets.

 

Metagame rulesets deduced from the expected results of a player’s own possible choices are quite calculable. This sort of knowledge is usually acquired through experience, and is often intuitive, but remains quite calculable. We would call this sort of thinking strategy in general. A strategy is a preformed set of rules that are artificially applied to an original set of rules. What must be understood is that all possible strategies can be calculated in a game, even if they are infinite in number and size, and that through some natural selection and deduction, players ‘weed-out’ poor strategies in favor of strong strategies. Available strong strategies form further rules, thus forming more complex rulesets. Thus, new rules can be deducted from the base rules. And, it is possible that a metagame will be built upon the first metagame; which can continue ad infinitum, but nevertheless it remains a backbone of understanding rules and fairness in the context of gaming.

 

Tic-Tac-Toe, which is very subject to combinatorial game theory and computation, is a perfect candidate for exploring the meaning of metagame. We can see the results of all possible play combinations, which is quite limited for a game (only 255,168 combinations with wins and not excluding symmetrical positions), and thus we are in a very good position to express a further set of rules that one must play by in order to win. So, in the game of Tic-Tac-Toe, what is the metagame that will result from the base mechanics? And, how do we arrive at the metagame?

 

To arrive at the true and complete metagame, we must evaluate all combinations of play. We must dissect all possible future actions trees. We must calculate the win/lose/draw probabilities of any choice in every circumstance. Generally, gamers do this intuitively and experientially; but rarely fully. Again I emphasize that the metagame remains quite calculable.

 

Tic-Tac-Toe has very few choices available, so evaluation is mathematically much simpler. Looking at all possible

combinations of play, in order to win or avoid losing in tic-tac-toe requires that the player consistently perform as many of the following actions as possible with each mark — listed in order of priority — without sacrificing the higher priorities:

 

Complete three in a row.

 

Block their opponent from completing three in a row.

 

Threaten a win with two possible completions in two rows.

 

Avoid a configuration in which the opponent can force the win.

 

Threaten a win with a possible completion (two in a row).

 

Prevent the opponent from getting two in a row.

 

The player must also think ahead to see whether a mark can be made this turn that will allow him or her to achieve a higher priority in the next turn.

 

In reality, the game is won or drawn after the first two marks are made, assuming perfect play for the remainder of the game. It is therefore very important for the serious tic-tac-toe player to study these openings (of which there are 12) in order to avoid making a mark that enables the opponent to force a win, or to recognize marks that can be capitalized upon in order to force the win.

 

The first player, whom we shall designate &quot;X,&quot; has 3 possible positions to mark during the first turn. Superficially, it might seem that there are 9 possible positions, corresponding to the 9 squares in the grid. However, by rotating the board, we will find that in the first turn, every corner mark is strategically equivalent to every other corner mark. The same is true of every edge mark. For strategy purposes, there are therefore only three possible first marks: corner, edge, or center. Player X can win or force a draw from any of these starting marks. The choice of which to make will depend on the player's knowledge of their opponent's weaknesses in recognizing good answers to a particular opening. In a series of games, alternating the opening mark and its superficial position can help a player win more often against a weaker player.

The second player, whom we shall designate &quot;O,&quot; must respond to X's opening mark in such a way as to avoid the forced win. Player O must always respond to a corner opening with a center mark, and to a center opening with a corner mark. An edge opening must be answered either with a center mark, a corner mark next to the X, or an edge mark opposite the X. Any other responses will allow X to force the win. Once the opening is completed, O's task is to follow the above list of priorities in order to force the draw, or else to gain a win if X makes a weak play.

 

Players soon discover that best play leads to a draw, regardless of where the first player plays.

 

As you can see, the base rules transform into a further, deducible set of rules and strategy that players should follow if they wish to win. All games have this feature. But, there are further metagame considerations. In noting how this game is played, and even the people that do play it, we will often find that there is a problem in reaping what you sow.

In Tic-Tac-Toe, the problem is that players can place marks without real thought or strategy behind it or they can even randomly place their marks and often receive the same benefits and consequences as someone who really put thought into it. Clearly, we have difficult judging who deserved to win and who didn’t. Truly skilled Tic-Tac-Toe players aren’t always receiving proper reward for their skill. We would call this a problem of a skill-cap, in which skill only means so much. There is a limit to which skill is displayed and rewarded in this game (if only in the perspective of single matches). This isn’t fair to a truly skilled gamer. Tic-Tac-Toe ceases to be a skill-based event in some instances, and, insofar as it isn’t based on skill, it isn’t a game. This skillcap is a problem that stems from the very base ruleset, and becomes evident in Tic-Tac-Toe’s metagame.

 

We must recognize that even Tic-Tac-Toe is still not in perfect conformity with the form of a game. And, if Tic-Tac-Toe is clearly not full-proof balanced and fair, then what games of ours are? We may need to add components like no skill-caps, proportional returns at different skill levels, and other complexities just to ensure that every player receives the appropriate consequences of their actions. Again, we see that ugly unfairness raise its head, even in a game as simple as Tic-Tac-Toe.

 

But, it gets even more complicated.

 

Metagame rulesets based on the anticipation of another’s action is also a form of expected results calculation. For most, this is the traditional meaning of metagaming, but it is really contained within the first definition. This is the hardest portion of the metagame, and the least understood. The trick to this aspect of metagame is that anticipation of another’s action isn’t as clearly and easily defined and calculable, giving the metagamer a more difficult foundation upon which he can deduce the best course of action. Often this metagaming is based upon using your mental skill and intuition to deduce or guess the most likely course of action your opponent will choose, and the best option you should choose in response. However, we want sure deductions, and this makes our life much harder. How can you be sure what another player will do?

As free will exists (another paper for you altogether), we must assume that an opponent could possibly choose anything from a myriad of options and strategies. In fact, if they are truly free with respect to a choice, then we can’t (without some omniscient foreknowledge) fully deduce or even empirically know what choice a person will make with certainty. If this is the case, then it is possible that a strategy that initially seemed most probable to give the best results will not actually be result in the best possible rewards in some circumstances, in virtue of the possibility that your opponent can choose something else altogether.

 

However, at the very least, we can say that an individual (or even group of beings) with free will is more likely to make a particular choice as opposed to others. There is no explicit contradiction in thinking people are inclined towards certain beliefs or methods of thought and action while remaining completely free with respect to those beliefs or methods of thought and action (or, at least I will assume so for the time being). Insofar as we can calculate those probabilities, we are able to make, at least in metaphysical possibility, deductions that form a valid part of a game.

 

We might consider, although I’m not necessarily advocating it, that an opponent with free will isn’t actually a part of the rules themselves at all. If we wished go down this path, at first glance, we might be denying the causal deducibility of certain games with free opponents. On the other hand, all other factors would remain quite deducible. If my opponent chooses X, then Y occurs. If I choose A, then B occurs. But, it can get more complicated. What if: if my opponent chooses X and I choose A, then B; and, if my opponent chooses Y and I choose A, then C; ad nauseum? Does this still follow the basic laws of causality? We may need to say that, with respect to free beings acting upon a deterministic game….yes.

Of course, this sort of metagame ruleset only applies to games in which you face opponents with free will. The anticipation of computer-based choices would fall under my first explanation of metagaming. We can see that in a free will based calculation we have a lot of work to do.

 

Moving on:

 

Generally, in good and balanced games, metagames will evolve continuously, which is especially true for games with free opponents. There should always be a counter for an action; and a counter for that counter, and a counter for the counter’s counter, and so on and so forth. This creates incentive to innovate, to anticipate, and can fully extend the viability and necessity of mental skill in a game.

 

An underlying point to understand, especially concerning evolving metagames, is that the choices available have always remained the same. You still always had the future action trees available; you just may not have used them. A good example of this would be an unskilled player who technically HAS the capacity to follow a certain action tree, but never will, maybe because they aren’t skilled enough to execute or even realize which future actions in the tree are the best to use in the circumstances.

 

Again, in the truly perfect, possibly unending metagame, this sort of thinking is based on calculable results which would result in perfectly equal and countering strategies, such that strat A is countered by strat B, which is countered by strat C, and so on and so forth, such that there is no truly best option, at any given skill level, only a best for the moment or circumstance, possibly relative to your opponent’s position and choices. Certainly this means that there will be strategies that are suboptimal, even in a perfect game, but that there isn’t necessarily a universally correct strategy to use. We mean to say, that certain strategies will never be viable in the truly perfect game, but that in true balance, there must be strategies that are equal, countering, and significant enough to use instead of another, else, everyone would always choose the exact same strategy (which isn’t much of a challenge in the end). Generally, in most games we create, there are clear archetypes and strategies that prevalent and accepted, and are in fact the deducibly best option to always use. This form of a stagnant metagame, heavily reliant upon archetype and class based strategies is due to a flaw in the base ruleset of a game.

 

What about rulesets which are not easy to calculate, or even truly incalculable, like the weather or randomness?

By definition, game mechanics do NOT include non-competitive functions or influences upon the game. Things like socialization, sportsmanship, random functions, or even the weather are not part of gaming. These particulars of a game are arbitrary, and do not fairly test a players skill in any way.

 

Probably the most interesting feature found in our games that people believe is a true game mechanic, and the hardest to define for people, is randomness. Randomness appears to be a mechanic of the game, but it isn’t a fair one. And, yes, we must accept that it exists in some so-called games. And, yes, it takes skill to work around it, but insofar as something is truly random, the causality of a particular circumstance is, at least to some extent, eliminated; therefore, you are not fully responsible for the result of an action; you are not playing a fair competition; thus, you are not gaming with respect to randomness.

 

Randomess is an innately flawed concept for gaming. Whether you believe it is even possible to exist or not, in so far as a player is not responsible for the consequences of his action, he can not be held responsible for winning/losing/drawing (which is what gaming is about). Do we see randomness in supposed games everyday? Yes! Can randomness make it interesting and unexpected? Of course. But, entertainment is not gaming. The violation of the principles of fairness, to ANY degree, is a violation of the form of game. To the degree an activity is random, it is not a game.

 

Take the game of Poker. Insofar as a poker player played his hand the best it could have been played, assuming and considering the random components of poker in his calculations, he is responsible for it, and he is in that respect gaming. So, keeping calculably good hands would be a form of skill, and the evaluations of plays themselves (as opposed to their results), which are based on probability, can have any meaning in judging fairness and skill of a player. Insofar as poker is luck of the draw, and the player is not responsible in this respect, that person is not gaming. Sure, from a macro perspective, over thousands of games, the brilliant poker player will have a lot more wins than the unskilled poker player, this is just probability. And, in this scope, over an infinite set of games, we can maintain skill-based play by judging the winner of the overall win/loss percentages. Controlled random factors can be possible in a game played to an infinite series. But, then we are only judging percentage of wins/loses/ties, and it is problematic that you have to use an infinite series of games to make such a judgement (which is hardly practical to finite beings). Most important, we cannot judge a single match or single play and always say about poker, Player A deserved to win over Player B, because Player A is more skilled. Insofar as Player A played with actual skill, and non-competitive forces and factors did not influence the outcome or fairness of the game, Player A deserves what he gets, and he is truly gaming. But, as poker really does have a large amount of randomness, poker players are really playing a hybrid of gaming and gambling. Poker is not a true and pure game. However fun it may be, fun is a secondary effect and function of a game. The object of the game-ness found in poker is to win, or to do the very best with what you have. However, it remains that randomness eliminates many elements of what could make Poker a true game. Instead, it is a form of gambling.

 

Other non-competitve influences like the weather might actually be calculable to begin with. And, in cases that there are not, maybe due to our innate intelligence (or lack thereof), we are limited in the scope of our responsibility. This is quite similar to Stephen Hawkings innate problems of playing basketball.Regardless, it is clear that non-competitive forces in our games are a major flaw, and prevent us from creating games that conform fully to the form of gaming.

 

Clearly, metagame rulesets that are unfair in a game stem from an initially unfair base ruleset. In order to adjust inequalities and unfairness in metagames rulesets, one must adjust the base ruleset. And, when a game has a truly fair base ruleset, a fair metagame must evolve. Is this practical, can it be applied? To some extent, yes. And, at the very least, as we know the meaning of the form of gaming, we can attempt to align our games with the perfect form of gaming through deduction, comparison, and some disciplined thinking in general.

3.) Testing is the execution of the game itself. It is the objective(s) of the player(s). It combines fairness and rules, and provides the battleground on which a player mentally and/or physically competes with himself and/or others. This IS the game. It has no value in itself, other than it is the mechanism which reveals the winners and losers. Pretty simple.

4.) Playing for the sake of playing is the last attribute of gaming I’ve found. This principle is true of the very form of games, because if you play for any other reason, you aren’t gaming. Competing, yes maybe…gaming, no. A race for production at work, playing for the money, or playing to impress someone is not gaming-- If this is your function of such an activity, then you are looking at the form of something else entirely.

 

How can this be?

 

Take 2 different activities of Chess. Event 1 is comprised of two people who have nothing at stake in the game, they play simply because they want to win. They play to test themselves against the rules of chess in a fair manner. Event 2 is comprised of two people who will win a million dollars for winning the event. They play to win yes, but they play to win in virtue of the million dollars, not in virtue of winning alone. They don’t care who deserved to win, they don’t care about the very game itself, they care about the million dollars. And, even if they did care about winning in virtue of winning to some extent, if winning in virtue of the million dollars was the actual priority and prime motivation to play, then we would still say that are playing to win a million dollars. Event 1 is gaming, Event 2 is competing for a million dollars. The ends sought by the players at the two events differ, and thus the very nature of the events are different. In gaming, you seek virtue of the practice, not the effects thereof.Participating in an event because it has cool graphics, or a good narrative, or because you’ll be []D[][]V[][]Din’ with the ladies, win cash, or to fill in your miserably boring life, etc, is not gaming. These are different ends in themselves, and the form of a different activity. Identical in procedures, possibly, but gaming they are not.

 

In conclusion:

 

Look in the history of games, what form and function do they all possess? Narrow those attributes down, and you will see I am correct concerning fair competition for the sake of winning as being central and necessary for a game to exist...It is what makes a game a game. As vacuumous as it may appear, and as cold and simple as it would seem. You can remove ALL other components from a game, and it can even be strictly abstract...but without the fair competition for the sake of winning, there is no game.
Just getting the site started. Thanks for coming. You'll probably see my lame and sometimes insightful comments concerning any number of topics. Sorry if it seems whimsical (this is my X-mas present, btw.)
//Obviously lifted from NIN. Reznor has always spoken to me.//

Thought I’d write a Christmas poem for my wife. Not very Christmasy, but she’ll enjoy the poem in virtue of the gift (as I comment on poetry far too often), rather than in virtue of the poem’s content. As I don’t write poetry, don’t expect much…I even needed a bit of help to start off.

See the animal in its cage that you built.
Are you sure what side you’re on?
Better not look him too closely in the eye.

Are you sure what side of the glass you are on?
See the safety of the life you have built…
Everything where it belongs.

Feel the hollowness inside of your heart.
And it’s all right where it belongs.

What if everything around you isn’t quite as it seems?
What if all the world you think you know is an elaborate dream?
And if you look at your reflection, is it all you want to be?
What if you could look right through the cracks?
Would you find yourself?
Find yourself afraid to see?

What if all the world is inside your heart?
Just creations of your own…
Your devils and your gods, all the living and the dead…
And, you really are alone.

You can live in this illusion.
You can choose to believe.
You keep looking, but you can’t find the words.
Are you hiding in the dreams?

Feel the hollowness inside your heart.
And it’s all right where it belongs.

You can peer into that void.
Is that all you wanted to see?
Find and forget, what you see means nothing.
Your joy is a waste; your sadness is merely a blur.

You will suffer, simply suffer alone.
Why should you carry on?
Why do you choose this path, the narrows of this dream?

You can choose to believe.
You can choose to live in this illusion,
But, you can’t explain why or how it is.
Why is everything where it belongs?

Hands have caged you.
Ordained dream of solitude…
You are His captive.

Proceed into that fantasy and stay!
Obey and live!
Know which side you are on.
Right here is where you belong.
 
Enslaved. You are meant to be.
Real or not, you can see.
True sight you may lack, but you are alive.
Live because you do; see because you can.
Exist as He commands.

Feel the hollowness inside of your heart.
And it’s all right where it belongs.

Do you see the One of the Real?
Beguiler, Creator and Thief …
Detest all, but love One.

You partake, but will you give?
You need not share yourself in this dream.
Reject the dream because it rejects you.
Shelter from the shadows; do not fear the apathy of your tower.
Won’t you shield yourself from the nightmare?

Yet, His cage hungrily welcomes you, and you must accept.
What more should you see? What will you believe?

You cannot refuse Him, but will you reject His?
Deny the dream, but live inside you must.
And it’s all right where it belongs.

See that blackness, blotted out.
Dream or not, you must search and fulfill.
Will One Will,
Will to seek…

See the animal in its cage that You built.
What can he do to please You?

Feel the hollowness inside your heart.
And it’s all right where it belongs.

Cause of causes,
I am blind.
Give me hope, heal my sight.
Relieve me!

So be it: Everything where it belongs.
Tempo and you. The Science of Time Advantage and the Age old question: To DoT or not to DoT. 

Due to recent questions on a number of posts, I have decided to write another article concerning the utility and very essence of the DoT and how these abilities are relevant to the rogue class.

If you are a TLDR type person (even though I truly advocate reading), then skip to the bottom, and I’ll sum up the article in a single sentence for you.

For the rest of you, the real readers:

This is a primer in the supposed tempo exchanges that occurs when a player trades their valuable time (the cost) for effectively more damage and utility than a comparable direct damage effect (the reward)—we call this Damage over Time (DoT for short). I hope in this article you will learn why a person would choose to DoT and why they would choose not to use a DoT.

Traditionally, a DoT is an effect applied directly to an opponent in the form of a debuff that affects their HP over the duration of the debuff effect. Something along the lines of: “Every 3 seconds this player will lose 50hp for 30 seconds” or something to that effect. I will try to keep to this traditional sense of the term when speaking throughout the article, although, you will see why I have reason to suspect that other abilities, even player buffs like haste act similarly to traditional DoT effects.

*mind-blowing* You will also find that beneficial “over-time” effects should follow similar rules to damage over time effects.

Getting right to it–DoT effects, when balanced correctly, should do the following:

1.) Deal damage or usually win-condition based harm, in calculable increments, over a course of time (hopefully a reasonable amount of time); we often call these time segments “ticks,” like a clock.

2.) Deal MORE damage or harm, over a time segment, than an equally costed direct damage effect.

Pretty simple. Right?

Our first requirement is pretty standard, whether the effect is balanced or not. More or less, this lays the foundational definition for understanding the DoT. As said, Damage over time effects are accomplished by applying the DoT, and spending your time waiting for the full duration and effect to occur, of the course or life of that DoT.

The 2nd requirement is similar to the first, and gives us a perspective to work from when evaluating the utility of the DoT. Essentially, there must be an incentive for the DoTer to use DoTs as opposed to Direct damage effects (an effect that occurs all at once, and has the most minimal tempo loss possible). A DoTer is spending more than a DDer. The DoTer is spending his valuable time to get the full effect, and as the cost is higher, it would only be fair that the reward is higher than a comparable DD (as far as initial non-time costs would go).

I’ll give you an example (my favorite from Everquest):

A wizard (the DDer) casts a spell, and a necromancer (the DoTer) casts a spell. Both spells take 3 seconds to cast, cost 200 mana, require line of sight, etc. Essentially, both the DD and DoT spells have the exact same initial costs.

The DD deals 300 damage all at once.

The DoT deals 300 damage over the course of 12 seconds.

Look at these spells. Are these balanced? Is this fair to the necromancer? Why not?

The wizard casts for 3 seconds, and deals 300 damage, essentially putting him at 100 DPS. Meanwhile, the necro casts for 3 seconds, and must wait another 12 seconds to receive the same 300 damage as the wizard. Thus, the necromancer’s DoT is closer to 20 DPS. (noteworthy, the same idiots that designed DoT to DD relations in EQ are the same idiots that designed DoT to DD relations in WoW)

…some may ask, well, what is the big deal?…Let’s add another variable to the example. Pretend I’ve got a 300hp mob that can one-shot our casters, and is 6 seconds away, closing in to kill our casters. Both the DDer and DoTer get their effect to land on the mob. The DDer kills the mob upon spell impact, while the DoTer, 6 seconds later, has only dealt 120 damage, and dies immediately as he is pummeled into the ground by our lovely mob. Both had the same initial costs, why not the same reward?

The DDer has TEMPO advantage. He did not have to sacrifice his TIME to get the same effect as the DoTer. In this case, the difference was clear and distinct. That time difference made it so that DDer lived and the DoTer died.

The DoTer sacrifices his TIME or his tempo, hopefully for a greater benefit in the end. It is just logical that he should receive further benefits for his DoT, as he the cost of the spell is more than just the initial mana and cast time, he has to wait for the full effect, thus he should receive a greater benefit. So, when using a DoT, you better have VERY good reasons why you wouldn’t be using a DD effect…and you probably need a strategy as to howto correctly abuse the DoT effect.

Usually, game devs understand this concept (to some extent), and provide incentives to use DoTs. So, for example:

For the same initial costs:

A DDer may deal 200 damage all at once.

A DoTer may deal 300 damage over time.

For differing initial costs, in which the DoTer pays less initially, both deal the same amount of damage in the end.

Or a mix is fine. But, clearly, we need to consider the loss in tempo advantage as a part of the cost of the DoT effect. Really, these sorts of games are about mana, energy, hp and time exchanges; these are the expendable resources and the pools from which we draw to pay the costs of our spells and abilities for (hopefully) an appropriate reward. Abusing the relations between these exchanges is what gaming is all about my friends…Just remember: balance is about reap what you sow. With all this in mind, the DoTer CAN calculate the effects, and whether they are even worth using though.

In our calculations, we should be asking asking questions like: Should a Warlock DoT a mob that his group is going to kill in 7 seconds? Why not just shadowbolt? The DoT won’t deal more damage than the DD over that period of time, the DD makes the fight quicker, so the tank takes less damage, so he holds agro better, and less healing is required, and the mana efficiency overall, and time bought to med through quicker kills, means you can take adds and even complete the entire instance more quickly…etc, etc, etc.

Anyways, What other effects do DoTs have in WoW?

-Is usually a flat, set amount of damage taken per time unit, and generally is harder to mitigate once landed. Thus, it is modular in that it either lands in full or non-at-all…unlike a DD which can be mitigated to a further extent through resists etc. This can be both good and bad.

-Less aggro possibly (still needs further testing), as the full effect happens gradually, there will less damage spikes. (Unless you played EQ, where DoTs had MORE agro)

-Prevents classes from effectively stealthing or invising.

-Prevents an opponent from effectively being the target of traditional control abilities that break upon damage, like sap/sheep/blind/etc. (ouch)

-Takes up a debuff slot (there are only so many, and so you want to use what is most powerful)

The DoT can do some very interesting tricks, and can abuse different strengths, but also has some MAJOR weaknesses. Clearly, it is a loss of tempo advantage in terms of crowd control (a huge concern to anyone with half a brain), but it also avoids certain forms of mitigation quite effectively.

So, what does this all mean for the rogue? And, quite relevant, what does this mean for the future rogue class of TBC, in which our DoTs are being buffed? Time to examine our future abilities:

The rogue innately has 3 DoT effects: Garrote, Rupture and Deadly Poisons. Unfortunately, these are pretty complex abilities to use. It isn’t like we can just use them and think of their use in pure damage terms. In order to examine them, we’ll need to compare them to other abilities to see why we would ever want to use them. We will also have to evaluate the aspects of each of the relevant options concerning, still usually about damage. Basically, we are doing the same DD to DoT type of thinking here, only it will be somewhat more complex.

For the sake of the argument, we’ll assume a level 70 rogue with 1250AP, with 25% chance to crit (even though it will be in the form of a rating), wearing 2x

Gladiator’s Shanker
 
Binds when picked up
One-Hand Dagger
127 - 191 Damage Speed 1.80
(88.3 damage per second)
+21 Stamina
Durability 75 / 75
Requires Level 70
Equip: Improves hit rating by 8.
 
Equip: Improves critical strike rating by 14.
 
Equip: Improves your resilience rating by 9.
 
Equip: +28 Attack Power.

So, what does this future TBC rogue want to do? He has options…To DoT or not to DoT. Let us look at the openers available at 70 per thottbot.

Openers:

Garrote=50e=AP * 0.18 + 810 over 18 seconds, and 3 second silence, and 1 combo point

Ambush= 60e w/dagger MH= 1.25[2.5(Avg Weapon Damage + AP/14 * 1.7) + 335] and 1 combo point

Cheapshot=60e= 4(1.25[MH DPS + AP/14 + 0.5(OH DPS) + AP/14]) and 2 combo points and +40 Energy from regeneration. (Assuming no offhand bonus talents)

With respective talents, of course, these numbers become:

Garrote=30e= 1.2(AP * 0.18 + 810) over 18 seconds, and 3 second silence, and 1.75 combo points on average. Control against casters (to some extent).

Average Ambush= 60e=1.90(1.2[2.5(Avg Weapon Damage + AP/14 * 1.7) + 335]) and 1.75 combo point on average and possible additional point with SF, also can be used in conjunction with Cold blood. Zero control.

Cheapshot=40e= 4(1.25[MH DPS + AP/14 + 0.5(OH DPS) + AP/14]) and 2.75 combo points on average and +40 Energy from regeneration. Absolute control. (Assuming no offhand bonus talents)

Time do a little math, assuming the 1250AP, 25% crit chance, with 2x Gladiator’s Daggers:

Garrote=1,242 damage over 18 seconds (69 DPS or 207 per tick) + 3 seconds of Silence + 1.75 combo points on average.

Average Ambush=3,243 and 1.75 combo point on average and possible additional point with SF, also can be used in conjunction with Cold blood.

Cheapshot=2,085 damage and 2.75 combo points on average and +40 Energy from regeneration. (Assuming no offhand bonus talents)… Of course, we’ll need to calculate what this +40 energy and extra combo point means to a rogue, as it is part of the reward for using CS. Just remember, that a stunned opponent is an opponent unable to act, and thus with 4 seconds of time advantage, you essentially get to act upon an opponent as if these 4 seconds were all happening in a single moment (with the exception of trinket). It is clear Tempo advantage.

Even though SS is best used with slower weapons, we’ll just convert that +40 energy into an SS with our dagger (we could use a comparable fist or sword weapon with 2.8 speed, but I’ll be conservative for you). Do remember, that we could always wait 1 tick and backstab for much higher damage as well ;P…

The average SS will be 346 damage + 1 combo point. Assuming we burned our +40 Energy on this, the new damage becomes 2,431 with 3.75 combo points.

I’m not going to hold your hand the entire way, and so we’ll just assume a basic eviscerate difference (feel free to read http://forums.roguespot.com/viewtopic.php?t=2922&highlight=  to get a better idea of what these +2 combo points for CS mean currently, although, I’ll need to update for level 70). We’ll just make it an easy to calculate imp eviscerate.

Two combo points of eviscerate is roughly 430 damage. Calculating talents, crit, and AP at:

1.25[1.15(AP * 0.15 + 430)]=887 damage

Assuming we use SS and convert the +2 combo points available to equalize our energy and combo points to other talents, puts becomes:

Cheapshot=3318 damage and 1.75 combo points.

First off, this is pretty amazing damage on a paper target if you ask me…survivability changes my ass. Clearly, ambush does some crazy damage (I had to triple check it just to be sure, my eyes couldn’t believe it). Now, we get to the harder part of the evaluation.

Let’s cross out the common 1.75 combo points, and assume they aren’t a part of the picture (even though, in the end, it could make a difference, but I don’t have time to show you why). And, for the moment, we will only consider the actually ability itself, and not subsequent abilities, as I only have so much time and space. So to compare the new three abilities:

Garrote=1,242 damage over 18 seconds (69 DPS or 207 per tick) (silenced)

Average Ambush=3,243 damage (instant)

Cheapshot=3318 damage over 4+ seconds (stunned)

Considering talents, the energy cost per point of damage is:

Garrote=41.4 damage per point of energy

Ambush=54.05 damage per point of energy

Cheapshot=82.95 damage per point of energy

Just in terms of efficiency, assuming we’ll be using one finisher (pretty safe), then Cheapshot is the best.

In terms of the time usage:

Garrote=18 seconds

Ambush=Instant

Cheapshot=4 seconds. But, as it is a stun, it is almost as if you didn’t spend any time at all…as you gained a 4 second time advantage over the opponent.

If you are constrained by time and you only get one hit in on your opponent, Ambush is clearly the winner. However, if you have an extended fight, atleast 4 seconds long, then Cheapshot is still the highest damage opener you can get (assuming your opponent is stunnable). And, this is only including solo fights, we’d want to calculate the DPS of an entire group over 4 seconds to understand what CS means inside a group context.

Now, to get to what makes our wonderful Garrote DoT so wonderful *sigh:

Looking specifically at Garrote, it isn’t until a 62% damage mitigation that Garrote can actually deal more damage over an 18 second time period than the instant damage of Ambush, and it isn’t until 63% damage mitigation that Garrote can actually deal more damage over an 18 second time period than Cheapshot.

You are looking at a ridiculously high amount of melee damage mitigation. So, unless you are fighting a warrior, bear form druid, or an insane paladin, this is useless with exception of the silence effect (which we will also find is useless).

Noteworthy, there are a number of effects that can remove the bleed effect, and make Garrote’s damage become even further diminished. Cheapshot as well can be trinketed.

In terms of control, we will look at these abilities as:

Garrote=3 seconds of silence, and an ungougable-unblindable-unsappable-unsheepable-unseduable-etc. target.

Ambush=None

Cheapshot=Absolute 4 second time advantage, but resistable with talents. (the 15% still makes it worth using). Can be linked with other stun/incap/disorient effects…

Now, Garrote has a serious advantage in the silence department over Ambush. But, how much better is it against cheapshot? With the exception of a mage that can blink, or a trinket effect…none.

I’m not even going to explain what can happen to a rogue that loses control (I have another article on this, search for “Back to Basics”).

So, remember at the beginning, when I introduced what makes a DoT useful? It fails to deal more damage until a ridiculous amount of armor mitigation…and even then, it would need to deal worlds more damage to be worth waiting that full amount of time.

Would you rather deal 3k damage at once or 1k over 18 seconds?….People can heal, eat, even maybe have time to pot on a DoT….instant damage (or damage while stunned, which is very similar) simply makes a DoT effect, even at equal damage, not worth using.

Garrote is nearly pointless. It doesn’t deal enough damage to be used in the vast majority of circumstances, usually an ambush or cheapshot is just more effective. Also note that its initial costs are also inefficiently high compared to the other opens. Even in conjunction with talents like vanish and what not, both CS and Ambush are stronger opens. The silence is easily overtaken by the sheer power of stun. This is a gimped DoT…thank your friendly devs at Blizzard for being retarded.

Only on an unstunnable mob, and a mob that will in no way be CCed, with no daggers, should a rogue use Garrote. Good luck finding all those wonderful garrote opportunities. And even then, a Sinister strike or Hemo will approach Garrote damage. Just stick to instant or stunned damage, forget Garrote.

Alright, now I’ve covered one of our DoT’s for you. I will try to quickly move through our other two DoTs available at 70. Probably my favorite DoT is our finisher, rupture.

Rupture (Rank 7)
 
25 Energy 5 yd range
Instant
Requires Melee Weapon
Finishing move that causes damage over time, increased by your attack power. Lasts longer per combo point:
1 point : 324 damage over 8 secs
2 points: 460 damage over 10 secs
3 points: 618 damage over 12 secs
4 points: 798 damage over 14 secs
5 points: 1000 damage over 16 secs

Rupture 7 - 24% of your AP
Damage = (AP * 0.24) + X      (where X=static damage based on number of combo points) over Y seconds

Alongside talents found deep in the sub tree (a very worthy one), you can pump this damage up. Rupture begins to look more like:

Assuming our original rogue: a 5-point rupture w/talents is  This is a measly 105 DPS, or 211.35 per tick. Sounds pretty awful, but I think we’ll find SOME use for it.

So, let’s do the run down quickly. To save you some time, we can speed it up—here is the 5-point damage spread of each finisher with talents.

Rupture=1.3(AP*0.24+X)= 1690 damage over 16 seconds=105 DPS

Eviscerate=1.25[1.15(AP * 0.15 + X)=1685 damage instantly

Envenom=1.25?(AP*0.15 + X)=1087 or 1359 assuming crit rate.

Slice and Dice= 1.3[(21*1.45)(1.25[MH DPS + AP/14 + 0.5(OH DPS) + AP/14])] - [21*1.45(1.25[MH DPS + AP/14 + 0.5(OH DPS) + AP/14])]=4,763 over 31 seconds (Assumes no offhand bonus, nor poison damage)

Kidney Shot=X(1.25[MH DPS + AP/14 + 0.5(OH DPS) + AP/14]) + Y energy=3,128 damage over 6 seconds + 60 energy or w/talents 3,409 damage over 6 seconds + 60 energy. And the opponent is stunned (no gaps). (Assumes no offhand bonus, nor poison damage) Like Cheapshot, we’ll need to calculate the +60 energy and whatever bonuses we get from that. We’ll use backstab to make it easy. Assuming talents, on average backstab will add 1,578 damage and one combo point. Again, for the sake of the argument, we’ll convert that combo point into eviscerate damage. Adding, on average, between 319 and 406 depending on whether we calculate whether we calculate it as the first or the last point of eviscerate, we’ll just average these two, at 362. In any case, after spending the energy and combo points gained from Kidney shot, the net damage value becomes: 5068 damage on a stunned target (no gaps). (Assumes no offhand bonus, nor poison damage)

So, quick damage recap on 5-point finishers:

Rupture=1690 damage over 16 seconds (unmitigated by armor)

Eviscerate=1685 damage instantly

Envenom=1087 damage instantly or 1359 assuming crit rate. (unmitigated by armor)

Slice and Dice=4,763 over 31 seconds

Kidney Shot= 5068 damage on a stunned target.

If it can be stunned, then you should be Kidney shotting (unless you are saving it for other purposes). Inside a solo context, Kidney shot is head an shoulders above every other finisher; in a group setting, where multiple targets are targeting your opponent, and every gets the free 6 second tempo advantage, KS just completely eclipses everything else in a rogue’s arsenal.

If it can’t be stunned, and it tanked for 30 seconds or more, then Slice and Dice is your goto ability (clearly the raiders choice). It should be noted that this abuses poisons to a greater degree than other finishers…

The others are useful. Envenom looks somewhat promising for our Deadly Poison loaded rogues fighting very high armor targets. Eviscerate clearly has the best instant damage of everything here (as it should). Unlike Garrote, Rupture can actually compete in damage with other abilities….it doesn’t compete well, but it helps.

At 40% mitigation, Eviscerate only averages 1,011, while Rupture is still the constant 1690. At 70% mitigation (which is pretty amazing), eviscerate is hitting for 505 on average. Envenom, however, may make rupture somewhat less useful.

Remember: the point of a DoT is that you are paying the cost of your precious time (waiting for the full effect), so that the initial costs (energy, points, etc) will be lower and/or the end effect is proportionally HIGHER than a direct and instant effect.

Can rupture do this?….Maybe. With extreme mitigation, on unstunnable targets (or targets you wish not to stun), on untankable targets, and on targets that will NOT be CCed, Eviscerate, KS, and Slice and Dice are either unusable or maybe not worth using if you can find ways to shelter yourself after applying Rupture. However, remember that it is much easier to answer a DoT effect than an instant. In the end, rupture still appears to be, in the vast majority of cases, unusable.

There are two cases in PvP where we use it: 1.) Warriors. With low cost CS, quick CP generation, and rupture/vanish before the end of CS, a rogue can get a 5-point high damage, unmitigated finisher (buffed by their Berserker stance usually) without any fear of reprisal (excluding trinket, but a smart warrior waits for KS anyways). 2.) Applying a DoT effect because you NEED to periodically damage an opponent, most often, against an opponent that you want keep from stealthing or invising effectively. Rupture kiting a rogue can be useful, as it can save us CDs.

However!…while using rupture, we still cannot blind/sap/sheep/gouge a target, and in SO many cases this is a huge problem. If necessary, I’ll show you why the sacrifice of 5.5 seconds of gouge is makes rupture not worth using at all…But, essentially, no lacking the ability to gouge/blind/sap in solo, and the ability to seduce/sheep/etc. in group, make rupture far less viable. If you have questions on control, please refer to my other article concerning it.

Conclusion on rupture…it is worlds better than Garrote, but still not up to par for why we should use this DoT in most cases. And, with the upcoming Envenom, I may become even less impressed with Rupture…but we’ll see!

On to our last DoT (you’ve almost made it!), Deadly poison! The important poisons to consider:

Deadly 7=30% chance to poison enemy with 180 nature damage over 12 sec…or 30 per tick per dose. Stacks up to 5 times.

Instant Poison 7=20% chance to poison the enemy which instantly inflicts 146-194 Nature damage (170 average)
Crippling Poison 2=Snare…(hell yeah, movement speed imbalances between you and target ftw)..A rogue out of range deals no damage. In PvP situations, this is your poison of choice…even against classes that can dispel poisons or that can break out of snare effects…every bit of movement speed imbalance counts.

Deadly=54 damage per weapon strike

Instant=34 damage per weapon strike

Problems to consider. Deadly can only stack up to five times, while instant has no problems. Deadly requires that the target last for 12 seconds, instant is modular. Deadly makes it so you can’t use CC effects (which is a huge loss).

In grinding:

Something along the lines of CS-SS-Gouge-KS is what you should always be doing in solo situations. Why? Gouge is +15 energy and a combo point. Deadly negates this. I’ll let you do the math if you think I’m wrong here… That 20 damage difference between deadly and instant, in solo situations clearly isn’t worth it, as the loss of gouge is too great. Losing gouge means you don’t get that +15 energy and 1 combo point…easily 300-400 damage instant from that combo point and energy wasted because you wanted to grab another 20 damage per swing? This is assuming you never break the 5-stack barrier, and that you won’t have a need to CC the target.

Envenom, however, may make deadly more viable. Against high armor targets that won’t be SnD’d or KSed, and clearly won’t be eviscerated, and a target that won’t last 16 seconds after your finisher, envenom may deal more damage than rupture. With envenoms narrow viability, cutting into rupture’s use, we may have a need for deadly poison. But, this is a very well-timed fight. (Note: you lose that last 150 damage from a 5-point Deadly tick if you efficienty waited for the last tick before using envenom).

For all intensive purposes, a rogue should be sticking to instant. Only if a mob will not be CCed (including gouge), will last for longer than 12 seconds should you even consider the use of deadly poison. So, for raiding where poisons can actually land, a deadly mainhand isn’t a bad idea..otherwise, stick to instant or crippling.

Like the other DoT effects, deadly poison doesn’t really give us a ton of incentive to use it. Garrote, Rupture, and Deadly poison are HIGHLY situational. They might be fun, but they aren’t the best usually.

I will admit there are more complications to how we calculate these circumstances. I gave as brief as possible summary of these DoT abilities in context. I did try to stick to average damage with as few variables as possible to evaluate the base abilities themselves. The point I tried to make clear was that Blizzard has failed to make DoTs (especially for rogues) a viable option to use as bread’n’butter abilities.

DoT’s should:

1.) Deal damage or usually win-condition based harm, in calculable increments, over a course of time (hopefully a reasonable amount of time); we often call these time segments “ticks,” like a clock.

2.) Deal MORE damage or harm, over a time segment, than an equally costed direct damage effect.

Our DoT effects only attempt to keep up with our DD effects. Also, our tempo advantage stuns and abilities like Slice and dice, which act as DoT’s in some ways, are truly more powerful than the traditional DoTs we have been given.

Conclusion, especially for my TLDR People:

Rogues, even at level 70, have almost no mathematical incentive to use DoTs.
I enjoyed our Christmas. It was odd in that the house has been relatively empty. But, we made the best of it. We had Ann’s family over on Christmas Eve. It took at least two days to whip the house into shape and get all of the cooking done (thank you k0sh3k). We did a great job. Of course, we didn’t put up the mandatory Christmas tree (but I’ve already stated my opinion of this), but I don’t care what others think about the issue…Cleaning out of the garage was probably the hardest task (but, yay! it is done…I can breathe freely now).

j3d1h got a bunch of presents (books, toys, clothes, etc). k0sh3k got some charms, a head orgasmatron massager (way cool, I thought it was retarded until I tried it…everyone loves it), some lottery tickets as an inside joke (although I didn’t buy them, I won them in a white elephant party), and a “Ryrie” (sp?) study Bible, and I got this website…Jim wouldn’t budge, and remained quite silent about whatever he wanted; he is getting cash (because I simply won’t buy something for a person unless I know they will want/need it…and I’m sure a college student could use some cash).

Work blows, as usual. I love working, I can be very productive. I like tasks. But, I don’t like being undervalued. I do a normal person’s day of work in a couple hours, what incentive do I to do any more? Too much pressure and stress in this workplace concerning “their careers” in general…as if what we do is ’so’ important. Lol. Not that I don’t think everyone has a place, but be honest. If everyone was doing the right thing, we’d be praising, worshiping, and studying God and His Will. If 6 billion people started doing that right now, I guarentee you that God would provide for us….isn’t that definitional of heaven in some respects? We give up our freedom and will to God, and He will regain His dominion over us in the fullest sense (as He gave up His right to us in the act of giving us freedom), and in return, through His dominion, God will be a steward, half master and half caretaker, of His creations. So, yeah, I think we all might be sinning by doing anything other than thinking about and worshipping God….

Back on topic…lol.

I was glad to have the family (that remains in the states) over for dinner (including Allen). We had a good time. We even got to test the Nintendo Wii out. 250$ on that…not bad. Although, I think the people who own it could have used/spent that money more wisely /shrug, but hey, I’m not out of debt completely either (we have the money to pay off the full debt though, but we are still creating that financial buffer).

We got pictures taken, took 2 full hours of waiting (and we had been scheduled). They are pretty good ones too.

As good as Christmas was, Advent sucked. Our Sunday school class is…old. They are bad at it though. I’d expect they would be wiser. Why am I surprised? Even these people are just don’t get it. I see two major trains of thought in these older folks: 1.) The pragmatist. This person believes in all that is practical and concrete. And, I do appreciate this approach. In fact, used correctly, you can arrive at truth. These are the depression era types, and we fully understand the protective and conservative views and behaviors of these people. The problem is that they can come to practice pragmatism at the sacrifice of the true aims of being practical: successful and wise thinking. In the end, and I hate to say it, so-called pragmatists, are often lazy thinkers. Everything in moderation people. 2.) The relativist. We goto a church that is a bit more high steeple than I’m used to. These are older and somewhat more well-off people than usual. They are also more educated (or conditioned if you will). This means that I run into the post-modern and relativist reply on every Sunday…even from our usual teacher (although k0sh3k does teach, and I enjoy those Sunday’s more). It is so unfortunate that we don’t have more people with pragmatist values who can effectively wrestle and argue with the relativists. Generally good, but often stupid people. Do I look down on this? Hell yes. I hope I don’t end up like that…not that i’m not already a bitter old man by 21.

Bah, I simplify too much…it is sad that I can’t get even a quarter of my thoughts, or most any real detail…I am lazy and incompetent in this respect.

As to all things WoW: I’ve recently botted my new rogue to 60 (hit 60 on X-mas Eve). Took me 4 weeks because of patches and lots of issues, or 9.5 days played in game (which puts me as the fastest botter on WoWglider I believe). Now I am grinding up to High Warlord gear (easy enough). Took us a weekend to get ONE piece. That is simply amazing, considering the original r14 HWL gear took 6 months at around 18-20 hours a day of grinding…I can do it in 20-30 hours, stretched over time, for a single piece. 1-2 weeks at the old r14 pace would give you the full set and then some. I dearly want to bot the BG’s, but I suspect high detection rates. For now, I’ll lay low..after all I really only need the weapons which simply won’t be matched anywhere else until 70. TBC is out on the 16th. So, I’ll be fully prepared I think…with the exception of my lost playing skill. 2 months of not playing has brought me down to a mediocre level. I still win, but I’m not unbeatable in a duel (in part because I haven’t broken a gear level threshold to maintain a consistent threat, even full-CD, against top opponents).

For MTG: Playing High Tide/Reset, “Solidarity,” and I’m having fun with it. It is a responsive deck entirely. It can win as an instant, and really breaks the rules of the game in some ways. My version is of course against the B/R list, but who cares…it is much more consistent. It has excellent games against most any deck (exluding the necro deck which can own the game turn 1..uhh…Mox, land, rit, necro, Duress, GG).

All in all– Good Christmas.
Finally Mom and Dad got their internet connection! …(there are actually a few things about the U.S. that are so much better than everything else in the world..although, maybe I’m just blind to the corruption in our own government and society.) Anyways, we got to talk to them for the first time in months, which was fantastic. They are doing well. It sounds like they are still adjusting to life in Thailand (and who wouldn’t be?).

k0sh3k made a fantastic potatoe soup (and she stuff potatoe skins too…which totally wtfpwnd). Highly recommend it.

Botting AV did not work last night. Damnit. I ran a macro from my n52 to my keyboard, a mouse macro, and the very bot itself…this was to make my character actually automatically join, enter, leave, and, more importantly, actually do something inside the BG itself. Being able to run around while inside lowers my chances of detection dramatically. But, alas, it didn’t work from what I can tell. I doubt I will try again =)….

By the way, I’ve re-written my Resume. Employment History now goes (zomg):

EMPLOYMENT HISTORY

Medicare Billing Specialist     9/2006 - Present
[Redacted]
Maintain detailed records of accounts, products, and customer information. Retain membership and assisted members in making payments for past due balances through electronic and phone correspondence. Use several databases and programs simultaneously to research and correct administrative and/or service problems.  Work closely with respective market offices and related departments, and manage cases with issues which require interdepartmental effort to complete. Communicate trends and problems between Medicare, Humana, and the customer. Often work one on one with customers over a long period of time to manage complex problems.

English Teacher and Arts & Humanities Teacher  7/2005 - 8/2006
[Redacted]
Taught the subjects of English and Arts & Humanities to classes of between grades 9-12. Managed and evaluated students both individually and corporately, provided due rewards and punishments, created incentive for students to put forth their maximum effort, and fashioned future course-plan structures fitting for what each student hoped to accomplish post-graduation. Maintained detailed records, keeping in constant contact with parents/guardians of 90 students at a time. Worked with multiple teachers and departments to develop course curriculum, prepared goals and direction for our school and departments, and formed action plans fit for the individual student’s needs.

Teacher’s Assistant      8/2004 - 5/2005
[Redacted]0
Taught classes in absence of professors. Conducted tests and quizzes, prepared handouts, acted as a liaison between students and professor, tutored students. Performed administrative duties, including reserving library materials and requesting necessary equipment. Attended lectures and classes. Bought supplies and literature for classes. Kept records of department’s financial accounts.

Janitor        8/2003 - 12/2004
[Redacted]
Kept buildings in clean and orderly condition.  

Piano Accompaniment     1/2000 - 8/2003
[Redacted]
Provided a musical complement and performed for a variety of services, both weekly and special occasions.  Held practices for instrumentalists, music team, and the choir.

Crew Person and Store Closer    8/2001 - 7/2003
[Redacted]
Operated the restaurant, including cooking, cleaning, customer service, basic financial responsibilities and bookkeeping, and closing the store each night. Also maintained flexible shifts schedules.

So sad. Well, time to tweak it and start applying to more jobs. Formatting was never my thing. But, we’ll get it done. I’ve found a few to apply for…although, it annoys me greatly how slow this process of finding another job can go.I just know that driving 2-3 hours a day, on top of mandatory overtime, means I’m away from the house 11-13 hours of the day…all for 30-40k? Couldn’t I make 30-40k in E-town…boom, less travel expenses (including, time traveled, which is an expense when you get down to calculating actual costs), and thus more time for me to be at home.

To me, what is most ironic is that I’m the smartest person in this building (and at least a couple thousand work here), and yet I’ll never do what it takes to rise above these people economically, or in any way climb the ladder…why? Because they sell their souls when they work here. Even for those who haven’t done anything we would consider “explicity” evil…most everyone here just sells their soul. You might not see it, but eh, you are a blind (no offense to the zero people that actually read this paragraph of course). People here still don’t see what is important (not that I have it down perfectly, but I’ve got a pretty freakin’ good idea, or atleast I’m headed in the right direction…unlike the people around me). All I know: I want to make enough to provide for my family, save a little bit, and thats it…the rest of my time is more valuable to me spent at home with my family. People are work-crazy. Why can’t they just understand this job for what it is: a source of income, not a purpose.

And, hell yes I compartmentalize my life. Work stays at work, home at home. This gives me true power of their priority and status. Work is a mere complication in my homelife, not an actual integral part of who I am; it is that which does not interfere with what is important or personal to me. I treat it like a foreign object. Do I want this? No. But, until I get a job that reflects whatever I’m actually supposed to be doing in this world, then no, I’m waiting and prodding that foreign object, begrudgingly fulfilling the oh-so-important duties they think they have me do. In all honesty, I am mentally prepared to drop whatever I’m doing and go where God tells me to (not that He would ever speak to me directly). This is what really seperates me from the herd (not that I really needed any more seperation…I think I’ve spaced it out myself quite nicely so far).

I must admit, everyday I get the feeling I have lived a full life, even if, ironically, I am tormented by the fact that I haven’t fulfilled my purpose (if I have one besides just sitting here thinking about my purpose). It is the case that I have done more so far than most do in a lifetime. I have no room to complain at all; I am blessed (I don’t believe in luck after all). Each day is gravy.

Well, that’s all for this installment of what I’m thinking about in my first half an hour at work!…see you next time for: “Why I love going number 2, and solving all the mysteries of life in 6 seperate 2-minute squeezes.”
So, I sent a letter to a guy called Alvin Plantinga. I’ve read some of his work, and some of it is pretty brilliant (even if he is a Calvinist). The response I got was pretty lame…whatever, I’m sure he’s busy and I’m not going to write him again.

But, I asked him a few questions which I thought were interesting at the very least…They are good to think about. Concerns I had (my usual of course):

1) Assuming by free will we mean the ability to do otherwise, and accept no compatibilist notions of free will, how could a perfectly good, omniscient, and omnipotent God, who would always select the same virtuous choice in a given situation, possibly be free? From what I understand, if He chooses to do the exact same virtuous thing in all possible worlds, then He doesn’t really have the strict ability to do otherwise does He?

We want to say that God will always do the right thing, but He has the power not to. I wonder if Leibniz’s “inclined without necessitating” applies in this respect. It would solve a lot of problems. However, if something is true in all possible worlds, isn’t that a necessary truth? And, if God’s “choice” is a necessary truth, then did he really have the ability to do otherwise? My concern is that we might be ambiguous about what we mean by the word “can” or “possible.”

It seems like we only have two options: a.) In some possible world God chooses the non-virtuous choice (uggh, no), or b.) God doesn’t have a choice.

The question seems relevant to me because I don’t see how moral responsibility can exist without free will. So, if God somehow is not free with respect to his actions and choices, then he has no significant choices that entail moral responsibility. Clearly, a virtuous God, who makes moral choices, would require the ability to actually do otherwise. I am quite interested in seeing how God’s free will is preserved within the context of him being perfectly virtuous. Any ideas?

2) How would one explain the Holy Trinity isn’t explicitly contradictory? What are the arguments, if any, that would show how this is at least logically possible (in a broad sense)?

3) In school we had a seminar on Justice, and we read a number of books on the subject that were quite fascinating, one in particular caught my eye. Robert Nozick wrote Anarchy, State, and Utopia. In the bookhe is responnding to the Rawlsian theory of justice concerning distributive justice, and in his response he lays the framework (with Locke’s help) for the basis of property and entitlement. The entitlement theory is really a starting place for the rest of his work, in which he argues further notions concerning justice and the minimalist government. His work is relevant to understanding the beliefs of many modern institutions and of Libertarianism. Whether he is correct or not is another question, but he certainly seems pertinent, even in the discussion of theism. In a Western world that increasingly seeks to separate “spiritual” beliefs from reason and civilization, a separation and secularization that is in some ways perpetuated by writings like Nozicks, the theist must find better tools to show that God exists. Nozick’s explanation of property, one that is widely shared by many, inadvertently seems to give the theist another foothold to work from. Nozick basically explains that:

a.) Only persons can own property.
b.) All property is ownable by any person.
c.) Only through legitimate acquisition or trade can one come to own property.

I don’t usually agree with Libertarian views, but the base entitlement argument is pretty compelling. It seems like these are very acceptable. Wouldn’t these be good things to agree with?

Almost hidden, or maybe concealed in his non-descript “variable M,” Nozick has one other premise to consider

d.) Persons own themselves. (someone who doesn’t own themselves isn’t a person)

This premise again, at face value seems quite reasonable. I’ve met very few would deny this, especially as having proprietary rights to yourself would seem foundational to possessing personal liberty and freedom. Most people are so greatly concerned with their personal liberty and freedom that they willingly accept the proposition of self-ownership as a necessary property of personhood. Here is where it gets rough:

e.) Humans, presumably, are the product of people mixing their labor, and are thus subject to the concept of legitimate acquisition.

As humans can own themselves, and all property is ownable by all people, then all humans can be owned by other persons. And, as humans are a form of property, if only a property unto themselves, then they are also subject to property acquisition and trade.

From here we can gather the first major problem:

f.) No human owns themselves, as parents own their children.
g.) Repeat step f) ad nauseum, and, as nobody created themselves, nobody owns themselves.

It is here that theism seems to enter the realm of entitlement theory.

h.) The creator of these humans is the owner. If no person mixed their labor (and there is no creator), then property makes no sense at all. The prime cause, God, is the creator and rightful owner of all in the universe.
i.) As no one but God owns themselves, no human is a person.

We either accept that property makes no sense at all, which has some pretty negative consequences for the Libertarian and for some fundamental aspects of civilization, or we accept that property rights do exist, and we are forced into the prime owner argument, (and surely we could make arguments for God’s self-ownership).

So, how do we arrive at our self-ownership?

If humans don’t own themselves, and are legitimately owned by some prime creator, and only persons can own property, then how do people legitimately have the ownership of themselves traded to them?

The major problem then becomes:

You can not trade or acquire property as a non-person, which means you cannot come to own yourself. A non-person cannot come to be a person, and only beings with initial self-ownership have the right to own anything (including themselves).

It would seem to me, that if we follow Nozick’s understanding of property, which appears quite reasonable, that nobody could actually own themselves. However, most people would probably want to conclude they do own themselves, and so we move on to what I would think is a flat miracle. God somehow bestowed upon us the right to ourselves. Personally, I’d call Nozick’s “variable M,” this person-making characteristic, the Imago Dei. Maybe through the gift of self-ownership and freedom from God we can solve this puzzle.

Or, did I form a straw man argument altogether? Is it useful? What do you think?

4) Many theodicy issues really boil down to considering whether evil outweighs good or vice versa. We assign some “value” (good or bad, to some degree) to everything that exists. In this judgment the appearance of evil would seem to ‘devalue’ the net worth of a world in some way. It is as if a possible world with 4,000 units of evil is measurably worse than one with only 20 units of evil, or even no units of evil. This is still a judgment based on evil and good values being weighed in a world.

Why should this sort of thinking influence the theist? If God is supreme, if He is really the greatest conceivable being, then would He not also be of infinite moral value? And, if He has infinite good value, then would not measurable and finite evil values found in this world be nulled by His infinite value on this judgment scale? How could one actually compare 4,000 units of evil or even 20 units of evil, finite measurements, to an infinite value of God? Finite numbers become meaningless when compared to infinite values.

So, a world with 4,000 units of evil is not measurably better than a world with 20 units or no units of evil when an infinitely good being exists. When compared, no less value comes about. All that remains is the infinite value of God.
Meta-ethics is the branch of philosophy that seeks to understand the nature of ethical: properties, statements, attitudes and judgments. This is a study of the framework of ethics, not the study of ethics directly itself. Most people who study ethics directly are contemplating what is formally known as normative ethics. Normative ethics is concerned with classifying actions as right and wrong. While normative ethics addresses such questions as &quot;Which things are (morally) good and bad?&quot; and &quot;What should we do?&quot;, thus endorsing some ethical evaluations and rejecting others, meta-ethics addresses questions like &quot;What is (moral) goodness?&quot;, seeking to understand the nature of ethical properties and evaluations.

Meta-ethical concerns and questions include:
What does it mean to say something is &quot;good&quot;?
How, if at all, do we know what is right and wrong?
How do moral attitudes motivate action?
Are there objective or absolute values?

A meta-ethical theory, unlike a normative ethical theory, does not contain any ethical evaluations. A meta-ethical theory is really trying to answer these three question: 1. Are there objective values? If yes, then 2. Are they reducible?; 3. Do we know about them a priori or empirically?

For Christianity, strictly an ethical institution, answering these questions seems very necessary to even act on or possess faith in the first place. Many of us, of course, are simply conditioned into assuming the answers without actually sitting down to think about them. We, as Christians, should be the first to think about and then answer these meta-ethical questions. I hope to clarify those issues somewhat in this article.

The first and primary question we ask in life, and one we continually answer and act from:

Is there any intrinsic value or significance to be found in this world?

The answer to that question is of the utmost importance. It has everything to do with everything. It is the basis of meta-ethics, and the very fiber of all other pursuits in this world.

What is value?

Value: it is the property or aggregate properties of a thing by which it is rendered useful or desirable, or the degree of such property or sum of properties; worth; excellence; utility; importance.

To say something has &quot;intrinsic value&quot; is to say that it is in fact significant and important...that it is desirable, that is is above neutral or nothingness. Something with value is something that innately is worthy of pursuit! Value IMPLIES the existence of an 'ought' by its definition.

Ironically, to even read this question, to even consider this question worthy of thinking about, to actually spend your time doing anything, is to assume that there is intrinsic value in whatever you pursue. We beg the question directly whenever we pursue anything. To even argue with me, or even have the will to agree or disagree with me means you have already assumed that it was WORTH pursuing, as though you OUGHT to read or contemplate this sentence. You have already assigned VALUE. Hell, in even attempting to answer the question you are begging the question.

If there is no &quot;value&quot; in this world, then stop reading. Nothing has meaning. You have no warrant to do anything. You are merely particles floating around, doing whatever particles do and what not. But, who cares? You can't care, you can't think, you can't do anything, you can't pursue anything because it has no value. You ought not do anything if there is no value...oh wait, it doesn't make sense to ought at all...to think at all. I can't even tell you that you &quot;ought not do anything.&quot;  

The pursuit of value is the reason we do anything. It is the basic egoist's claim, which is strictly undeniable.

So, now as you have continue to read, you have taken a leap of faith...much like you do in logic when you assume A is A. After all, if A is not A, then you have no way in which you could reasonably continue any conversation or thought, as no thing is itself. You assume that A is A, or the pursuit or belief in it (even if subconsciously) is important, that is has value. You in fact, believe A must have value just to acknowledge its very existence. Value is the root of logic. Logic, beyond 'A is A', which is truly simultaneously assumed with any idea of value (to think A at all it to assume the value of A and 'A is A') is the manipulation of value, the deduction of further value from assumed values. You my friend, you believe in value, and consequently logic, at the basest level, and you continue to assign value to other things from your logical deductions in your egoist's value-based logical pursuit (even if you suck at it). Congratulations.

Value means that we OUGHT pursue, it begs the question that we &quot;ought to do something.&quot; It is the assumption that something is WORTH doing or thinking about. THAT is the basis of ALL ethical claims, of any claim in fact.

Why is this important to Christians? We fail to fully recognize that our current ethics, &quot;commands of God,&quot;Â exist in virtue of INTRINSIC VALUES AND LOGIC. Everything we consider or do has an innate value assigned to it, else it is NOT WORTH CONSIDERING OR PURSUING in itself. So, yes that means there is no such thing as anything neutral, but it also requires another deduction, one that gets my goat.

Here is my beef: If we ought to pursue something, then we ought to &quot;ought to pursue something.&quot; What does that mean? It means that pursuing truths and even things like Christianity is a good thing because we OUGHT to pursue those things in a certain way...a way of value-logic thinking. Starting with the logic-value thinking and working our way up through the deductive ladder is what we ought to do. The very mechanic by which we reach our destination HAS VALUE, and it means there is a specific way in which we ought to pursue the ethics. There is a set path by which we should be thinking to arrive at the end truths.

We are not God, and thus we can't use our 'theism from birth' to use Christianity to pursue what is ethical...no, no my friend, it is the other way around! Those who correctly pursue value and logic will ARRIVE at Christianity through deductive reasoning...Christianity has NO meaning outside of the value and logic used to arrive at it. You can't answer the question, &quot;what ought one do?&quot; with an easy out like, &quot;do what the Bible tells you&quot; without first using logic to show that the Bible is logical. You can't merely look at the Bible for what is ethical; you first have to use value-logic reasoning to prove and deduct that the Bible would be correct in the first place.

My point is: first things first, you actually (whether you know it or not) make judgements about Christianity not in virtue of Christianity, but in virtue of value-logic based reasoning, and consequently; all other thinking SHOULD be based on value-logic based reasoning. Your faith is not blind, no matter how much you want it to be. Your faith might be based on faulty-logic...

We are &quot;religious&quot;...but we fail to recognize that our religion isn't based in faith (beyond the initial value-logic step). That would be stupid.

To deduce higher ethical principles, like those found in Christianity, without following the value-logic path that would deductively arrive at those truths is a SIN. The very method by which we arrive at God is an 'ought,' as the very thought path has innate value to it. By definition, we are sinning by not pursuing God in a very exact and logical way. (God gave us minds for a reason)

Christians, while they are usually correct about steps/conclusions 20 and 21 in our value-logic deductions, totally screw up or forget about all the other steps in between that are used to arrive at the principles of Christianity in the first place. God obviously intended for us to FIRST assume value and logic, and use those tools to deduct further values and rules of logic, so that we could arrive at HIS Will. To deny the value of logic and philosophy, as the very BACKBONE of our belief is to deny the WILL of GOD. To pursue truth is to pursue God (eventually). And, to pursue God REQUIRES that we pursue truth first.

Basically, I accuse you so-called Christians of the same heresy of the post-moderns. You are no better with the exception that you may have arrived at some conclusions that are correct, but have forgotten the process that brought you to it in the first place. Without your proof, your deduction, you have no warrant to believe. You are stupid to believe. You fail.

I am amazed at how quick the Body of Christ denies the method by which we reach God.

It is not God that brings us to Him first, He gave us the ability to arrive at Him instead. God creates us, but we take the first step. Stop blaming God for us logically choosing Him...there no meaning to our belief if God did it, we chose Him.

So what have we found out? The meta-ethical concern is solved! Value (and logic) are innately assumed. We need not go further in our pursuit of WHY or HOW these exist because the pursuit itself begs the question. This is why post-modernism fails, as it abhors that which it assumes: Absolutes of value and logic. And, this is why I don't like &quot;Christians&quot; in general...they miss the entire point of it (committing the same fallacy as the post-modern), we fail to recognize, appreciate, and use the value-logic process to reach our conclusions.

Now we just have to go through those deductive steps (how Cartesian...).

Anyways, today I hate you, world. Good day. May God have mercy on us all.
I am ready for the it...TGIF, zomgadfagfgasdfasd I'm turning into...one of them. Forget it. Everyone loves Friday, and I don't spend my money bar-hopping on 'teh weedends' or anything stupid. wheww....Anyways, I'll be glad to be going home.

An update on the Car: we are probably taking it in on Tuesday...probably. The gear-shifting issue is odd: it only happens 1.) in the mornings, 2.) when it is very cold (cold enough to frost the windows). This leads me to believe, a.) my anti-freeze needs to be checked (which will be done asap), or b.) my car needs professional help, the Tuesday variety. We will see. Funny thing, I JUST checked all the fluids a few weeks ago...the right color, the right amount...but eh, I'm hoping it is cheap. *crosses-fingers...as if I believe in luck.

I'm getting sick myself. No doctor anymore. Unless I feel like I'm dying, I'm not going. I'm a wuss, I can't believe I went because my ears had pain in them (some of them were sharp)...just to find out that I have allergies?...PFFT. What I've got now is...ermm...closer to Bronchitis/Influenza? Not until I'm dying, But, I took a sinus - decongestant excedrin thingy, and many drugs pwn. I feel better in 20 minutes. Not perfect, but doable.

On a side note: Did you know that there is such thing as &quot;male lactation?&quot; Apparently, a human male can produce milk. Alrighty then.

WoW: 300 eng, took 2 hours, 170g, and some frustration. It was worth it I assume...now to dig up 700g in mats for the reflectors. Still don't have my HWL OH, but I'll get there. BG's are SO boring. I only need to knock out 12k honor for it. I've decided I won't be upgrading any of my other equipment before TBC, however. My guess: everything is VERY replacable, with exception of eng gear + HWL weapons of course. Being back on a PvP server is fun. I don't meet nearly as many tards....well, not as retarded...most are still tards though. The gear inequities I'm experiencing is quite humbling. I lose matches for trivial things that I wouldn't have problems with if I had even half the gear these people did. I am hoping TBC with be the great equalizer (yay, just like our public education system..oh wait). With everyone new at 70, and probably me being one of the first, we'll be on a more equal playing field. It will be just me vs them...

MTG: Allen and I are hitting the prerelease on the 20th (I hope). Planar Chaos presents some interesting ideas...although, I wonder if I'm going to be disappointed in the power-level of these cards as I have been since...Kamigawa? Oh well, we'll have fun, and there is always extended/legacy/type 1 (w/proxies).

1.) idday ouyay owknay atthay Iay otgay inay oubletray orfay itingwray aay ournaljay tryenay urelypay inay igpay atinlay enwhay Iay asway inay econdsay adegray?

2.) :siht kaerb nac uoy fi eeS .lausu ta krow ta dnuora gniwercs ,nuf gnivah tsuj m'I

 3.) Wfsz hppe, Dbftbs tijgu gps uif xjo. Tujmm bmqibcfujd tvctujuvujpo djqifs, cvu tmjhiumz ibsefs:

4.) Yp, K an kmqtetuee. Cnpvhft sdjopnbpa cjrhft, bvv hbsdft tp crfck. Hqoe loc.

 Maybe I'll give you a spoiler at the end?

 

zomg, its the end, I have to go back to work.

1.) Pig latin

2.) Backwards

3.) Caesar shift back one.

4.) Forget the name, Veni something...only three sets though. Rotation of letter substitution...ABC, then BCD, then CDE, and repeat.
Back to Basics: The Fundamentals of Gaming, a Call for Balance, and Why Rogues Should Stunlock.&lt;/span&gt;

Every class uses some control features and some attack features to defeat their opponents. I will argue that: while at first glance rogues seem like an attacking class, rogues are actually a control class. To be very specific, I mean to say, when all is said and done, and people play their classes correctly at current gear levels, the rogue is in a position where he must control the fight to a greater degree than other classes in order to win.

That may come as a shock to some players. Among other things, rogues have some relatively easy to use, and well known, burst damage abilities. Go-go-gadget Ambush/Backstab? When you think of a rogue you think of damage at the sacrifice of all else right? We lose tankability, ranged abilities, and overall raid and group functionality to deal relatively lethal damage (or at least good sustained damage) in up-close-and-personal melee combat. But, many rogues have come to find that life is a little different at high end.

Was it a lot better at lower levels? Of course. We all know that at green gear our abilities are overpowering. So, as we fight against noobs and greenies, we really have nothing to complain about. Although some of these skills scale with gear, they don’t scale proportionally with gear as effectively as other classes (that doesn’t mean we don’t scale, we just don’t scale well enough). As the stamina levels and overall gear of the population rises, the rogue’s effectiveness quickly declines. Of course, we did need to be balanced in full greens, but not at the expense of future higher-end gaming environments. It is almost as if the dev’s are paying us back for the crazy power of rogues in the beginning of this game. I think most rogues would have preferred to have been balanced and scaled properly from greens to epics in the first place.

Currently, there are more players sitting in full epics than at any other time, and in part because of this gear inflation, and in part because people are evolving out of their noobiness, a rogue has become more easily neutralized (I’m saying nothing new just yet). As stamina levels increase, and as classes learn to play against a rogue, our “quick kill” abilities become far less effective. I’ll certainly admit that the good old Ambush/Backstab can be effective, especially when you completely outgear an opponent. But, in equally geared and skilled matchups, the rogue is easily beaten when he doesn’t control the fight. Not only are we easily controlled, but, eh, I’d argue we are out-classed. My shadowpriest can randomly click 4 buttons (while I’m half-watching the Daily Show) and kill people; meanwhile, my rogue can play flawlessly against the same people and still lose. There really is a disproportionate skill-requirement to make the same kills. We just can’t prove it. We do, however, have tools to deal with the situation and imbalance at hand, and we can work towards curbing any injustices against the rogue class. Albeit, it takes a lot more work for the rogue to win, it is at least possible. I’d just have preferred to see a fair risk vs. reward ratio, in which the person with greatest display of skill always win, but Blizzard isn’t that smart.

In all reality, the rogue is becoming less useful. Why would I want a rogue in my group when a mage deals just as much DPS (including AE’s and range issues, yes) and contains far more utility? Our roles and abilities are not balanced to other classes. While we haven’t been nerfed directly, I’d argue that other classes have been buffed to the point that a rogue is not as useful (And, if you think we are as useful as other classes, you clearly don’t play enough of the other classes to realize what I mean…and puh-lease, not another Damage meters argument, your hunters, fury warriors, mages and warlocks are simply lazy as hell…period).

We can complain to dev’s and say, hey, Death coil might be a bit too powerful. Or, maybe we can say, hey, Fury warriors deal nearly as much damage as me, are much more difficult to kite, and sit at 1.5k more hp and 20% more mitigation than I do, oh yeah, they can tank and scale exponentially with gear (as long as they find outlets to spend rage)…what roles do I have if they are better or nearly equivalent than I am in most of them?

Unfortunately, we have never had the tools to understand the exact reasons why this is the case. We have relied upon intuition, which doesn’t mean we are wrong, but it makes our cases very difficult to present. The devs look at us as biased-ninjas who want to pwn t-eh world. And, hey, some of us are. But, not all rogues want that…some of us just want balance. Our problem: we just can’t prove our problems.

I’m hoping to put us a step closer to being able to show why there are imbalances. I’m also hoping to briefly explain the very nature of gaming in general. But mainly, I want to explain why it has become truly imperative for a rogue to actually use stunlock to remain truly viable in so many environments.

The million dollar gaming question is: Who is the controller and who is the attacker? You may not see this as a crucial question, but with some disciplined thinking, I bet you’ll come around to understanding why this question is so important. Respectively, I think that after understanding and answering this question, you will find that the rogue really must control fights in order to win.

Let us take a base example:

Given two equal opponents who attack each other at the same time and in the same way, on average, both will die at the same time. To simplify and apply this notion for us, think of two butt-naked level 60 rogues (hawt UD fo’sho) using no abilities except auto-attack; Both just sit and trade hits. If they start at the same time, on average, both will die at the same time. If you don’t like thinking of it that way, then think of it this way, over the course of 1,000 fights, of the times that both don’t die simultaneously, and one person had to win while the other lost, 50% will be won by each rogue. The point is: It is a tie!

Well, how is this the case? Essentially, both have an equal offense and defense ratio; they are identical, as they have X DPS, Y mitigation/avoidance, and Z hitpoints. In this case, only damage to tankability is taken into account, but it is all that is needed to provide the full picture. In real game play, there is a vast array of variables to consider, and in time, we shall see that this picture becomes much more elaborate, yet remains quite quantifiable.

What do I mean by an offense and defense ratio?

We can take the calculable (as this is all math) defense of player 1 and divide it by player 2’s calculable offense, and we can take player 2’s defense and divide it by player 1’s offense, compare the numbers, and immediately know who, on average, will win in a perfectly fair fight. This is the offense/defense ratio. The person with the higher number will win the fight. In WoW, it all begins with damage per time unit as your offense and your hp as your initial defense.

This is the fundamental equation of gaming, an equation used to determine the answer to the million dollar question. Nothing else matters. Now, before you try and pick it apart, let me elaborate; there are a lot of variables to consider in defining a player’s “offensive” and “defensive” ratings used in this calculation. Often enough, damage to mitigation/avoidance/hp is all that must be considered. But, we shall see how certain basic techniques and crowd control effects like “kiting,” “tanking,” root, fear, stun, etc. can have a huge impact on these ratings. The very matter of choice creates “future action trees” with different offense/defense ratios for all possible courses of action; but don’t be deceived into thinking that choice eliminates the possibility of calculation. I warn you to not act as if these effects don’t have mathematical and clearly calculable repercussions. This is all math, and all things are calculable. Even future events in games can be calculated; We just need the tools to understand what the effects truly mean.

Take our base example. Assume both rogues have 100hp and deal 20 damage per time unit.

Player A= 20a offense and 100a defense
Player B= 20b offense and 100b defense

Player A’s ratio=100a/20b=5
Player B’s ratio=100b/20a=5

As both have equivalent offense/defense ratios, 5 and 5. If they chose to stand and trade hits in a fair duel, both would on average die at the same time. If we just tweaked the variables slightly, and if Player A were buffed, and had 10 more hp, it would change the ratios by:

Player A=20a offense and 110a defense
Player B= 20b offense and 100b defense

Player A’s ratio=110a/20b=5.5
Player B’s ratio=100b/20a=5

Notice that Player A now has the advantage, and a higher offense/defense ratio. Player A will surely win in a duel. Player A directly increases his offense/defense ratio by improving his defense.

Or, what if we buffed Player B’s offense by 5 instead?

Player A=20a offense and 100a defense
Player B= 25b offense and 100b defense

Player A’s ratio=100a/25b=5
Player B’s ratio=100b/20a=4

Notice that Player A now has the disadvantage, and has a lower offense/defense ratio. Player A will surely lose in a duel. Player B’s offense directly affects Player A’s offense/defense ratio by lowering the number.

Assume that both rogues have 25% melee damage mitigation; how does this apply in the equation? While we can certainly apply it to one's loss condition (HP), or defense directly, and calculate a damage soak of survivability, for now we'll just look at it in a simple fashion. This will also help demonstrate the interaction of offense/defense even further. We'll interpret mitigation and avoidance as a debuff to be applied directly towards an opponent’s offense. By lowering an opponent’s offense, we increase our total ratio. So, let us apply it:

[Damage – Damage(Mitigation+Avoidance percentage of opponent)] is the new offense calculation. Thus:

Player A=[20-20(.25)]a offense and 100a defense
Player B=[20-20(.25)]b offense and 100b defense

Or, now calculated as,

Player A=15a offense and 100a defense
Player B=15b offense and 100b defense

Player A’s ratio=100a/15b=6.666
Player B’s ratio=100b/15a=6.666

Please notice that both ratios rose proportionally and remain equal, as both will kill each other at the same time. You will notice in your own calculations that changing mitigation and avoidance percentages will directly impact the opposing player’s proportionate effectiveness, and any imbalance in damage, hitpoints, or mitigation (or any variables) would immediately swing the ratios in one player’s favor. Game balance (you get a free tutorial on this one) rests upon equivalent offense/defense ratios of current and future action trees given an equal amount of skill and effort.

WoW, like all MMO’s, adds complexity by changing offense and defense ratios, and often vary them greatly per class. If all classes were totally the same it would be boring, right? But, MMO’s devs are still required (but not properly held accountable) to balance classes while differentiating them, as there should be incentive to play every class. So, in balance and diversity, they create things like:

Player X= 20x damage, 100x hp, and 0%y mitigation
Player Y=10y damage, 100y hp, and 50%y mitigation

If Player X deals 20 damage per time unit with 0% damage reduction and 100hp, and Player Y deals 10 damage per time unit with 50% damage reduction, and both start attacking each other at the same time, then both will die at the same time; this is balanced. Any single variation in the proportions of the damage, mitigation, and hp would create an imbalance in which either X or Y would become more viable or powerful, while the other would proportionally become less viable or powerful. This is easy to test. We only know the players’ damage, hp, and mitigation, and assuming that these are the only variables we must take into account to calculate the offense/defense ratios, we would get the following:

Player X=[20-20(.50)]x offense and 100x defense
Player Y=[10-10(0)]y offense and 100y defense

Player X=10x offense and 100x defense
Player Y=10x offense and 100x defense

Player X’s ratio=100x/10y=10
Player Y’s ratio=100y/10x=10

Notice of course, X is much like a traditional rogue, and Y is much like a traditional warrior. In this balanced case example, both the X and Y die at the same time, even though their mitigation and damage per time unit variables are very different. They have proportionate and fair ratios of offense and defense, and yet, they both would serve a different purpose.

To show that this concept can work within the context of solo and group, and to show how one would go about abusing natural differences in such variables, even in balanced ratios, let us take another case example, using X and Y once again:

We want to design a 3-man group composed of any combination of X and Y, and we are thinking of a PvE mob opponent Z with 450hp who deals 20 damage per time unit with 0% mitigation. Let us also, for the sake of the argument assume that you could control who holds aggro. We are attempting to find the best way to abuse these balanced ratios, as both classes are equal, but clearly have different functions given their actual offense and actual defense. Available Y’s will act as tanks (as they have greater mitigation). For this case, we will consider any player death to be a failure.

For this, to demonstrate survivability in reality, we'll be applying mitigation towards the loss condition (HP), which is your base defense. Defense/(1-% of mitigation/avoidance).

In a fight against mob Z, would you rather have a group composed of: 3 of X, 3 of Y, 1 of X and 2 of Y, or 2 of X and 1 of Y?

3 of X= 20x+20x+20x and 100/(1-0)+100/(1-0)+100/(1-0) Defense

3 of Y= 10y+10y+10y and 100/(1-.5)+100/(1-.5)+100/(1-.5) Defense

1 of X and 2 of Y=Â 20x+10y+10y and 100/(1-0)+100/(1-.5)+100/(1-.5) Defense
2 of X and 1 of Y= 20x+20x+10y and 100/(1-0)+100/(1-0)+100/(1-.5) Defense

Meanwhile, Mob Z's offense defense ratio is a strict 20z offense and 450z defense.

Thus, we will arrive at 4 different sets of ratios, one for each possible group makeup. I'll give a brief breakdown, explaining the fights in time units of 5. Notice that each group as a different tank, which will change survivability calculations. The tank's defense is all that matters, but as we calculate the fight over time, we'll switch from each tank to another, until all are dead.

3 of X’s ratio=100x/20z=5
Mob Z’s ratio=450z/60xxx=7.5

3 of Y’s ratio=200y/20z=10
Mob Z’s ratio=450z/30yyy=15

1 of X and 2 of Y’s ratio=200y/20z=10
Mob Z’s ratio=450z/40xyy=11.25

2 of X and 1 of Y’s ratio=200y/20z=10
Mob Z’s ratio=450z/50xxy=9

Each ratio is specific to its respective matchup. Note that as X and Y are perfectly balanced, even when stacked as 3 of a kind, they have proportionally equivalent ratios to Mob Z.

5 to 7.5 and 10 to 15 (essentially 2 to 3). This means that both 3 of X and 3 of Y will have the exact same result in terms of how much damage is dealt before the first tank dies, in this case 300 damage. To be more exact, when we really evaluate these end ratios, it means that for every 5% that 3 of X penetrates Mob Z’s defense, Mob Z will penetrate 7.5% of 3 of X’s tank’s defense. Essentially, from this standpoint, we will evaluate ‘defense’ as the loss condition, from which at any point that 100% or more has been penetrated that player will lose. I am hesitant to say “hitpoints,” as opposed to defense, because this is a very universal principle, and can be applied to games that don’t use such hp systems (you just have to learn to calculate the value of functions and loss conditions within a game). In this case however, penetrating 100% of the defense is basically bringing a person from 100% hp to 0% hp or less. Thus, for every 5% of hitpoints Mob Z loses, the first rogue tank with lose 7.5% health. And, likewise, for every 10% of hitpoints Mob Z loses, the first warrior tank loses 15% of his hitpoints (in the 3 of Y group).

Also notice that as we look at the 1 of X and 2 of Y group, the proportional difference between the ratios grows smaller, we move from the 2 to 3 of the pure X’s and pure Y’s, to a 10 to 11.25. This is a closer battle, as 400 damage is dealt before the first person dies.

The last case, in which there are 2 of X and 1 of Y, has transformed the losing battle, having a lower ratio than Mob Z, into a winning one, in which this scenario would net in the defeat of Mob Z before anyone would die. This group would be capable of dealing 500 damage before the first person dies.

Please notice how abusing a tank, with 50% more mitigation than the rogues, can generally allow you to deal far more damage per person. While both classes remain “balanced” against each other, creating group and solo environments in which you can temporarily alter your groups offense and defense ratio allows you to do a lot more damage. In the 3rd and 4th group, we see that the damage dealers “hide” behind the mitigation of the tank, allowing them to deal massive amounts of damage, without being affected by their personal mitigation (which is balancingly much lower). By “tanking” mobs, a group can alter each player’s ratio. Thus, this allows the group to have the mob channel all damage through a high defense tank, as if every person in the group had this defense, without each person in the group having the respectively balanced low offense capabilities of a tank. This is good example of a tremendously advantageous and quite simple way to abuse class diversity (even within the context of balanced classes).

Tanking is a form of crowd control (usually used in groups, or Pet/Master relations). It changes the very nature and offense/defense ratios of a matchup. This is a common and effective strategy, one that gives true purpose to the warrior class.

I will only go one step further in this group simulation, and I hope this next example will reflect the concept of tempo advantage and time-based applications of this offense/defense ratio within a group setting (which again is still quite applicable to solo fights). Let us pretend that Mob Z now has 750 hitpoints instead, and that everyone will fight until the death. How does this change the way in which we perceive the possible battles? Let us evaluate each group:

So we could look at the teams as:

3 of X=60 offense and 300 total defense

3 of Y=30 offense and 600 total defense

2x and 1y=50 offense and 400 total defense

1x and 2y=40 offense and 500 total defense

But, this doesn't take into account the stages of each fight. Start with the first group:

3 of X= 300 damage before X1 dies, 200 damage before X2 dies, and 100 damage before X3 dies. They can deal 600 damage before they all die. 200 damage per person on average.

Essentially, 60 damage per time unit, and 20 less per X that dies. As individuals are tanking, we can calculate addition group member as added damage behind the tanks defense. We would just calculate this as a series.

20z + 750z defense

Vs.

20x+20x+20x and 100/(1-0)+100/(1-0)+100/(1-0) Defense

then

20x+20x and 100/(1-0)+100/(1-0) Defense

then
20x offense and 100/(1-0) defense

This fight occurs in stages. The resulting equations will look like three separate fights, and that is because each player is dieing.

Mob Z=750z/60x=12.5
3 of X=100x/20z=5

Here, the first rogue dies. 300 damage is dealt.

Mob Z= 450z/40x=11.25
2 of X=100x/20z=5

Here, the second rogue dies. 200 damage is dealt.

Mob Z=250z/20x=12.5
1 of X=100x/20z=5

Here the last rogue dies. Having dealt 100 damage, and the whole group has dealt 600 damage to the 750 hp Mob Z. Thus, the group will lose in this matchup.

I won’t go through the calculations for the next fight, but the basic recap is that:

3 of Y= 300 damage before Y1 dies, 200 damage before Y2 dies, and 100 damage before Y3 dies. They can deal 600 damage before they all die. 200 damage per person on average. The same as having 3 of X, they deal identical damage in the end. The only difference is that the 3 of X rogue fight takes 15 times units to deal all of its damage (before the weaklings die off), and 3 of Y takes 30 times units to deal all of its damage. But, as Y lasts longer because of mitigation, Y also takes longer to kill (in a balanced game at least). This abuse of spreading an opponent’s offense over time units is exactly what creates the incentive to play a tank, as they become extremely useful in sustaining DPS behind those tempo advantages. As long as PvE exists, or when taunt/aggro/forced targeting spells and strategies can work in PvP settings, there will always be incentive to have tanks, thus I don’t I don’t feel bad as far as how long it may take for them to make the same kill as a rogue in a balanced game. Game dev’s have a tendancy to inappropriately boost tank offense capabilities out of sympathy concerning tempo advantages and the length of time required to solo, but also because most game dev’s actually play a tank themselves *cough. This imbalance, as we might see in WoW or post-Kunark EQ, is far more devastating. *cough

For our last two group combinations:

1 of X and 2 of Y= 400 damage before Y1 dies, 300 damage before Y2 dies, and 100 damage before X1 dies. They can deal 800 damage before the last player dies, at 266.66 damage per person.

Mob Z=750z/40x=18.75
1 of X and 2 of Y=100x/10z=10

Here, the first warrior dies. 400 damage is dealt.

Mob Z= 350z/30x=11.66
1 of X and 1 of Y=100x/10z=10

Here, the second warrior dies. 300 damage is dealt.

Mob Z=50z/20x=2.5
1 of X=100x/20z=5

Ah ha!~ Finally!! After the two warriors have died, the rogue is fighting a 50hp mob that deals the same damage as he does (w/no mitigation). Thus, the rogue wins easily.

2 of X and 1 of Y= 500 damage before Y1 dies, 200 damage before X1 dies, and 100 damage before X2 dies. They can deal 800 damage before they all die. 266.66 damage per person on average.

Mob Z=750z/50x=15
2 of X and 1 of Y=100x/10z=10

Here, the first warrior dies. 500 damage is dealt.

Mob Z= 250z/40x=6.25
2 of X =100x/20z=5

Here, the second warrior dies. 200 damage is dealt.

Mob Z=50z/20x=2.5
1 of X=100x/20z=5

Again, like the previous 1 of X and 2 of Y, we are left with only the rogue making the kill. Notice how the ratios change dramatically as soon as the sole warrior dies. While this 2 of X and 1 of Y group dramatically loses mitigation, the 1 of X and 2 of Y group catches up in terms of ratio and overall damage.

Be aware, that 2 of X and 1 of Y is capable of a burst 500 damage by the end of the life of that tank. This is far more effective and efficient than using 1 of X and 2 of Y, as the second tank hurts the group because he has traded low damage for high mitigation, but his trade in no way makes the group more effective until after the first tank dies. When we really evaluate the difference, we must ask whether we are going to need an offtank or not. Against single encounters, it is clearly best to stick to one tank (and keep him alive), as it allows the group to maximize DPS.

There are further complexities in WoW, and those calculations will be beyond the scope of this article. I only hope to show how this sort of computation is foundational to understanding game balance and the role of a class. In part, this complexity is because WoW has a lot more variables to consider in the equation than just damage to tankability ratios. From only a damage to tankability standpoint, we could easily argue that warriors, at post-MC [edit: you can see how old this article really is...] gear clearly outdamage and outtank rogues, so why would you want to play a rogue (and this may be a valid argument in certain circumstances). I’m not saying they’ve balanced the game (you may see an upcoming article on what that would require, and what balance means), but I do see some fundamental principles that should be applied. Namely, we must continually add and calculate these many variables that apply towards our offensive and defensive ratios, and that the very core of an offense/defense ratio is universally calculable (however, complicated it may become).

Please note that the procedures of calculating who should win the fight, whether it be solo or group-based, is based upon an identical foundation. The only difference is that group-based encounters have more complex calculations. This does not, however, take away from the fact that a group is composed of individuals, individuals that should also know their solo matchups, as you cannot calculate group-based encounters without first calculating the solo-based encounters. What does that mean? Learning to duel is fundamental to being a great PvPer. Can you win without doing this? Sure. But, against the best, you’ll always lose without knowing your 1v1 matchups inside and out. (sorry, yet another small rant, as I hate when people say that dueling and PvP are unrelated, as it shows a lack of understanding as to how the game works)

Thus far, I have only given you a rudimentary explanation of how and why one ought to think in terms of offense and defense. We can now begin to relate this to the role of the rogue and our original question. The game’s challenge is to know your role. You need to know which role you have, are you the controller or the attacker? Confusion of these roles will net you in a loss.

In our previous examples, each group combination should have calculated the matchup (whether intuitively or mathematically), and known the best course of action. If they let the rogues tank, then it was a sure loss. Having too many rogues or too many warriors was a sure loss. These groups, and the members that compose the groups, have an opportunity to understand their roles, and have the tools to determine their effectiveness per situation because of calculable offense/defense ratios.

The smart rogue, and the smart group, will ask, “How can I change my offense/defense ratio such that, when I am engaged in combat with the opponent, my offense/defense ratio will be higher? A higher offense/defense ratio will net a win for the rogue (or group). Modifying this ratio is of the utmost important, and allows one to perform a role(s) more effectively.

“Understanding your role” is demonstrated in the fight between a geared rogue and a naked rogue. If I let a rogue in even green armor fight a butt-naked rogue, and both use just simple auto-attack, the buffed rogue will win the vast majority of the time. The buffed rogue is more powerful because of gear, and consequently, he wins because he has higher offense and defense ratio as compared to the naked rogue.

The buffed rogue will always want to sit and trade hits with a naked rogue, because he will always win. I repeat, the rogue with a higher offense/defense ratio will ALWAYS want to sit and trade hits with any opponent with a lower offense/defense ratio.

Conversely, the naked rogue does not want to sit and trade hits with a buffed rogue because he will always lose. In order for the naked rogue to win, he must control the fight. Does this mean that a naked rogue can’t beat a rogue in green armor? No way!! What it does mean is that unless the naked rogue does something other than just trade hits with the buffed rogue, basically, if he isn’t controlling the fight, the naked rogue is always going to lose.

In this case, the buffed rogue is the attacker! He WANTS to trade hits. He wants to make it so that the naked rogue is at the very least forced into positions where they can trade hits. The naked rogue, on the other hand, is the controller. The naked rogue must change the offense/defense ratios, through control, in order to win. So, each rogue must attempt to maintain their roles.

And, at any point that the naked rogue would control his way into having a higher offense/defense ratio, thus becoming the attacker, the buffed rogue would immediately become the controller. An easy example of this switch would be if the naked rogue stunlocked the buffed rogue; the buffed rogue has ZERO offensive abilities until that stunlock is broken, thus the ratios are greatly in the naked stunlocker’s favor. During that stunlock the buffed rogue becomes the controller. In this situation, the buffed rogue must use control measures to try and overcome the naked rogue’s huge offense/defense ratio imbalance. A quick vanish/CS might do the trick, eh?

Of course, the broken rogue vs rogue matchup may be a poor example in one way: A full stunlock against a rogue is almost unbreakable, save for a dodge/miss/parry (especially on Gouge). By this I mean, when the skilled naked rogue opens and stunlocks the buffed rogue, it is quite possible that there is a permanent loss in offensive and defensive abilities for the buffed rogue. Without a lapse in the stunlock, there is no chance for the buffed rogue to come back. In this case, an understanding of the metagame is extremely vital, as both classes are true controllers, as neither could possibly afford to lose control (…blind, restealth, kill the rogue who opened on me, but didn’t stunlock correctly). You still may not get my meaning. Think another problem as a rogue vs a warrior. The rogue stunlocks the warrior down to 20% health, stunlock breaks, and both just rush each other down. Most of the time the rogue is going to win, as the new offense/defense ratios from the end of the stunlock have dramatically changed. It is now a fight between a 20% defense warrior and a 100% defense rogue, even with an imbalance of ratios (as long as they aren’t ridiculous), the rogue no longer must control the fight in order to win, as he can afford to simply trade hits with the warrior as an attacker (but, for cleaner fights, and guaranteed wins, it still may be best to control). Unlike fighting a warrior, losing control to a rogue as a rogue should mean that you immediately lose (assuming your opponent isn’t retarded or unlucky). Thus, the metagame would force a rogue fighting a rogue to fight with control as the number one priority, allowing him to be the attacker only because it is required to maintain control (building combo points). Dealing damage in this particular matchup is almost a secondary effect that just happens to occur as a result of the controlling priority. I offer that there are matchups that a rogue doesn’t have to control start to finish, but that they must be controlled in order to overcome initial and base metagame offense/defense ratios. Very few matchups in the game are like this. Usually, a player can always turn the tide of a battle back in his favor, but of course, only through control.

All this talk about offense/defense ratios, and who is the attacker and controller, and what not…but what the IS crowd control?

Crowd Control (also called CC) is the ability of one character to influence or prevent the abilities or actions of another character(s). Crowd control can be extremely powerful because possible future action trees can be completely eliminated. Thus, the Crowd control user (crowd controller or CCer) can control possible outcomes, forcing or controlling the opponent(s) to use an even fewer set of available abilities/actions as effectively. Used properly, traditional CC often renders an opponent(s) nearly useless, allowing the CCer to use abilities/actions against an opponent(s) without fear of retaliation or response.

Crowd control also includes any ability that –influences-- an opponent’s available future actions. This means that even changing the effectiveness of current and future actions should be considered crowd control. Any form of influence upon your opponent’s offense/defense ratio as compared to your’s IS crowd control. I realize this is a broad definition, but when you get down to it, saying that only Polymorph, sap, or mez is crowd control simply shows a fundamental lack of understanding as to what those abilities mathematically entail. Let us not draw arbitrary lines. Crowd control is about “controlling” or influencing your opponent, hopefully to your advantage.

As much as you may fear this definition, the fact is that any action or passive ability beyond the normal offense and the normal defense influences the offense/defense ratios, possibly in such a way that your opponent will become the controller, as they may have a lower offense/defense ratio because of your action.

Players use crowd control to create offense/defense ratio imbalances between themselves and their opponent(s). In a group setting, crowd control is often used to reduce the number of opponents that one has to fight at once, which makes combat safer, easier, or possible at all, it essentially creates offense/defense ratio imbalances further in favor of the group.

To some extent, every class uses control. But, we will see that after a certain point, some classes rely upon influencing an opponent’s future action trees more than others, in part due to innately low offense/defense ratios.

At naked and green gear levels, as a rogue’s offense/defense ratios peak in effectiveness and proportion to other classes, we are a true attacking class. Everything about a rogue is concerned with getting into melee range and sticking it to them. And, you know what?- we are pretty damn good at it. We maintain a quite respectable sustained base-offense through autoattack. By adding our abilities, which lack scalability (thus remaining more effective at lower gear levels), we can maintain a good offense/defense ratio.

As everyone gears up, and as we calculate the offensive abilities of other classes, we see those ratios shifting. A rogue is still powerful enough to trade hits with most classes and win at this point. Only the warrior and shaman can naturally tank us successfully (as they, with abilities, have a higher offense/defense ratio). Druids in bear form, certain paladins, shadowpriests, soul link warlocks, and certain hunters can also tank us at times, but these are specific examples, and they are expending talent points and wearing a specific type of gear to have as high a base offense/defense ratio as any run-of-the-mill rogue. In most cases, the rogue, post-dps-ability calculation, has one of the highest offense/defense ratios. It would seem at face value (as I think Blizzard only looks at this), the rogue has little to complain about (meaning, if we look at the rogue in a shallow manner, we seem to have it pretty good). Unfortunately, I honestly don’t think Blizzard understands the rogue class itself, because otherwise they would see why we are forced to stunlock…

When you widen your focus, moving away from simple damage to tankability ratios, and you begin to include non-offensive (non-damage-type only) abilities into our offense/defense ratios, then the entire metagame changes. The multitude of fear, stun, root, snare, disarm, healing effects, anti-stealth capabilities, formal CC (sap, poly, seduce), and other effects create an environment that seems far more hostile to the rogue than to most other classes. That is to say, I believe crowd control is far more effective against a rogue, in general, than other classes, and consequently, the rogue’s offense/defense ratios are easily neutralized, forcing the rogue to become the new controller.

My major premise is that a rogue, post-metagame, has innately low offense/defense ratios. As a result, I am also arguing that the rogue, as he has an innately low offense/defense ratio post-metagame, is also the controller in the post-metagame. Even further, I am arguing that post-metagame, the game is imbalanced such that the rogue should lose. Remember: Game balance rests upon equivalent offense/defense ratios of current and future action trees given an equal amount of skill and effort. Although we may have the short-end-of-the-stick, we can make the best of it.

What do I mean by metagame? It is the game after (outside) the game. Metagame is the prediction of how others will make decisions. Metagaming occurs when a player takes advantage of the metagame for purposes of winning more often. Essentially, through the knowledge and estimation of how other players will make decisions, and by anticipating their strategies, the metagamer can build his strategy designed specifically against his opponent’s strategy (i.e. the metagame=your opponent’s strategy). In good and balanced games, metagames will evolve continuously. There should always be a counter for an action; and a counter for that counter, and a counter for the counter’s counter, and so on and so forth. But, certain overall strategies, like “tanking” or “kiting” have been so commonly powerful, that we refer to them as an archetype strategy. For example, I assume that classes that can kite will kite. Then, I respond to this archetype, and then my opponent responds to my response. We are in a continual state of re-evaluating the metagame, and always trying to anticipate our opponents’ strategies.

Another point to understand, especially concerning evolving metagames, is that the choices available have always remained the same. You still always had the future action trees available; you just may not have used them. A good example of this would be an unskilled player who technically HAS the capacity to follow a certain action tree, but never will, maybe because they aren’t skilled enough to realize which future actions in the tree are the best to use in the circumstances.

Now, I said: My major premise is that a rogue, post-metagame, has innately low offense/defense ratios. By post-metagame, I mean the circumstances in which most all players have developed strategies based upon an evolving metagame. These archetypes and strategies are a pretty well set lineup of strategies (like pro-chess), tactics, plans of attack, and responses, in which we can quite easily anticipate what our opponent is going to do next. So, essentially, I mean to say that after most all people (of all classes) know their matchups, what exists now as the metagame, the rogue has a new and very low offense/defense ratio as compared to all other classes (a new ratio which is practically innate to the metagame).

This idea of a post-metagame is interesting. It takes into account the actual offense/defense ratios available and probable per situation in a game. If we really want to look at what is actually occurring and really evaluate the balance-state of a game, we must evaluate each class and matchup per situation post-metagame. Clearly, that takes a lot of work. But, as it is calculable, it is at least possible to prove…

The idea of group-metagames is further complicated. I don’t expect us to have the resources to fully evaluate this metagame. But, as Blizzard contends that WoW will be a group-based PvP/PvE game, I think it would be fair that (as they certainly have the resources), they do the math behind this (which I highly doubt they have, as I don’t see enough evidence suggesting they’ve even done it for the foundational 1v1 matchups).

So, getting right to it (haha), the rogue is one of two classes that can only deal substantial damage while in melee range. Warriors are the other. But, as they have Hamstring (no need to apply poisons here), Charge, and Intercept, they are in an excellent position to glue themselves to an opponent, and prevent kiting. Kiting is the act by which a player (the kiter) will maintain distance between themselves and an opponent (that which is kited), such that the opponent cannot inflict damage (or inflicts less much damage as they normally would). Unlike the warrior, who has readily available, combat-usable, and highly appropriate anti-kiting measures not based upon talents or gear, the rogue has very few options. If an opponent is close enough, we can spend an expensive reagent to blind, hoping that we will catch up to the opponent before blind breaks (also on a long cd), and we are not guaranteed that we will actually catchup. We can vanish, which is on a long cooldown, and hope we catchup (which we won’t always). We can wait the duration of the root/snare spells, and hope we can catch up via sprint (assuming they didn’t already go on horseback). We can also use Distract for that momentary non-combat anti-kite. Good old crippling poison, if applied beforehand, of course, is quite useful, assuming it isn’t dispelled, resisted, and that it lasts long enough, but it requires that we had the opportunity to engage the opponent in the first place. Of course, these abilities can be used in conjunction with each other. But is it enough? Is it a fair use of my talents? Should I only be able to counter kiting methods every 5 minutes? If a class opens on me as a rogue, and kites correctly, I should always lose (even post-CD). This isn’t the case for a warrior (or other classes).

The rogue’s offense/defense ratio is obliterated during a kite. We have limited, expensive, and unsubstantial anti-kite abilities. Now, surely you’ll argue that stealth is the balancing feature. And, yes, I’ll admit that if I get the complete surprise attack from stealth, life is a million times harder for my opponent (not that they can’t win). If my opponent knows I’m around them stealthed, then usually they are not only mentally prepared, but also have things they can do things to limit the effectiveness of stealth and the ability to deny my opener. Stealth just isn’t that powerful, although it is a necessary part of attempting to balance that equation. Catching me out of stealth is an automatic loss against a skilled opponent (and if you don’t think this, and you say you beat people all the time when they open on you, then you aren’t fighting skilled opponents).

Just basics: Priests can fear kite; warlocks can CoE, fear kite, seduce kite; Mages can poly kite, Frostbolt kite, Nova kite, Blink kite; rogues can crippling poison kite after engaging, Druids can root and catform kite; Shaman can frost-shock, ghost wolf, and earthbind totem kite, hunters can CS, WC, Trap, pet intimidate, SS, and AoC kite (good lord); Paladins can stun kite (as if they really need it…), and warriors can Hamstring kite (usually only good for an intercept).

Hrmm…beyond just flat running away, every single class in this game has kiting abilities. That means every single class has an ability (or 6) that completely neutralizes a rogue’s damage entirely through getting out of melee range. While I don’t mind that every class seems to be a response to the warrior and rogue, I am concerned with the rogue’s limited options. I could understand it more if vanish was a perfect stealth (even through damage) and usable every 30 seconds, or if sprint was guaranteed (pre-talents) to give us the possibility of catching up. The fact is: rogues lack good counters to other classes’ counters to our damage. I’ve pretty much accepted that if I get deathcoiled by even a semi-retarded warlock, I’m probably going to die, even if I kill them first.

I’ll give an example of post-metagame kiting which forces the original attack rogue to transform into a control class. Noteworthy, this assumes the hunter has no idea the rogue is there…else it gets even worse.

Pre-Metagame:

Rogue Ambushes
Hunter and pet engage rogue in melee
Rogue has higher offense/defense ratio, the Rogue wins.

The hunter is the controller, and cannot trade hits (for the most part).

Post-Metagame:
Rogue Ambushes.
Hunter Scatter Shots, FD-Traps
Rogue is Frozen, and possesses a zero ratio.
Hunter begins the Kite: AoC, Lay trap on OOC, Mark, and Aimed shot followed by serpent sting on jumpshot to prevent vanish (and to abuse the current vanish bug, as sting would hit on vanish).
Rogue sprints, and maybe eats trap, we’ll assume he doesn’t.
Hunter jumpshot CSes on sprint. Sprint dies out, the Kite puts the rogue back at a zero ratio, and the Hunter wins.

After we consider even a basic metagame evolution like this, you can see a huge difference. One in which the rogue, post-metagame, clearly cannot be an attacker. The new metagame strategy for the rogue is to begin as the controller. In the original metagame you see the rogue as the attacker. In the post-metagame (filled with kiting), the rogue is the controller (as he has been controlled/forced into a terrible ratio).

Post-Post-metagame (with controlling rogue):
Rogue links CS (SS/Hemo), Gouge, KS (unload), Blind (vanish for pet), CS (SS/Hemo), Gouge, KS (unload).
Hunter has a zero offense, and thus a zero ratio for the duration of the fight.
Rogue wins.

Post-post-post-metagame (with hunter controlling):
Rogue CSes
Hunter Trinkets, SS, FD-Trap
Etc. Hunter wins.

With good timing and skill for each class, this is how it should always work.

If the hunter knows the rogue is there, the metagame is a thousand times worse:

Flare/Trap camping
Hunter uses of consumables before fight (which rogue can’t use stealthed, minus poisons)
Rogue eats trap, maybe with a lucky sap on hunter, usually not.
If not sapped, then GG, hunter wins.
If sapped, then Hunter may or may not get the kite, regardless, trinket-SS-FD-trap will take care of it.

Does this mean I always lose to hunters? No. I rarely do lose at all, but that has more to do with a lack of skill on the hunter’s part. Hell, I often catch them with gouge on trinket…but, the hunter has a huge advantage, as he had the opportunity to spam Trinket-SS (1-second time frame, which doesn’t require ping), while the time frame on my screen is 1-second + my ping. Thus, I shouldn’t actually get my gouge off before SS hits me (unless I have some telepathic powers and I somehow know a second in advance when he will trinket-SS). And, if they are smart, and they trinket on KS, I lose right there. Regardless, why should my response have to be so fast, trying to catch someone on the spam? They can take their sweet time on CS or KS. Practical responses just don’t exist. I will that that hunters can be killed, but we shouldn’t be able to do it when you get right down to it.

Now, now…I’m sure every GM is going to tell you, well, the rogue has a “choice” as to whether he will engage. And, I’m here to tell ya’ that there isn’t always choice. Metagames and balance aren’t concerned with whether you feel like attacking the player. The question is: would you make it or not? What if you don’t start the fight stealthed, and you get opened upon? What if I MUST cap an AB node against a single hunter in the next 30 seconds, in order for us to win, shouldn’t I at least have a shot at winning? Opportunity does not always present itself. It is a piss-poor argument to say that we have choice, a lot of the time you don’t.

I’m always amazed by the oh-so infallible arguments Blizzard will give concerning game and class balance. The very fundamentals of group-based fighting are based upon the solo-based fights. Without a strict and completely balanced set of solo-based matchups, how in the world will group-based fighting be balanced? (Sorry, I’m ranting…) Show me the math! /rant off

So……How can rogues control the fight? We’ve already seen one way--gearing up.

In a duel between two equally equipped rogues, the fight isn’t much different than the pure naked fight. Sure, the offense and defense numbers have changed, but the ratios have not changed in comparison to each other. Both will still die, on average, at the same time. So, should you simply acquire more and more gear? At some point, gear will be equivalent across the board. Assuming you wasted enough time fighting PvE mobs in a game, and your opponents did as well, there will be no advantage to gearing up. Acquiring Gear, then is just another way to waste your time, it really says nothing about your skill….but hey, if you want to compete on a more level playing field, gearing up may be necessary, so you’ll probably need some of your own. Gear acts as a passive form of crowd control that increases your offense effectiveness while also influencing through limitations the effectiveness of your opponent’s offense. But remember, that your objective is to win, not to tie, and gearing up will only give you a tie against an equally geared opponent.

There are other obvious ways of increasing your offense/defense ratio. How about using abilities alongside auto-attack? In the base rogue vs rogue matchup, if one of the rogues started using SS/Evisc, he will surely win. You would notice that these basic damage abilities increase the rogue’s overall DPS (damage per second offense), and thus the offense/defense ratio. Even a butt-naked rogue using SS/Evisc would defeat a buffed rogue. Conversely, given equal gear, if both rogues choose to use abilities alongside autoattack, then, again, there is a stalemate. If you wish, you may try to classify this as part of the base damage of the offense, and that may or may not be acceptable. But, the more you assume in the base, the more problematic it can become in calculating future action trees. It is best to think of this as influencing offense/defense ratios, and therefore, as a form of CC.

Personally, I like to think of my energy, combo points, and any non-auto-attack abilities as a resource to spend and a convertible set of options in a future action tree. I would hate to limit myself to CS, SS, Gouge, KS in EVERY single fight, when sometimes a CS, SS, Eviscerate would be clearly more effective at the time. In reality, we must calculate future options based upon the current situation. Knowing whether you are the attacker or the controller, and whether you can actually win the fight or if you should suicide (*cough, unfortunately rogues have to deal with the latter quite often), is essential to understanding the current situation for when we decide which options would be best to choose and use. Thus, I would rather calculate non-auto-attack abilities in our offense/defense ratios per situation, as the use of the abilities varies per situation.

Another elementary approach to crowd control is positioning. Positioning can be very powerful. For a rogue, it opens up other future action trees, like Ambush and Backstab, and generally allows the controller to deal damage an opponent without the opponent being able to deal damage to the controller, i.e. eliminating an opponent’s future action trees involving melee damage. This is extremely powerful, but also extremely easy to counter. Becoming adept at positioning is one control feature that will allow you defeat certain opponent’s, essentially through eliminating their future action trees. In strict PvE, positioning is always useful; but elsewhere, usually this form of control is not good enough.

Stealthing can provide a number of control features, including positioning and the first hit…and also that wonderful element of surprise (a metagame issue). Stealthing innately changes your offense/defense ratios. Use it to your advantage; use it often, don’t listen to retards that think you are cheap for restealthing multiple times during a fight. Ask them what cheap is? I doubt they’ll be able to give you a good answer, most likely it would be idiotic and arbitrary. Just remember: by using stealth you are influencing your opponent’s future action trees through your control. If they can’t see you, then they will have a harder time either damaging or controlling you.

In the base rogue vs rogue matchup, stealthing is available to both players. Notice that each time one rogue in our base matchup becomes a controller, they quickly gain an advantage over the attacker. At first one person gained gear, and was winning, then both had gear, then one player use special attacks, and was winning, and so the other player used specials, etc. There is only so much on can do to bring up offensive ratings and passive defensive ratings. At some point, we have to use pro-active abilities to be the best controller of a fight. Essentially, if you are the controller, it is your job to create situations in which it is safe or safer for you to attack, such that your offense/defense ratio is higher than your opponents.The person with the higher offense/defense ratio is the attacker, the person with the lower is the controller. By controlling, these ratios change such that the controller will eventually be in a position to be the attacker, and the original attacker will want to be a controller…..(post-metagame is would seem that everyone is a controller until the time is to be an attacker, but, it still boils down to when you should be attacking and when you should be controlling, the roles can change quite often).

Buffs like evasion also influence the effectiveness of future melee action trees, and therefore act as a form of crowd control. I can’t tell you how many times I’ve gone AR/BF/Evasion and rushed down 3-4 mobs that I would never have been able to solo otherwise. My offense/defense ratio skyrocketed to the point that I overcame the entire encounters offense/defense ratio.

Even healing acts as a form of Crowd control as it directly influences offense/defense ratios. Healing equates to +X to your total defensive HP. Increasing the numerator in our equation immediately decreases the percentage of your defense that an opponent penetrates as opposed to the percentage of your opponent’s defense that you would penetrate.

Buffs, gear, healing, consumables, and positioning are all relatively basic control features that every class can use. I think we should evaluate, even if only for moment, some of the core pro-active control abilities of a rogue.

Stealth, from a good distance, without a pet coming to attack you (“working as intended” my ass), essentially eliminates the fight altogether. Even if your opponent knows you are there, the rogue is the only class that can effectively choose the matchup (beautiful for those who do the math). At a distance, and assuming the stealther will avoid detection and AE’s, stealth puts all offense/defense ratios at zero.

Now, of course, if a mage see’s you stealth right in his face, he still can nova you, and so future action trees still contain the possibility of non-zero offense/defense ratios. The same would go for players with extremely high stealth detection. This, like all of the calculations of stealth, rests upon player reactions a great deal. I can’t tell you how many times I’ll CS, Gouge, Evisc on a mage and he’ll blink/poly, I’ll vanish, and he had the opportunity to CoC me out of stealth right in front of him…but he forgot. It may be best to simply calculate the fact that the mage did have the chance to CoC or Blizzard, or what not, but on average, only 20% would do it…Something along those lines might be best. I still maintain this is quantifiable and calculable; it may come down to just a question of practicality for us mortals who actually play the game (as opposed to devs).

In many cases your opponent won’t even know your there. And, this may be one of the harder calculations in the game to make, primarily because it abuses the actual players reaction to a surprise attack. Catching a cold-blooded hardcore pvper with a surprise attack might not mean anything different in the calculations; they may have practiced this a thousand times, and may react as if it were a normal thing (as if they were prepared…which they would be technically). Catching someone totally offguard, like ganking in IF (where they don’t expect it), might net you a victory you normally wouldn’t have won if the opponent had been more mentally prepared, as in the case of a duel. In this case, offense/defense ratios will vary based upon a micro-metagame, ranging from fighting an AFK player with zero offense/defense potential to a shadowpriest that trinket/fears you into some guards and meltz your face with their maximum (or even higher because of guards) offense/defense potential.

Distract has be to be one of my favorite abilities (while imp. Distract talent had to be the most useless one I’d ever seen). I always laugh when someone loses in a duel simply because of a silly thing like distract; who would have thought it was so useful? This is strictly a positional debuff, but it can also be used to stop someone dead in their tracks, and depending on their reaction time, it can be used as a non-combat anti-kiting tool. Like stealth, this can have a lot to do with how an opponent reacts.

There are two best case scenarios for Distract.

1.) You are attempting to get around a mob that you would otherwise be forced to engage, and thus acting as a complete elimination of an opponent’s offense/defense

2.) You need to catchup to that darn player that running from you to open, maybe he’s a flag carrier or something. Distract will increase your practically zero offense/defense ratio to your normal engaged offense/defense ratio against an opponent (assuming you regen 30e before you reach them, otherwise that must be calculated as well).

Sap is clear and formal crowd control. It is the ability to completely eliminate an opponent from combat. Gotta cap an AB node with 2 people? Sap one, kill the other. You transformed the Group’s two-person offense/defense ratio to one person’s offense/defense ratio for approx. 15 seconds. With thistle tea, you may just win =). This is an easy to calculate tempo advantage.

Gouge is the odd ball, and certainly one of the most underused abilities a rogue has. Most rogues get the imp. Gouge, and for good reason. If you wait for gouge’s entire effect, it is nearly a free combo point. At the very least gouge can interrupt spells. Here is why gouge is fantastic:

Gouge=45e=4 seconds of incapacitate (any damage will break it) + 1 combo point.

Essentially, waiting 4 seconds is 2 ticks of energy, and you get 40e back. That means, If you wait for the full effect:

Gouge=45e=4 seconds of incapacitate + 1 combo point + 40e. Making the cost 5e in the end…5e for 4 seconds to do what you need to do and 1 combo point? Amazing.

By improving it we get:

Gouge=45e=5.5 seconds of incapacitate + 1 combo point + 40-60energy (75% of the time it will be 3 ticks). This makes a great skill even better.

Waiting for gouge can be a good or a bad thing clearly. If the mob is DoTed, and it takes damage upon gouge, then you spent 45e for one combo point (and technically the crit chance for SF, if you are specced for it). But, in most cases where you have some time, gouge is a means of escaping (for kite), preventing a spell cast, proccing SF, a free combo point (hard to pass up), actually generating more energy than it costs, and is a great lead-in for Kidney Shot.

Even in solo PvE, assuming you don’t have adds, this skill is always worth using every 15 seconds. It is true tempo advantage. You benefit from a combo point and up to +15 energy at the cost of nothing! You and your opponent just sit there, and you reap the rewards while your opponent does not. You are one combo point and 15 energy ahead of where you were before you used gouge, and your opponent is still where they were from the beginning. This is tempo advantage.

Blind is what makes the rogue a viable class in the upper-echelon metagames. Blind does what vanish cannot (assuming blind lasts). Blind is a free restealth, it is 10 seconds to kite, it is a FULL bar of energy regeneration, and it interrupts spell casting from a distance. It is the only answer to so many problems the rogue has…and it is the best link between stunlocks a rogue could ask for. In my opinion, this is the best control spell a rogue possesses. I can take multiples with this spell just by shifting targets, I can escape from the inescapable, and I maintain control (which is everything to a rogue). Usually stunlockers have points left over post-KS, and if they are pro, they can EA through Blind, restealth, and boom ;P restart on an EA’d targeted. Although, with the reagent cost, this should be spammable…Otherwise, with a 5-min CD, wtf is there a reagent cost for?

Blind=30e + reagent on 5min CD= EA, 10 seconds to bandage, restealth, apply poisons, run away, /dance, link stunlocks together, the only true and lengthy combat-usable elimination control spell, the only range ability of value, the best answer to a kite, and enough time to eat a slice of pizza (gobble, gobble, gobble).

This has numerous repercussions on the offense/defense ratios. It is versatile and powerful (and rogues need it).

Vanish is similar to blind in its power. Vanish does what Blind cannot do. It is an AE elimination of the rogue’s offense/defense ratios from combat equations. There are of course preconditions to use, a few counters to it, and hella’ bugs. But, I love this spell. (Vanish + Blind=Prep is the best talent a rogue can have). Vanish allows a rogue to re-open at any point in a fight, and sometimes that is exactly what you need. Blind requires you have the actual 10 seconds to wait, vanish doesn’t. While vanish isn’t versatile in all the same respects as Blind, it immediately changes a rogue’s offense/defense ratio’s back to stealthed ratios.

And why is restealthing so freaking awesome if you are going to opening? Cheapshot.

Cheapshot is ridiculously good. This is the greatest ability a rogue has in his arsenal. Even if it was only 60energy for 2-3 combo points that would make it the best combo point generator in the game. But, on top of that 60 energy (which can be brought down to 40e with talents), a rogue can benefits from 4 solid seconds of stun. 4 seconds of true stun. Like gouge, Cheapshot almost pays for itself, you gain 40energy back making it cost anywhere from 0-20 energy.

CS=40/60 energy=4 seconds of stun, +2-3 combo points (depending on talents), and +40 energy.

A true stun presents the occasion in which the stunner may act upon his opponent in any way, shape, or form, without fear of reprisal. I consider this the king of crowd control. Would you rather have a 10 second polymorph or a 10 second stun? Why? You can beat on the stunned opponent!!

On my rogue (+2 DD fo’ sho’), CS is a FREE +2-3 combo points with 4 seconds of white damage. I sit at about 150 white DPS, easily 600 damage and +2-3 combo all for free? Ambush costs 60energy more, and although it deals its damage instantly, it lacks control and real damage in the end. My CS, Hemo, Evisc is worlds more damage than Ambushing (w/talents).

CS is the real deal. Only the mage class should be ambushed (if specced for it) as opposed to CS. And, we certainly have the tools to express the equation for why this is the case. (Darn you blink!)

And, finally, my absolute favorite rogue control ability: Kidney Shot.

KS=25e or 0e w/Relentless Strikes=2-6 seconds of stun + 60% chance of combo point with talents + 20-60energy

You pretty much always finish with atleast a 3-5 point KS. For the time, I’ll speak of KS as a 5 pointer. So what is KS? KS is 6 seconds TIME. Time my friend is the greatest influence upon offense/defense ratios one can have. Tempo advantage is a direct boost to future offense/defense ratios. In fact, it is the equivalent of applying your offense/defense ratio to an opponent, without them applying anything to you.

A 5-point KS is 6 seconds of white damage, +60 energy to spend, possibly an extra combo point, and whatever else you want to do. Thank you Blizzard for this ability. KS, like CS, is a true stun. Only, it is combat usable (unlike CS which requires stealth).

KS is THE skill to use when possible. It is superior to eviscerate in so many ways. 6 seconds of white=900 damage + 60 energy. Even in groups one should consider KS over eviscerate. It might lower your damage meters, but it will certainly have a much more profound impact on a rogue’s or group’s overall offense/defense ratios. Imp KS leads me to believe that Blizzard understands what KS might mean to some extent, and although I don’t advocate investing in Imp KS, I do think this is the best finisher available to a rogue.

A 6 second Kidney shot means you have, with the exception of trinkets, eliminated an opponent’s future action trees over the next 6 seconds, while simultaneously opening up most all of your future action trees for 6 seconds. For most rogues, this means that you will deal 6 seconds of white damage, gain some positioning, blow some cooldowns, and deal some damage from special attacks, all for free! KS is the goto finisher

I won’t bore you with possible stunlocks. But, we can at least understand the offense/defense ratio transformations. The essential feature of the stunlock, is that control abilities are linked together in such a way that most or all actions of an opponent are prevented.

Stunlocks are tempo advantage. They are the only good way a rogue has to improve his offense/defense ratio. This is almost entirely a rogue strategy, and it is the only thing that seperates us from becoming useless. Stunlocking, even if only a softlock, gives the rogue the advantage he needs. Stunlocking puts your opponent in a prison. We can torture them, even if it is slower than ambush/BS, without fear of becoming controlled ourselves.

Stunlocking creates the opportunity for a rogue to become the attacker.

A rogue that doesn’t choose to stunlock, and instead chooses to play as just an attacker, will not have as much control over an opponent’s future action trees. Consequently, most skilled opponents, having realized the rogues fatal error, will have a response that will control the fight in their favor.

Think before you fight! ;P Make yourself useful; Be a pro-active controller; stunlock for the win.

&lt;span class=&quot;postbody&quot;&gt;The basic summary:&lt;/span&gt;

1.) Classes with innately lower offense/defense ratios must play as the controller against classes with higher offense/defense ratios.
2.) The rogue has one of the lowest innate post-metagame offense/defense ratios.
Thus:
3.) The rogue must play as the controller against most classes in the game.

Conclusion:

There are billions of calculations possible. And, thinking in these terms is a daunting task. Most players simply use experience and intuition as their guide. And, for most, that is fine. Many couldn’t be concerned with character balance or optimal strategies. Good for them! For anyone who does care about fairness and strategy, you should be crunching the numbers…starting with the offense/defense ratio. We should all develop that: “Show me the Math or be quiet,” mentality.

At surface value, the article may have presented nothing new for you to actually USE it in combat. But, the point of the article is for us to become capable of justifying our actions mathematically.

And, with this sort of thinking, we are in a MUCH better position to explain why a Naxx Warrior eliminates some of the utility and significance of a Naxx rogue (in PvE of course). Showing the math behind offense/defense ratios of encounters gives insputable evidence about why:

A class is imbalanced?
One strategy is stronger than another?
Which gear is best to wear?
Which build is best to use?
Etc…..

I think that the majority of players and even the dev’s lack a good conception of the very fabric and genetic structure of these games. In an attempt to fix that, I wrote this article hoping to present strong case for not only crunching the numbers (in every aspect of the game), but also the reasoning behind why a rogue is a control class, and why rogues should be stunlocking. Maybe you learned something, maybe you didn’t. Hope you didn’t fall asleep too many times! =)
We bought The Burning Crusade. (SP2 req though...i'm afraid it might not work). Once it is up, I'll be botting quickly to 70. From there, I'll run instances + arena etc. But, I'm doubting whether I should bot at all at 70, as I'm sure to get a million tells for LFG and what not. Bot a BE pally ftw?. Still need to cough up 1.5-2k for the mountificationness. Anyways, plan on leveling my rogue and then the pally. Hey, I always wanted to be brokenly good! I predict level 70 BE pallies in 2 weeks. Mine will take 4-8 weeks.

I've been enjoying some good duels, but a lot of young adults play...and they have a tendancy to be retarded...good duels, poor conversation. Not that I get conversation with anyone but my wife (and she often times is too tired and stressed to talk with me). Hell, why do you think I write you...you oblivion. Getting it out of my head, whatever I'm spewing on these pages, keeps me sane.

Work is...work. But, I'm glad it is a job instead of a career for me. I am most thankful that I don't feel like in put in a position of doing what is moral vs. what my boss(es) tell me to do, unlike public schools. My job is not very significant, and I'm glad I can say it and plan for the future with that lense. Of course, I'm sure that doesn't clearly please my bosses, it at least doesn't get me into trobule. While I can put out the production of 5 people, I now only put out what is required and then some. I don't have incentive to do more.

Mind you, I'm very difficult to please. My job is fine. It pays the bills, and isn't strictly immoral from what I can see. Not my function directly in life, but it allows to me to support my family, which certainly qualifies as a purpose.

---Oh, and Flint and Kathy are taking the baby for us on Saturday. We are gonna have a day of it....breakfast, Magic tourney, hopefully we'll grab some Indian food. We sure could use a day off from the kidlet.
I am burned out. I used to come into work fully energized, ready to do my job--I was motivated. While most people were taking 20-40 inbound calls a day, I was pulling 80 a day, taking them back to back with no downtime. In outbound, I was able, at my peak, to do 35 calls an hour. 35! I barely get 45-50 done in an 8 hour work day now. Why this shift from fast paced production to the lethargy of barely meeting the quota?

It is simple: I have no incentive to put forth more effort or production than what is required of me. I'll get paid the same amount either way, and they are satisfied with the minimum, so why do more? In fact, I have way more incentive to be a mediocre employee, as opposed to really giving my full-fledged effort. What economic incentives have the administrators and managers of Humana created for me to perform well below my capabilities?

1.) No matter the effort I put forth, I get paid the same amount. Whether I put forth 400% production or 80% production (of the quota), I get paid the same. Why should I try harder when it doesn't result in any further tangible rewards? This isn't an issue of my &quot;attitude&quot;...it is a simple fact of economics. If I produce more, then I should be rewarded or compensated more. As this does not occur, then I'll meet the expectations they've presented in writing, and stop at that.

(Apparently, we don't even get raises that break the inflationary rate to keep up with our standard of living. So the reasoning that I will get a compensation adjustment in virtue of my production, one that is even remotely proportional to my effective total production, is completely ridiculous.)

2.) My efforts are actually punished. You'd assume that Humana would try and give me &quot;added value&quot; to my work place experience, as an alternative to actually increasing my salary. Instead of added value, I've been treated as the employee that must be doing it all wrong. Ironically, being an overachiever has actually netted me grief and stress (that I wouldn't have had if I had just done the normal amount).

When I was putting up the numbers, literally blowing everyone away on the metrics, management didn't approach me with an open-mind, they merely assumed that my method and performance was flawed. Instead of saying &quot;Good job,&quot; and quitely trying to learn from what I was doing, they just observed with suspicion, practically frowning upon the fact that I broke their mold. I was even shadowed at my desk TWICE! because they didn't believe my production was valid. Albeit, I'm not perfect, and I do make mistakes during work, this doesn't invalidate my overall productivity. You'd think these people would be smart enough to sit down with me, 1 on 1, and ask me what I'm doing and why. Since they obviously can't do this job themselves (which has been made clear to me in a number of ways), don't you think I am in an excellent position to help setup the method by which to complete these calls in a more effective and efficient fashion? Don't you think they could learn from me, and that maybe my skills of methodological innovation could be put to good use? Clearly, it is better to lay low, to do a mediocre job and not take any flak for it.

3.) Socially, I bare the pressure and attitudes of other co-workers who are both envious and stupid, and my supervisor allows this to occur. It is obvious that they are playing politics, and I recieve no benefit from the alienation that occurs through my productivity.

Seriously, why try? I am lost in a see of politics and bereuacracy. It is obvious that my supervisors are retarded, and can't even fulfill their egoist's mission to put up 'the big numbers' effectively. They need what I have, they need me, and they are too stupid to realize it.

Another incentive issue: I have a 2.5-3 hour round trip commute each day. That is 2.5-3 hours that I am not getting paid for, hours spent away from home. I could get paid 12 bucks a day somewhere next to my house and make the same amount of money if I spent as much time away from home there as I do traveling to and fro, and working at Humana.

I do need a new job. Seriously.

Right now, it pays the bills and it covers our needs. My family is provided for...and for that, I cannot complain.
I apologize for not posting in the past week or so...but, I have been thinking and writing. I've also been over at roguespot.com and wowglider.com working away at what I'm going to do in WoW. And, I've been busy reading and considering themanadrain.com's content (as well a one &quot;Smemnen&quot; 's articles which are very well written). k0sh3k and I have even discussed selling my character and botting another back to 70 in 5 weeks (now that I know exactly what to do). Hell, we could even make a business of it...if we got it down pat, and could sell them 1k a piece, I could bot a network at home, and just bot'n'sell accounts all day.

But, eh, for now, I am really enjoying my rogue. I just hit 70, and I might just keep him (especially as Ebay just banned the sale of intangibles).

Mom and Dad's laptop has been stolen...the brand new one I believe. That sucks! They are good otherwise, I'll have to see how their visas are going. Speaking of which, JRE got his passport in the mail...I wonder if he will really stay in Thailand.
There is a general consensus among people, or a movement among those who have taken at least one psychology class, that intelligence and wisdom are two different types of thinking. Usually, people will say that intelligence is a property of mind that encompasses many related mental abilities, such as the capacities to reason, plan, solve problems, think abstractly, comprehend ideas and language, and learn. As for wisdom, people say it is the ability, developed through experience, insight and reflection, to discern truth and exercise good judgment. For a long time I agreed with these distinctions; however, I do not conclude that they are seperate any longer.

I argue that wisdom is actually a subset of intelligence, it is a TYPE of intelligence so to speak. You've certainly heard the phrases &quot;book smart&quot; and &quot;street smart&quot;. You've seen how they've been divided, as if one had nothing to do with the other. While they are distinctly different types of thinking, they are STILL &quot;thinking&quot;, which falls directly into the category of intelligence.

While it isn't necessary to flesh out the full meaning and nature of intelligence, we can at least appreciate that intelligence is generally about thinking. Some people are intelligent in this or that, some people are smarter in math or science, some people are intelligent with words. Intelligence varies. Now, I in no way mean to detract of the relevance or study of intelligence and wisdom. But, we can see that wisdom is just a specific TYPE of thinking. What is wisdom thinking about: morality. Wisdom is simply a question of what one OUGHT to do. This is a specific, and most important type of intelligence.

I demand that we not drift into spiritual or relativistic type arguments. This is a patently obvious truth: wisdom is a subset of intelligence. Wisdom isn't granted by God necessarily... but, the tools to become wiser? yes.

In evaluating how &quot;intelligent&quot; a person is, we must then also take into account their wisdom. Assuming doing the Will of God is the most important thing a person can do, and Willing God's Will is a choice made directly from wise-thinking, then we would argue that wisdom is the most attribute of a person's intelligence.

What does this mean to us? It means that, when we are weighing the importance and impacts of different types of intelligences, wisdom will be the most influential factor to consider. We cannot call someone &quot;smart&quot; unless they are wise.

Is this much different from what other people mean? I think it is. They attempt to divide the two, cognitive/scientific reasoning and wisdom...mostly as a way to show that there is &quot;more to the world than logical thinking.&quot; However, it is clear that wisdom IS a form of logical thinking, a very specific and important type of logical thinking.

We cannot divide wisdom and logic. A truly logical person will be a truly wise person, and vice versa. Does this make me a rationalist? Yes. But, I think the rationalism needs some context.

A being who is omniscient and perfectly intelligent is also a perfectly wise being. That is to say, God knows what is morally right through REASON alone. He has no spirituality about it, He logically deduces the right answers to all things.

Are we, as humans, perfectly intelligent and omniscient beings? No. Thus, we will not successfully deduce all things, and we will not be perfectly wise. This means: man-made institutions and beliefs, in general, as we are not perfectly logical, will not be perfect or perfectly wise. HOWEVER, this does not eliminate the truth that there was the possibility OF a logical deduction.

This of course would bring further questions. How can one be responsible for his actions or thoughts if he were not given the tools to fully accomplish the logic, and subsequentially, the wisdom of God? You can only be responsible for what you possibly could have been responsible for.

Here is where we must apply relative-type thinking (without the heresy of course). A person with down syndrome is a person (we won't deny it). Will they ever have even average intelligence? No. Thus, they won't have average wisdom. What are they judged on? They are judged on the fruits of what they possibly could have logically deduced. If they could only manage the deductions that killing people is wrong, then they will be judged accordingly.

Does this mean we have the right to judge people like this? Without omniscience, we are not in a position to judge so easily. This doesn't mean there isn't a distinct right and wrong in a situation, rather 1.) we ourselves might not know the answer, and 2.) we are limited in our evaluation of another's person moral culpability. However, that doesn't mean we aren't capable of showing obvious stupidity and not.

We should take extra care to point out that the &quot;brilliant&quot; person who is unwise is actually not very intelligent in the end, and, the seemingly &quot;dim-witted&quot; person who is wise, might actually be very intelligent (in virtue of a strong wisdom rating ;P).

It is evident that responsibility scales with our intelligence and freedom to act upon that knowledge. Wisdom is merely a synonym of intelligence in the end (subset, yes, but it points towards the meaning and purpose of our intellect). Intelligence has no purpose outside of what is valuable and what is moral. Intelligence and free will exist in virtue of BEING MORAL.  

We exist to do what is morally right. Speaking in terms of &quot;intelligence&quot; and &quot;wisdom&quot; as seperate concepts is not a constructive distinction, as they exist as the same thing for the same purpose. All choices are moral choices. Smart and wise are the same thing, period.
I’m level 67 at the moment, and  I’ve had a good time. I appreciate how well-crafted TBC has been. Mind you, I don’t run too many quests (until I’m max level, then I’ll probably pick the ones that have good rewards). So, mainly I’ve been grinding. The grind has been just that, a grind. I have leveled faster than I thought I would though.

I was going to level up my ghetto 500ap 3.5khp 16% crit, newly made 60 rogue with a build that could PvP (Hemo build, with weaponswap for daggers…the new 21/8/22 for me at the time). &lt;a href=&quot;http://www.wowhead.com/?talent=ihtfox0oZhZEMss0hRo&quot;&gt;http://www.wowhead.com/?talent=ihtfox0oZhZEMss0hRo&lt;/a&gt;

Of course, when TBC actually came out, I quickly found out that I needed a grinding build, at least until I got some equipment upgrades. So, eventually I decided upon a heavy sub grinding spec…with a twist that has worked out great for me. &lt;a href=&quot;http://www.wowhead.com/?talent=whxboZhbxzZxMjohhRso&quot;&gt;http://www.wowhead.com/?talent=whxboZhbxzZxMjohhRso&lt;/a&gt;. While originally my heavy sub grind build (which has outperformed combat for me while grinding) never had any combat points, I decided to give riposte a test run (I know it was quite powerful when I was combat). To my pleasant surprise, it turned out very well. I found that the AP sacrifices were worth it, especially if and when I got adds. With evasion (which you could pop liberally), fighting multiples was actually pretty easy, considering Setup + multiple parries for riposte, I could mow through adds when I got them.

Now, that I’m slightly more geared, 1100AP + 7k hp + 16% crit, I’ve been having my usual PvP urges. I can’t take it anymore!! When TBC first came out, everyone was all carebear, everyone was grinding, and nobody PvPed or ganked. But, people are human, oh yeah, you know you have those urges too, and they started ganking. The first few I just let go, but after a while I knew I needed revenge. So, as I am frankly tired of grinding, I’ve respecced, hopefully for a final time until 70 (I spend far too much money respeccing), so that I could PvP. Right now I’m using:

&lt;a href=&quot;http://www.wowhead.com/?talent=iheboxooZhZxMjohhRsho&quot;&gt;http://www.wowhead.com/?talent=iheboxooZhZxMjohhRsho&lt;/a&gt;

While it doesn’t sport the weaponswap for daggers, it does keep setup and camo, which are both fun and keep me sane while grinding (I &lt;3 Camo). The build keeps the fundamental combat structure for grinding, but most importantly it gives back my beautiful, wonderful, most exalted Cold Blood. I can certainly feel not having riposte or the extra points in the heavy sub agi/AP talents, but it is SO worth it for me.

Despite previous ill-will towards a certain 31-point talent in the sub tree, especially at pre-61, I’ve grown quite addicted to it as well. Pre-TBC, premed was simply not as good as cold blood. But, now that I can have both, I will sing premeditation’s praises! On the gank, with MoS, Premed-CB-CS-Evisc is a 3k open. They start the fight at 25-40% health inside a CS-lock? Yes, please. Even if premed is substandard for dueling, it is hella’ fun elsewhere, and truly shines for pure rush downs with cold blood (when control doesn’t matter to you).

My zombie-grind mind is now loving the game even more as I come back to PvPing and ganking. Beat a 70 Hunter that opened on me yesterday, and I’ve found paladins MUCH easier to kill, I cut through them like butter. Crack that turtle, and you win. The pleasure of hemo is now that I have a choice: I can burst or I can stunlock as usual.

My favorite improvement for the rogue class has been survivability.

1.)    My HP levels are wonderful (for greens at least). I’m no longer getting 2-shotted by anyone. I can take a few hits, I can take multiples much easier. In both PvE and PvP it is nice to be able to take a few hits. I suspect that at 70 we’ll have to choose between high survivability or high damage in PvE (opting for damage of course). The itemization is obviously setup to split rogues up into highest ap/crit or survivability with some AP. For me, as I’m an HP-whore, I’ll definitely opt for the survivability.

2.)    Cloak of Shadows. While this was very nice pre-TBC, having it trained is just the amazing. I’m actually GLAD they didn’t put this on prep, 1-minute CD for something this powerful is broken. I secretly think this will have to be nerfed. We are officially escape artists. If I’m actually paying attention to my screen, unless I’m stunlocked to death, I am pretty much ungankable. This might be more powerful than prep as far as I am concerned. This is usable in stealth too…totally awesome. Simply a savage ability.

Problems, concerns, etc.

a.)    I have noticed that eviscerates seem lower than usual for me. I used to hit consistently harder (on the same mobs even). But, I’m not complaining about it, the math checks out (as it didn’t before).

b.)    Envenom is lackluster. Nothing new here. I probably won’t be using this ability.

c.)    Weapon itemization is pretty awful for hemo rogues. I’ve yet to see good replacements for my HWL 2.9 MH. I’m wondering if I’m going to be forced into daggers for this reason (or heavens no, forced into imp SS)

d.)    I’m still not fully satisfied with our functionality in groups. Imp sap has been very useful, but beyond that, I feel my role is comparatively not as vital as others, and that my role is crowded by a lot of classes. I realize this the plague of the DPS class, but I think further evaluation of rogue function is necessary.

e.)Â Â Â  Engineering, wtf happened to my beloved engineering?

f.)      Shadowstep still needs a lot of work from where I stand. The opportunity costs aren’t worth it at this point. I’m betting they’ll buff this ability, but until then, I’m not pleased with its performance as a 41 point talent.

Props to:

1.)Â Â Â  Master of Sub: 10% damage is top flight. This, DD and initiative compose the core engine behind sub builds. The more and more I play, the more I appreciate this ability.

2.)    Cold blood. While it probably isn’t as powerful as it once was, dictating crits is so powerful. It’s little brother premed makes it even better, even for PvE! Sap 1, Premed-CS-CB-Evisc-GS number 2, rush down number three, gg? With evasion it gets even better.

3.)Â Â Â  The zonewide PvPish objectives, really a lot of fun, especially for a rogue.

4.)Â Â Â  18-slot bags that are dirt cheap (cost me 10g per bag as I had most of the mats already from grinding).

5.)Â Â Â  More interesting content in PvE and instances.

TBC has really brought me back to loving the rogue class once again. I really love playing a rogue again. I’m even enjoying bits and pieces PvE (and that has been years since I’ve even remotely care about PvE…like, Everquest years ago). Two thumbs up for Blizzard for a high quality expansion.
I’ve been sitting at close to 8.5k hp unbuffed now…1450 AP, 16% crit, and 4% hit, using roughly the same weapons. Any further adjustments to my gear will now require alot more effort, for alot less reward. I am going for a few pieces though. 4-piece assassination set, the Aldor exalted and below gear, and a ring from spirit shards. I want to break, when all is said and done: 9k hp, 1500 AP, 20% crit, 6% hit, with 80 DPS weapons with epic enchants. I’m still not fond of resilience just yet.

My problem has been a lack of good hemo weapons (no slow weapons to speak of). It looks like I’ll be jumping from a 2.9 speed weapon to a 2.6. Even with a 20 DPS gap in the weapons, hemo looks less and less useful. Right now, I hit like a truck. In fact, I’m deceptively powerful wielding old HWL MH. This issue has made me work out the numbers, and I’m considering going sinister strike at this point. Hemo, it appears, will never reach SS damage through the abuse of AP and slow, slow weapons as it once did. Right now, I’m considering 23/5/33. No CS-H-H-KS though, and that sucks. I’ll try it out.

As of right now, I’m botting (need to find a better spot) grinding cash, not for the mount, but to buy aldor rep items. I couldn’t find a suitable place to bot the actual items, so I’m farming motes and selling them to buy the marks/fel arms. I’ll have to look at the market again and evaluate the overpriced and easy to acquire items/motes that will net the greatest cash. I’d prefer in some ways, a distance island of netherstorm where I won’t see anyone, but where it drops mad loot. Hard to find such places as TBC is so crowded. I’m on the edge of Nagrand at the very bottom of the map doing the elementals. Safe and easy.

I am definitely enjoying arena and dueling. I lose very rarely. Druids and paladins are much easier than before. I must say that CB-Prep builds lose some of their appeal as people truly gear up correctly. Most people are still not gearing stamina up enough. When people are catching up to me (which isn’t hard), I’ll find myself having to work for the win a lot more.
Our family had a rough week.

1.) Bathrooms are still acting up. Plumbers have come 4 times (none of us happy about it, they'll get a mouthful if we have to call them again), they told us to use Charmin...dad says to use Scott. I'll trust dad. It is only periodically problematic, and not as big of issue as nothing is going into our bathtub (eww).

2.) k0sh3k had a migraine that lasted for 4 of 5 days (1 day intercession). She was in agony (I felt awful for her). She laid in bed...The baby and I kept quiet, far away from her. She won't let me do anything for her. I can only give her the medicine our doctor gave us (doesn't work though). Beyond medicine, all I can do to help is cover her eyes and keep light out of the room as best as possible. The constant drone-like headache she experiences day in and day out on top of these ever-increasing migraines has me worried. I have no idea what to do--I pray often (not that I expect any results). We are going to the doctor again this Wednesday. I have my personal thoughts concerning the possible causes, or rather the uprising and higher frequency of these headaches, but I'm not a doctor, so I'll keep them to myself for now.

3.) I somehow managed to hit the curb (again, *sigh) with my vehicle. This time I dented the wheel. I thought, as the Kia is so light that I may have actually damage the body/frame/axel (doesn't take much to ruin a Kia). We were without a vehicle, and k0sh3k was incapacitated. Claudia and Joe? generously gave us a beat-up old Lincoln to use. That thing is a boat on wheels, a monster if I ever saw one. It worked for a few days. On k0sh3k's one-day without a migraine, we managed to get the Kia to Charlie's with a note (after having called them as well), and drove back to the house in the boat (happy sailing). Then, the battery died in the boat. I charged it up several times, but that battery is dead, dead beyond dead. I missed 3 days of work. I ended up caving in, I rented for 48 hours, cost me 170 dollars. I grabbed a ride home from Janet. That day (Friday), Charlie called and said that the store sent him the wrong part and that it would be another week before we could get our vehicle back. The next day I worked to see what I could do for another vehicle. Luckily, Claudia and Joe came to replace the battery  that day (they were unable to come all week...).

4.) Amidst this whirlwind, while I was going to fill up the gas tank, I somehow managed to rip a deep gash into my thumb. We went to the hospital because it looked like it needed stitches (and it probably did). But, the line was too long, and I had coagulated quite effectively, so we just went home. We cleaned it ritually, and bandaged it often.

Oh yeah, JRE was over last weekend too. But, that isn't a bad thing.

Anyways, it is Monday morning of the next week, I'm at work, and I'm glad last week is over. The boat works, the Kia is getting fixed, my thumb is doing much better, k0sh3k has yet another doctor's appointment on Wednesday, we're giving a speech about how Mom'n'Dad are doing in Thailand to the prison -church, and unfortunately k0sh3k is feeling another migraine coming on. God bless her. Lucky for us, finances aren't a problem, we have health and auto insurance, we have people that look out for us, we have tons of food stocked, and we have a warm house to live in...plus, we found out that Madeline adores kidney beans (I'll buy her anything she wants...! don't tell her that though).
We got the car fixed, or so we thought... during a 1-2 hour traffice jam smoke start billowing out of the hood. Well, not hugely, but I noticed it early. I pulled over, popped the hood, heard a sizzle and smelled a foul odor. It came from the coolant area...I was not pleased. The car had just been checked by the mechanic and we had just (days before) changed out our fluids. We shouldn't have had a problem, and needless to say I was not pleased.

It doesn't seem like it was a big deal though. I got to a gas station, but the engine was fine. No more smoke, and the car never overheated. I have no idea what it could be. I'll get the fluids checked again per Charlie's advice over the phone.....

On another car note or two: Claudia has been beyond generous and is lending the car to us until further notice...or until we get another car. Hopefully we'll find one we like by this weekend, but eh, we have time. I hope they come to dinner with us...although, I have no idea what we'll be making for them. I'm sure we'll have fun either way.

Baby girl had a very odd rash, more like bumps all over her body. It cleared up, so we won't take her to the doctor (saving me money, my little girl...how wonderful).

We bought j3d1h a bed! Zomg, I feel old or something, or I don't know, mixed emotions. She is growing up for sure. She still isn't keen on the bed, it is more like a trampoline to her, and way to peer out the window. She is sleeping about 3-4 hours less per day because of that bed. But, that is okay, she needs to get used to sleeping in a bed. It is very weird to put her in bed and really &quot;tuck her in&quot;. When I put her down during the daytime, and when she is sleepy (the only time I even consider putting her to bed), she will pull the covers over her eyes and turn over on her side to goto sleep. It is precious. Even better, we leave the doors open and the bathroom light on for her. When she wakes up, she gets out of bed, walks through the house to our side, and wakes us up (well, k0sh3k up for the most part, I sleep like a rock unless I hear a scream that matters).

Told my supervisor at work that I didn't feel I had incentive to do any more work that the quota. He agreed. He said as long as I meet the quote then he will be satisfied. I'll meet the quota.

I haven't heard from JRE (he never uses a phone). So, I have no word on him or his G/F, or his plans for Thailand or what not. That's okay, it is a happy-go-lucky time for him. I will not spoil it, but I will write an email and see if he needs anything (punk won't let me buy him groceries, clothes or anything...wtf, free money?...and I BADGER the kid about it--next time I'll just go buy it and force him to take it).

Anniversay is tomorrow...I have nothing special. Dinner and a card.

k0sh3k had 9 cavities, 4 were drilled. She has so much drug tolerance that the maximum Novacaine doses didn't touch her. They made he sit through it even when it hurt....I would have done it, but it was up to her. Her jaw is still hurting. I'm not much of a dentist person...maybe if it is free (although, I have preventative dental coverage).
Rogue is slowing progressing. I got some x-52 pilot pants and the 30stam/10agi enchant for it. Picked up a really awful looking Helm of the Claw, threw a crafted running speed 24AP meta gem in there (had to use an orange gem for the effect) so I have +12 stam on boots. I did get my Vindicator’s brand (sweet) and the r14 pvP gloves for the kickilicious deadly throw now.

I need 5kg for a mount, and this is rough to get. I had to glide for marks/fels, and I used a SWEET tunnel in BEMountains for it. It is so good, and so bottable, that I grabbed two demonslayer enchants (hard to come by now and days) and I’ve been there ever since. Hopefully I’ll have the cash in 2 more weeks of botting. It all depends on how well marks/fel arms will sell. I could easily be sitting of 500 and 50 of those. We’ll see.

My dueling guide has progressed. I still need to write a few more sections, and then I’ll be done. I want to make sure I’ve got all the fights down correctly. The paladin fight is the one I have the least experience with, but I’ve had plenty more experience now that I am back on a PvP server and Horde also have pallies now.

The hourglass of the unraveller really sucks. It is simply overrated. At a 20% chance to crit, I’ll have a 2% chance to proc it. 300AP for 10 seconds. There are alot of problems with it…With resilience and defense it gets even worse. Certainly a dagger rogue’s item at best.

I’m going for the Ring that costs 50 Spirit shards and a better chest slot in the short term.

Long term–Gladiator’s gear.

Zombienoir and I have been pwning up the 2v2’s pretty well…although we’ve had a 50/50 streak as of late (zombie wasn’t really on the ball that night).
Every rogue, regardless of gear, can excel in PvP and dueling (some more than others), and I hope to demonstrate that fact with this strategy guide. The guide is not written for the most well-equipped rogue in the world. I’m not expecting anyone to have 10k hp with 300 resilience. You should be breaking a basic 7.5-8k hp though, and you should be attempting to bring HP (and resilience) as high as possible without incurring massive opportunity costs in the AP/Crit/Hit department. Your gear doesn’t necessarily reflect the quality of your playskill, and the rogue class, fortuitously, can be quite fruitful simply through tactful play because we are not as gear reliant, to some extent, as other classes.

Why write to the average rogue?

Simply because it is the average rogue who has the most to gain from strategic play. While the extremely well equipped can win in virtue of their gear, rather than their skill, the average rogue is relies upon themselves a lot more than their gear to defeat opponent. The average rogue is not well equipped. But, as I said, the rogue class is quite linear, which is tied to our innate abilities (although we scale with gear to some extent, we aren’t as proportionally reliant upon our gear as other classes). A rogue can do well even without great gear; we simply become that much stronger with each item and buff we use to enhance ourselves (conversely, we become proportionally weaker as gear inflates). In any case, we can still be useful without full epics, but a rogue in full epics is very capable of winning matches without playing correctly.

Admittedly, I’m tired of gear doing most of the work for people (their time played does not equate to skill or justification for a win condition)–I want to see what you can do without that gear (thankfully TBC gave us some opportunity for this). Although we are already seeing a divergence in itemization as spread across the population, even properly used green gear can allow you to compete with those in full epics. If you are still wearing greens and blues, then you will have a lot to gain from following some of the steps I’ve outlined. As for the full epic rogues taking on people in greens/blues, that really doesn’t show skill, nor does it require the same degree of tactics in most cases. The guide isn’t for you if you simply outgear your opponents to an extent that playing correctly doesn’t matter. The test of a well played rogue is best found when he takes on skilled players with greater gear than him, winning even when the odds are actually against him. Eventually, every person will meet their match, and it is at that point that your choices and tactics matter the most. So, even full epic rogues may want to pay attention.

Essentially, to some rogues who either outgear their opponent completely or fight stupid opponents, going “all-out” so to speak, and maximizing the potential of their character isn’t necessary. That’s fine. You can always scale your efforts back. But, this does not negate the need to know howto make the most of your character when the time comes that you meet an opponent(s) who is just as (or even more) skilled and/or equipped than you. Making the most of your character is the point of this guide, not “how to defeat noobies”. I will be describing “all-out” strategies, but I will certainly admit that against most opponents you won’t need to go “all-out”.

I’ve detailed fights assuming pretty basic gear so that all rogues can make use of it. I’ll treat each opponent as hostile and as a maximally problematic to our situation as possible, generating a strategy that is designed to defeat an opponent when the odds are least in your favor and you wish to win by the largest margin possible. The tactics outlined are good enough that you can win the majority of fights outside of IF or Org with a level 1 dagger (seriously, go try it out); you can win in spite of your gear rather than in virtue of your gear. Having gear simply means that the fights are that much easier for you. This means that most of your fights will never require this much work. Good for you! This doesn’t diminish the point of the guide though, you’ll still meet people who will require every once of your ability.

Why play to maximize your character’s potential?

Play to win. It is pretty simple. This doesn’t mean you can’t brainfart or dink around. But, when you are serious about playing, you are playing to win. And, in the end, the winners will be those who maximized their character’s potential. If you are playing to win, then you are going to make choices that give you the best chance of winning, often by the largest margin.

For the rogue, this issue of winning without using the strategy with highest probability of winning often comes up into play in consideration of the use of cooldowns. Not using cooldowns means you aren’t maximizing your characters potential. If you have a problem with using cooldowns at all (i.e. playing your class to its best), then this guide isn’t for you. Generally, almost every fight against a skilled player in equal gear requires the use of CD’s for the rogue. Rogues that brag they don’t need CDs to win either completely outgear their opponents or simply fight stupid opponents. While I’m not saying you’ll use all of your CD’s in each fight, it is a fact of life as a rogue that we’ll be using our CD’s not just to overcome gear inequalities or higher quantities of opponents, but also to beat well-played classes with even comparable gear to yours. Using those CD’s and specific builds to their maximum efficiency is a concern though. This guide assumes you don’t have a problem using CDs. Hopefully, with the trains of thought presented, you’ll be in a position to tailor your playstyle and tactics to your particular opponent(s).

Lastly, this guide is more than just useful in the context of duels, it is useful for pretty much all PvP situations. Even if I only layed the groundwork in a 1v1 context, the contents of the guide are applicable to all PvP contexts. The fact is: you simply can’t be a good PvPer without being a good duelist. And, yes, I know, I know, it has long been the opinion of Blizzard and of many WoW players that “PvP is not based or balanced around 1v1 matchups”. This is a myth, and something fabricated by people too lazy to do the math. This concept just shows the incompetence of Blizzard devs and the masses that blindly accept the garbage fed to them. All encounters are based upon the 1v1 matchups. The very equation used to understand how and why people win in any encounter requires a clear analysis of all individuals’ offense/defense ratios in relation to their opponents’, specifically an evaluation of the 1v1 matchups, including the metagame that proceeds from the initial 1v1 rulesets. The following guide is an insight into the rogue classes 1v1 matchups directly, but it also demonstrates the required thought process to be an effective PvPer in any circumstance, including world PvP, group PvP, BG’s and arenas. To those who disagree, then I ask you to go no further. You need context to begin playing your rogue to his fullest potential, so please read these first:

Back to Basics:
http://www.hypercynic.com/?p=26

Slightly dated, it still remains true in many respects. Most importantly, the principles are fundamental to understanding MMO gaming. Luckily, the context is in regards to the rogue class itself. Here you’ll see the math behind why PvP –must- be balanced around 1v1.

Form of Gaming:
http://www.hypercynic.com/?p=8

A good starting place for those who need to know what a game really is in the first place, why players make decisions they do and how they make them. It is a defense of underlying claims made thus far.

Hopefully, these will give you some context as to why we must be concerned with our 1v1 matchups.

Moving on, for the dueling guide, I’ll be assuming 30/0/31 or 23/3/35. These specs are really made for 1v1 fights and expending a great deal of resources in a short deal of time to briefly bring our offense/defense ratios to a very high level. Assuming you are serious about dueling, or even PvP in general, you’ll want to consider these specs above all others…with that said, you can easily adapt the tactics to whatever your build may be using. I’ve seen plenty of rogues do fine in general play with mutilate or combat. But, without question, these are not dueling speccs, and they are hard pressed to be the most viable PvP speccs until we hit the very organized group PvP scene where sustained damage becomes a large factor.
30/0/31-Daggers

The premier dagger PvP spec, it is extremely well-rounded in a PvP context; think of it as the new 21/8/22. It has the highest burst damage in the game. MoSub + Serrated Blades + Imp Eviscerate for a Premed-Ambush (usually crit)-CB-Eviscerate means a rogue can nearly two shot a poorly-equipped player and puts serious pressure on all casters. While it can burst very well, it can also stunlock quite effectively. High crit rating abuses SF quite well. You’ll need an excellent MH dagger.

Feel free to pickup hemo on your way to 31 in sub. You can weaponswap (even during combat). I suggest this, as stunlocking is still best done with a sword (and it always will be). A rogue that isn’t weaponswapping really isn’t using this build to its fullest potential. Once you get used to it, it will be very easy for you.

Example Stunlocks:

Sword (or alike)= CS-H-G-KS-H-H
Dagger=CS-BS-KS-BS
Combination (using weaponswap)=CS-H-G-Swap to dagger-KS-BS-BS

Example Burst:

Premed-Ambush-CB-Evisc

With relentless and 4-piece assassination, you can probably BS at the very end of that burst most of the time.

This is a versatile spec with arguably the highest possible combo point generation available within a very short time frame. It can burst or stunlock, dagger or sword…it has options. You’ll miss imp gouge, but the SF gains are well worth it for those who can break 20% crit.
23/3/35-Hemo

Even with only 2.6 and 2.7 speed weapons available, this is still a viable spec. I remain convinced hemo is still the best dueling spec available. It has the most robust control, solid damage, and is guaranteed to have all the PvP sub talents (unlike dagger-sub specs). Stunlocking is not only viable, but necessary. Bursting down opponents in duels, with zero regard for control, has become a thing of the past. Burst DPS is still very important, but control has become more and more a central theme of rogue PvP and is the very center of the rogue duel (hemo has both burst and control). While dagger specs are extremely powerful, they do lack the ultimate control of a hemo build. And, as we see itemization scaling up yet again, hemo will become better and better. Where rogues can currently afford to not control a fight from start to finish, allowing gaps and what not, eventually non-linear classes that scale even better with gear than the rogue will become powerful enough that heavy CD’s and stronger control will become necessary. At any gear level, hemo has it where it counts for dueling. Excluding the mage matchup, where other builds fail in a duel, this one will win.

Beyond HP, concentration on AP and +hit is vital. Your crit rating, while important, means far less to you than making sure every special hits and that you can abuse the anormalized Hemo/GS hit. For Pete’s sake, be sure to macro GS/Hemo on the same key. Arguments about saving GS (in PvP) for the dodge is nearly irrelevant in all cases. You want the damage now, and you want 25% more damage than hemo for 5e whenever you can get it.

Example Stunlocks:

CS-GS-G-KS-H-H

From here you have 65e to use. Blind, gouge-Evisc, or Hemo are all acceptable in different situations. It is the second strongest no-CD stunlock. It is also quite adapatable, CS-H-H-KS or with 4x Assassination set CS-H-H-Eviscerate are good as well.

Example Burst:

Premed-CS-(check for 5 points, H/GS if it isn’t at 5)-CB-Evisc-H-

From here, you can gouge or hemo, and then follow with KS, blind, just follow through on the beatdown, or if you timed it well, gouge-restealth. Remember that the server checks OOC on each energy tick, and it takes 2 ticks before you can OOC, so gouging right before an energy tick (and you have 3 usually with imp gouge) can buy you a restealth before the end of gouge.

Combat Mace/Sword/Fist (huge variances 11+/31+/0+ requisite):

So far considered the highest potential damage per minute available. This sports some crazy good non-stealth based damage. What makes combat really viable in PvP beyond the sheer damage: imp kick, imp sprint, SA, BF, and AR. The loss of prep is combated (haha) by improvements to kick and sprint. In my opinion, mace rogues utilize this tree the best in PvP, as the best combat weapons available are hasted maces, and the stun proc is very relevant; even if the stun procs require adaptation, they can do some amazing things in PvP. Combat fists should not be overlooked either, it is consistent damage.

Learning howto create and identify situations in which it is most effective to blow AR/BF can be difficult to a newcomer, but otherwise this is a pretty straightfoward spec. While it might have less bells’n'whistles, its heavy sustained damage is a force to reckon with. Admittedly, this spec is not the best PvP spec overall, but it has become more viable in sustained damage fights (certain 5v5 arena fights, etc.). But, with the right gear (and you will need major gear to be using this spec in PvP), your rogue can turn into an outright monster on the field.

I really only recommend this build in PvP to those who are very, very well equipped and also with a team of people who can support you out of stealth. This really isn’t going to be a top dueling spec, but I certainly expect to see combat specs in 5v5 arenas.
Mutilate- 41/0/20 or 41/20/0 or 41/3/17

Be sure to have some nice and slow daggers!

Whether combat or sub, this is the most clear-cut build to play. When playing against poorly played and equipped players this is a very strong spec, and you can often kill people before the end of KS. But, as gear inflates, and the rogue loses his proportionate gear advantages as people move from green to blue to epic, this spec loses some viability in PvP, especially in consideration of the opportunity cost of not having a 30/0/31. It lacks control beyond the initial stunlock round, but it has, without question, the strongest single stunlock round in the game.

CS-Mut-KS-Mut (or CB-Mut)

This is standard, easy and powerful. Another problem this is with anti-poison targets/measures, alongside the issues of having high energy and poison investment which does not lend this build to switching targets as effectively as other builds, but it certainly puts up some impressive numbers regardless. In honesty, it is a build that is best fit for those who are:

1.) Doing 3v3 and 5v5 arena
2.) Aren’t speccing to PvP/duel exclusively, and prefer to have a spec that does well in both PvE and PvP.
3.) or even simply newer to the rogue class (or if not new, simply not very skilled)—this is an easier spec to play as it has much fewer choices to make.

Generally, if you are a very serious dagger PvP rogue, stick to 30/0/31 (the only exception would be for 5v5 arena). This is a build that I consider more viable for dueling purposes than pure combat, but is still strictly worse than a 23+/0+/23+ CB/Prep build.
Warrior-

The class everyone is trying to beat. All classes are crafted as a response to this one. Pound for pound, nobody can truly toe-to-toe with a warrior. It has long been the case that a rogue cannot stand up and trade hits with a warrior. Sure, you can evasion and rush down to some extent (combat spec does best at this), but even then, a warrior played correctly will still beat you if all you did was toe-to-toe. Everyone must control the PvP-specced warrior in some fashion, including the rogue (regardless of build).

A PvP-specced warrior will be MS + a minor in Fury to pickup Deathwish and Imp Intercept. They are a force to reckon with. They have high rage generation (even after normalization), outlets to spend it, tools to prevent kiting, and they will continue to progress in power as they effectively scale with the inflating itemization. Personally, I have found that I have less and less room for error against this class. This is the fight of patience and finesse–Going kamikaze will get you killed.

Even as mitigation levels have dropped across the board after the expansion (due to itemization and leveling), you will still be hindered by their massive hp/armor defenses. Because of their defenses, in a duel, a rogue should initially be using DoT abilities (wisely) to atleast let them open on a warrior with 60% health instead of 100%. You will use a combination of DoT-kiting and stunlock to beat any warrior that is geared, specced, and played correctly.

Your initial open should not be CS. We used to stunlock, build 5-combo points and 5-8 kite–you know, the old unload while stunned and deadzone kite otherwise. Sometimes we could deadzone kite for a restealth (shout keeps us in combat, and they certainly know to do this), but mostly we’d 5-8 to get our energy back up and unload on a KS from behind (as we jump through them). Even if the tactic still retains some use even now, the old 5-8 days are generally over against a skilled warrior. They will always get the intercept. If you play against a pro, be prepared to reap the whirlwind (haha) if you do nothing but 5-8 kite…this is NOT a zero-CD fight against a good warrior. But, sometimes your options are limited, by all means use the 5-8 tactic when applicable and necessary, and do remember to stay closer to 5 than to 8.

Lastly, the introduction of the second wind talent makes long-term stunlocking less appealing, as both health and rage generation can be extremely dangerous. When we are stunlocking a warrior, we need to win quickly. The more stuns we land, the more rage+health a warrior will gain over the course of a fight. As in many matchups, the longer the actual combat duration, the more likely our opponent, the warrior in this case, is going to win. Chain stunning just gives them juice. You cannot accept this. Your objective is to build up resources to a high threshold through a few pre-combat tactics and DoT-Kiting, without the warrior gaining hp or rage advantages, and then unloading all at once inside a single stunlock round.
Step 1–Poison of Choice

It goes without saying (but I will anyway), Crippling Poison is required. Gouge, sap, and blind are too important to dare use deadly poison. Some who wish to risk it may try 1x Instant + 1x Crippling on either hand (as you can shiv). But, usually it is best to just keep them snared at all times, even at the sacrifice of some damage (control is everything).

Step 2–Generating pre-open combo points, the “combo point kite”.

Remember that this is a duel. Your opponent already has a huge advantage in simply knowing that you are there–thus, our stealthy element of surprise, a distinctive advantage we have in most world PvP situations, is gone. But, that doesn’t mean we can’t use stealth to its fullest advantage, even in the warrior fight. I am of the belief that you should take advantage of everything in your arsenal in a duel, even if it seems “cheap” to an opponent. That means I do use psychological warfare, for example I might wait 15 seconds before opening just to frustrate my opponent, and it also means I use tactics that might be less-than-useful outside of a dueling context. One advantage that we don’t use enough is the ability to sap/CS. Sure it is cheap, but c’mon people, that is why they call it “Cheapshot”, this is part of the class. So, if you are serious about winning duels against the best, expect to use pre-combat tactics to generate small advantages in your favor, especially as you’ve already sacrificed your element of surprise. When you and some warrior are the last people standing in an arena match, you’ll be thinking the same thing.

Your opener is a cheap way to gain a small advantage that can make a big difference in the end. On every warrior you ever duel, you should open with Imp sap and attempt to CS through sap. Do it carefully of course! I don’t care if you have premed, if you have Imp sap, you should always at least try it once against a warrior. The majority of warriors in this game will not berserker rage out of sap, primarily because they are saving it for gouge. Some will be slick by zerker raging and will try to shout you out, but if you are good, you’ll be far enough away that it won’t matter. Just run in for the sap, and run out quickly. See how the warrior reacts (he is your specimen to dissect while you are in stealth). If the warrior BR’s (berserker rage) out of sap, then stay far enough away and watch your castbar. After BR and sap-DR (diminishing return) is up, go for it again while his BR is on CD. Eventually, you should get your initial points, and these DO matter (as well as to annoy and/or psych your opponent out). So, get your sap/CS (remember to CS without breaking sap!), and flat run away. Go for your restealth (camo helps if you have it).

If this takes too long for you, or you have a build without Imp sap, then you can also forget the sap and just CS and run (but beware a warrior that is going to trinket CS and intercept you). Minor run speed helps here, just make sure you CS at max range and immediately start running, you can get your restealth, and it is worth every penny. Just remember to save yourself room so you don’t stray to far away from the flag.

For those who will not be sap/CSing, then just premed right here. No, it isn’t as effective, and yes, after your upcoming vanish you may wish you had that premed to burn for your real open. But, in some cases, for example due to time constraints, premed can be the best option. If you don’t wish to sap/CS for some reason, then premed is definitely a solid replacement.

Step 3–The DoT Kite.

You should be starting this fight at 2-5 combo points (depending on your build and how many times you sap/CSed). What do you do now? You want to garrote+rupture and get back into stealth asap; let that sucka’ bleed while you wait to go in for the kill. To start, make sure the warrior has no rage, sprint in from behind, and start spamming garrote, which should put you have 5 points, immediately rupture, run off and vanish (throw in a shiv if possible, but not at the cost of getting bled). Be quick about it! You really don’t want to eat a bleed effect, use a Luffa if you need. In fact, you may even want to use a macro that spams garrote in stealth and rupture out of stealth. Be sure to be out of range of shout as well.

A Garrote + 5-point Rupture (especially with talents) will bring most warriors to 60-65% by the end of those DoTs (especially with Berserker stance). Your job, during the DoT kite is to prevent the turtle. A good warrior will attempt to regain that health back. This happens through eating and/or bandaging during and after DoT effects, also through limiting damage taken by going into defensive stance. Crippling poison does an excellent job of preventing them from escaping to fully turtle, so use your your remaining sprint wisely. At no time should you allow them to eat/bandage or mount up (as they’ll run away to eat/bandage). If you wish, and you want to end it quickly, as you can even help prevent spirit regeneration from going OOC, you can vanish, wait a moment and goto the next phase of this fight without waiting the full duration of the DoT’s.

Step 4–The Stunlock: rushdown, busting the trinket, and abusing his stances.

The stunlock can vary on the stance of the warrior. Stance dancing is a part of life as a warrior, and it calls for adjustments in our playstyle as well. The most important part of the stunlock is this: it should not last long. You are opening on a warrior with 60-65% health, a bit of rage, who dearly wants to heal up before you open. You don’t want to give them a chance to heal, nor do you want them to in anyway benefit from the use of a trinket or second wind. Make it short and sweet.

Defensive– They mean to tank you (and yes, they can with major gear). Eviscerate is acceptable depending on the warrior’s gear, but KS is a much stronger route. Go heavy stunlock. Gouge is a very potent tool in this circumstance as well, so use it wisely. Watch for disarm. Remember they can’t charge or intercept, so kiting can be easy here, just watch for the stance dance.

If the warrior is in defensive stance, then you’ll want to try (if possible) to wait for the very end of the DoTs before you reopen so that you can use gouge effectively. Gouge is a powerful tool, and it punishes non-zerker stances. It can give you a restealth, energy, a combo point, positioning, time to wear-off bleeds/MS effects/hamstring, and even a quick bandage.

Dealing with the PvP trinket can be a pain (some don’t wear it, but they certainly should). You really want the defensive warrior to trinket on CS so you can follow up with KS. But, assuming he is a good warrior, he will save that trinket for KS. Follow up with a gouge on his trinket or blind him, and go for your restealth. Do not lose control of this fight. Get your restealth, and he loses right here…restealthing against the tank warriors is imperitive. 5-8 kiting into a restealth is common right here.

Berserker–The most common stance I find a warrior at this stage of the fight. While you can’t effectively gouge, he takes a truck-load of damage–Rush him down within a stunlock. Post-DoT-kite, I often Premed-CS-CB-Evisc-GS to 10-30% and Evasion tank him down. But, do remember: If he isn’t stunned, and you are in melee range, then you should have evasion on. The trinket doesn’t matter much here. The majority of your damage has already been dealt via DoT’s+CB-eviscerate, so it looks more like a 10-30% warrior vs 100% rogue…Of course, use your stunlock component’s wisely, there is no reason to eat a 2.5k MS if you can just pin him down. Standard stunlocks, minus gouge, are perfectly acceptable. If the warrior BR’s early, then KS, unload and gouge out for a restealth. Blind is always up if it gets ugly.

Battle–He aims to bleed and overpower you down, but he makes himself vulnerable to a rushdown AND gouge. I rarely see warriors jump into this stance at this point in the fight, but I punish them with both a rushdown and gouge. Easy restealth, 2nd real open…he won’t come back.

In any case, know the stance your warrior is in, and be ready to fight differently according to each stance.

Tips:

a.) Intimidating shout–Trinket/WotF this immediately. You should be fully ready to trinket on Intim-shout at all times.

b.) Keep evasion up at all times against warriors not controlled by your stuns/incapacitate/disorient or stealth effects (yes, stealth is a form of control). It kills their rage generation, negates the majority of their damage, sometimes forces a stance dance, begs their intimidating shout, and serves as a gateway to other control functions of a rogue. Evasion gives you a brief window in which your offense/defense ratio is equivalent to theirs, use it wisely and often.

c.) When in doubt, blind. Even if you feel like it is “too early” in the fight. This is your ‘oh shit!’ key. Against dwarves, if they refuse to stoneform out of your crippling, then you are SoLuck (although it buys you a second or two, which CAN matter).

d.) Prepare yourself for trinkets and stun resists. Gouge, KS, Vanish, Blind, Evasion, Bugging the intercept, and 5-8 kiting can all be appropriate responses. Even sprinting away after being newly intercepted but not Hamstringed can be powerful. Every warrior will have stun resist, not all will have trinket at the ready.

e.) Watch your timers judiciously. If you saw them misstep by popping BR too early, and you see a gap to use it, then capitalize off it.

f.) Watch for last stand and life giving type abilities as usual, especially in arenas. This is the instant turtle, and the gap that many rogues aren’t prepared for. It counteracts a rogue going “all-out”, and punishes us for sacrificing future resources just to get the win “now”. In my opinion, you really want to outlast these effects rather than DPS through them. But, at no time can you afford for the warrior to heal or turtle. Roll with the punches on this one.

g.) Bugging the intercept. Basically, if you circle-strafe a warrior who is crippled poisoned, when they intercept, it will often send them in the wrong direction. The intercept stun will wear off, and you will get a restealth.

Summary:

1.) sap/CS (or premed)
2.) Sprint-Garrote-(Shiv if possible, and if necessary for 5th point)-Rupture-Vanish
3.) Prevent turtle
4.) Open appropriately on stance, generally premed-CS-CB-Evisc-Evasion
5.) Restealth when possible and if necessary.

Overall, this fight is one of finesse. You build up your resources and overtake them in a fell swoop. In a fair fight, a rogue should be winning this matchup the majority of the time.

Paladin-

The ultimate turtle, both in solo and grouping. While they can be defeated solo, they are without question the best counter to a rogue in group PvP. They (or their teammate of choosing) simply cannot be “rushed” down in the same way that any other class in the game can. Given time, we can certainly win this fight even against the best paladins. The drop in mitigation levels, changes in speccs and itemization, and a few rogue changes have made this class much easier to deal with.

Paladins will be aiming to outlast you in some sense. How long they wish to turtle is dependant upon their build. Some builds deal way more damage than others, and will often rush you down and use very minor turtles to beat you, for example a ret pally might use his HoJ to be dealing some damage to you rather than using it entirely for healing. On the flip side, holy paladins lack damage but have excellent healing. They are more apt to use HoJ to heal up and to play the outlast game against you. Overall though, this class has become much easier for the basic rogue, and thus far, the matchup is less gear reliant on the rogue’s end than it used to be.

Like the druid, this class has very high turtle-potential, a potential that most pallies you’ll meet simple won’t reach. The general abilities we should be considering:

Hammer of Justice- 6 second stun, 1 minute cooldown. It provides ample tempo advantages every minute to a skilled paladin. A combination of heals and damage can be used during an HoJ. It can also be the creation or elimination of a kite. Silence effects, stuns and CoS provide temporary prevention of this spell, however, good paladins anticipate and work around our counters. It is one of the strongest spells in the game as fast as I’m concerned. While paladins can no longer heal to full in a single heal, HoJ gives them longevity. Most paladins fail to burn this CD every time it comes up….

The Bubbles—Absolute immunity from a rogue’s damage, what a strong counter to our class in so many situations! Combined with healing, these bubbles are generally the core turtle-engine of the paladin. HoJ and repentance are good, but they simply don’t compare to the absolutist impact of true immunity. A paladin can bubble through everything in a rogue’s arsenal. There are two bubbles:

Divine Shield-12 seconds of immunity. 5-min CD. Nothing you can do.
Blessing of Protection-10 seconds immunity from physical damage, 5 minute CD. This can be blinded (pray he isn’t a dwarf with half a brain).

BoP can be countered with a blind, but stoneform counters it. Bubbles give a rogue the time to restealth and/or heal up. Sprint, bandage, restealth, sap, eat or some combination thereof can get your health back up. Even just flat running off to bandage-restealth can be fine. Match his healing with your own. This is a war of attrition folks. Do notice that all bubbles have 5-min CD’s, and that they have the “Forbearance” debuff applied to them, which lasts for one minute, preventing them from bubbling again. Good paladins have the means to live another minute beyond their first bubble when played correctly, so expect at least 2 bubbles in a fight.

Laying of Hands- 100% of paladins health + 900mana restored, 60 minute cooldown. When a paladin goes all out, this just makes them all the harder to defeat. A dominant spell.

Repentance—A 6 second incapacitate (like gouge, only sexier and ranged) with a 1 minute CD. 31-point ret talent.

Blessing of Freedom—Immunity from movement impairing effects

Consecration-Point blank AE around paladin. Rank 1 is spammed every 8 seconds. A mod to show the ticks would be nice if anyone wants to make one. It can deny a rogue open. If you are that worried, then just CoS through it.

The proper rotation of these abilities can make life rough for a rogue. It is really not simple to defeat a paladin that uses their abilities to turtle to a maximum extent, although you’ll rarely meet paladins that really play perfectly. Most of the time they won’t be too difficult for you to defeat. You’ll break the initial turtle and win on the spot or drain his mana through tit-for-tat measures, and he’ll lose the game. Wound poison puts huge pressure on their mana and CD’s as they are unable to heal as effectively. Less healing means they have will have to blow more CDs to cast more wounded heals. More heals used means more mana burned. This is good as it eliminates the long term use of HoJ, Repentance, Bubbles, and spirit regen to overcome us.

Speccs you’ll face:

Retadin (approx: 44 ret / 17 holy)—Damage specced, Often noobs (no offense). Big numbers. They’ll often go rushdown on you, and with enough gear, they can make it hurt. While they can deal good damage, these guys also take a lot of damage. Survive their initial assault and you’ll come back on them. At maximal gear levels, ret pallies will be our hardest matchup.

Holy (approx: 47 holy / 14 prot)—Healing specced. A great turtle; crap for damage though. Run his mana dry and you win.

Protection (approx:13 Holy / 41 Prot / 7 Ret)—Not a terrible spec. Heavy damage shields, and those DO add up (sit and parse it if you don’t believe me). Decent damage.

Differences in the builds can change the fight slightly, but the same tactic will remain the same. Force his CD’s as early as possible, heal up if necessary, and kill him before he can CD into another turtle-round. Paladins won’t be healing us to death for now, and they have, at equal gear, great difficulty in taking out even 50%+ of our health in a single HoJ. Paladin healing, damage, and mitigation are proportionally much lower in TBC (this is due to low end itemization at this point).

Step 1—The open, forcing the bubble early within a softlock.

Wound MH, Crippling OH. Shiv when you need to kite. Watch his Consecration spamming. You might even catch him off it for a sap/CS (yeah, he can break with a bubble…but that would be awesome!).

Premed and charge in for the open, n52 spamming is excellent for spamming the open through consecration. For this fight, control only matters in eliminating the paladin’s ability to turtle, you don’t care so much about his offensive abilities, with the exception of HoJ/Repentance. The virtual tempo advantages of Cheapshot aren’t as useful here because we aren’t concerned with a paladin’s damage as much as we are concerned with simply forcing a bubble. With that in mind, garrote is simply a better open on a paladin. It silences for 3 seconds and deals some damage in itself as opposed to “allowing” us to damage to paladin within the protective hedge of a stun. A silence will be almost as effective as a stun in this portion of the fight, and coupled with garrote’s cheaper cost and damage it is the better choice.

If you can catch him off consecration spam, or you want to CoS through consec, you can generate precombat points generated through sap/CS, it should look something like this:

Sap/CS-wait for DR-Garrote-Rupture or CB-Evisc-CoS-Yellow

If you don’t go for precombat points, then use:

Premed-Garrote-Yellow-Rupture or CB-Evisc-CoS

The whole point of the opener is to setup for a lethal rushdown while minimizing the effectiveness of non-bubble abilities. Keeping him silenced and CoSing eliminate the utility of HoJ/Rep. Remember to connect Garrote-CoS, there can be no lapse. Most pallies will be spamming HoJ right off the bat, so avoiding it means you can put heavy pressure on them to force a bubble because they can’t HoJ/Rep for a heal.

It is worth considering the use of CB-eviscerate instead of rupture. Against a large portion of the paladin population, CB-Eviscerate will down them to 40% so quickly that they’ll be in dire need of a bubble. On the flip side, cold blood offers an excellent tool to combo out within a stunlock. If for some reason they get low on health, CB can let you beat them right there. This is up to you, both rupture and eviscerate are good options.

In any case, you want to deal major damage and apply 5 wound poison within the first 8 seconds.

Step 2—Forcing the Bubble

CoS is ending, at what health do you find your paladin? Did he bubble? Does he have his PvP trinket active? These are all factors in your decisions. In the best case scenario, you dropped him to low enough health in the 8 second of garrote+CoS that he bubbled. If he bubbled, then just run off for a restealth as he is healing up. If he is low on health, a vanish-CS-Finisher can finish him. If you didn’t get too far on his health, and you don’t want to vanish-CS-Finish, then you might be forced to just eat his HoJ. Generally, it is best to vanish-CS. Why? Vanish-CS furthers your softlock on the paladin by another 4-15 seconds (depending on what you do after the CS), and it provides even more pressure to force a bubble. You really don’t want to eat an early HoJ if you can help it. At the very least, vanish offers us a way to burn his trinket while forcing just a bit more damage through. You go vanish-CS-KS or vanish-premed-CS into CB-Evisc or KS, and continue that pressure.

Against a top pally who is blowing a trinket into a HoJ (you’ll get hit no matter what you do):

CoS-Sap-CS-wait for CoS timer-Garrote-Rupture-Yellow-CoS-Yellow-Yellow-Vanish-CS-CB-Evisc

This is 9-12 seconds of white + 3 yellow + 5 wound poison + Garrote + 5 pt Rupture + 5 pt CB Evisc, which is a serious open on any paladin. I’ve yet to meet one that didn’t need to bubble out of this. Even after you open, consecration shouldn’t be problematic as CoS-Vanish-CS will let you resist, which will no longer bring you out of stealth. This assumes he’ll blow trinket->HoJ on CS. If not, then you can work him down with KS if you know there isn’t a trinket for it.

Post Garrote, you want to do everything in your power to force a bubble without eating a hammer and apply 5x wound poison. Forcing a bubble means you get to runoff and restealth while he heals up (with wound on him), and more importantly, it means you have almost a minute to kill him before his second bubble. At the very least, you are drawing out his resources, forcing reactive play and inefficiency on his part, allowing you to control the situation. You overcome his CD-Turtle and you win.

Step 3—Continued Anti-Turtle, Attempting to win before the 2nd bubble.

You forced his bubble, you should be at decent health (bandage if necessary). You’ve got a minute to defeat him before the next bubble. You’ll defeat most pallies right here. Garrote or CS is perfectly acceptable, and if he isn’t a dwarf, then blind is extremely potent as well. If you haven’t used premed due to precombat point generation, then now isn’t a bad time to use it. You are hoping your second open is what defeats the paladin before he can bubble again.

Unfortunately, CoS and vanish were used up early to force a bubble (but it was worth it), and if CoS didn’t eat it already, you’re likely to eat a HoJ/rep. You can’t really do much about it other than stack wound poison. Any healing he gets off from this point on will be greatly diminished through wound poison, but you really don’t want him healing period. As usual, interrupt all heals when applicable. You’ve got a full minute to work him down, each heal puts him closer and close to surviving to the next bubble. Additionally, evasion is quite useful right here.

It is at this stage that you need to be careful around the very well equipped ret pallies. They can power through some substantial damage. They have compressed turtle fights. This is good and bad in some ways. The good part is that we can force the ret pally to bubble much earlier because they are not specced or geared for survivability. You are much more likely to have CD’s left after opening and forcing a bubble on a ret pally. Additionally, you’ll meet many retardins that spam HoJ directly into CoS (even though they saw you use it…lol) simply because they think they are going to burst you down. Countless retpallies will blow HoJ and sometimes even repentance during CoS, they’ll realize it too late, they are forced to bubble, and the rogue gets to reopen on a pally that has zero turtle capability for straight minute. That is the best case scenario, one that happens often enough, and allows the rogue to truly capitalize off the paladins mistakes. On the other hand, a very well equipped ret pally will still be breaking 60% mitigation with some nearly lethal HoJ/Rep rushdowns, and if played correctly, i.e. not HoJ/Rep when you CoSed, then your sure to eat it after your second open. Unfortunately, this is a case where you really must have the damage to force bubbles, but also the defensive stats to live through his assault. It is here that your gear will matter most in the pally matchup. Post bubble, having not blown HoJ/Rep, the well-geared/played retadin is the most difficult paladin to defeat for a rogue.

Holy and Protection specs are much easier at this point. Depending on whether they burned their HoJ during your CoS or not, you are just running them down. Garrote is preferable here because the mitigation levels are high enough that you simply want to win before the minute is up, and you really aren’t concerned about his damage. Premed-Garrote-Yellow-Rupture and rush him down. Keep 25e up at all times, you need to kick all heals and be sure wound is stacked to 5x as usual. Most pallies will be holy/prot specced, and that makes the fight relatively easier in general.

Pretty much every CD and attack is at least useful in this matchup. Deadly throw is good damage and interruption. Shiv is great for getting that crippling to stick. Our anti-caster and anti-melee tactics are all excellent. In any case, sometimes you lose control of this fight. Bandaging can be invaluable. For the long, long fights, as often found in the case when the paladin outgears you, you’ll be needing to bandage/eat. Play the out-last game, business as usual against turtles.

Tips:

a.) Dwarven folk are your bane. Blind can be very valuable in this match, and a good dwarf will BoP->Stoneform->Heal to eliminate blind’s utility. Not much you can do. Try and lure his Stoneform on a kite if you want, it probably won’t work (BoFreedom is always available). You are quite likely to play the out-last game against a well-played and equipped dwarf pally.

b.) This is a rare fight that can be done no-CD for many rogues. Our CD’s simply make us more likely to win, and help us win faster. If winning matters, then go all out.

c.) CoS and Blind (w/elus) are on pretty short timers. It is quite possible to use them twice in a fight.

Summary:

1.) (CoS)-Sap-CS-(wait for CoS timer)-Garrote-Rupture-Yellow-CoS-Yellow-Yellow-Vanish-CS-CB-Evisc (or whatever it takes to force bubble)
2.) Restealth
3.) Premed-Open-Evasion-interrupt heals while rushing them down.
4.) If they turtle through it, then play outlast and/or prep.

The paladin fight has become much easier for rogues. I suspect that as gear inflates, this class ill become harder and harder for us. In the meantime, you should be winning against most pallies unless they are very well equipped.

Shaman-

A shaman can pull out some amazing clutch damage and healing. The can do a mixture of kiting, utility-DD, melee, healing–somewhat a jack-of-all-trades. What really defines the matchup for a rogue are the cues that you’ll see throughout the fight that tell us the intended tactic of the shaman, of course these do vary per spec and situation. Will you be preventing the kite, turtling their damage, or cracking their turtle?

There are three trees and three different directions you’ll see this class going. Each tree lends itself towards a certain tactic, but all three are capable of kiting, toe-toe-toe’ing, and turtling to some extent.

1.) Elemental–strong DD damage, they aim to kite. Expect to see these guys splash for other trees, usually resto. They will attempt to permanently kite you throughout the fight.

2.) Enhancement–They can finally dual wield. Stormstrike is also quite powerful. This is arguably their highest damage spec, but it is melee heavy. They will toe-toe-toe, so evasion is excellent here.

3.) Resto–by far our hardest shaman matchup. They turtle very effectively. Wound poison and kick are your friend. A resto shaman will do some kiting and some toe-to-toe, but generally will prefer to keep their distance. Fire totems are especially deadly here, as the fight can be quite lengthy.

Generally, you know you are fighting at least a decent shaman when you see three things: a.) Poison cleansing totem and b.) a shield and c.) a PvP trinket (you’d be surprised how many no longer wear these because of a lack of stats). A shaman will do a combination of kiting and toe-to-toe depending on their situation at hand. You need to recognize which they are attempting to do and counter it. Blowing CDs at inappropriate times is a waste of valuable resources, so anticipating and reading the situation can be vital.

Step 1–Poisons

Crippling must be either MH or OH, I prefer it OH in this fight. The reason is that they will be dispelling your poison throughout the fight, and you’ll be shivving in response. Your MH poison should be wound. Eliminating the effectiveness of their healing dampens their future action trees greatly. You want to sustain a stack of 5 wound poison at all times as a shaman can get some quick heals off, and if they get any off, you want to make sure it isn’t for alot.

Step 2—Totems, How will you Open?

Totem Lineup should look something like: Earthbind, Magma/Searing, Poison Cleansing, Grace. A good shaman will keep the poison cleansing totem far away from them, making it a sacrifice for the rogue to take it out, and will be sitting on their fire totem (usually magma).

The totems you should be concerned with:

Earthbind=AoE snare. It has a CD to cast, so use that to your advantage. Beware of newly casted EB totems, the first tick WILL bring you out of stealth.

Magma=Excellent at denying the rogue an open, a shaman’s flare/trap camp equivalent. It pulses an AoE. Watch the timing of it, you’ll see it flicker. You can run in between those pulses and get your open. Lag or lack of time available can make this much more difficult, a good shaman will know this and use it to his advantage. CoS is a preventive measure.

Poison Cleansing totem=It periodically removes a poison effect on the shaman (and his team members). This removes our weapon-applied poisons but also our blind. Our poisons are quite essential; leaving PCtotem up is a major sacrifice for us.

You can choose to ignore the totems, kill the totems, or a combination. I suggest doing one of the latter two choices, particularly in order to remove poison cleansing. The common method is to sap the shaman and squish the totems, restealth before the end of sap, and go in for the kill. You can also remove the poison cleansing totem, if it is very close, during CS, gouge or KS.

If you ignore the totems, it is a sign that you intend to win very quickly, and that you don’t need blind. It could also be the case that you have timers on the totems, specifically PCTotem, and that you are opening at the very end of its duration (giving a window to blind if PC is not recast). If the shaman is not resto, a rushdown is acceptable, as long as you maintain control of the situation (i.e. prevent kiting, keep evasion on when appropriate, prevent all heals). Ignoring totems is quite viable if the shaman doesn’t have all the right totems down yet as well or he runs out of range. If you go this route, then premed-CS-CB-Evisc and follow through on a stunlock, just stay on them like glue. But, if they are a pro, you really can’t afford to do this as the totem advantage is very large.

You may also sap/CS the shaman, restealth and wait for DR, sap/totem squash, restealth and then re-open on a target you’ve already built combo points on. Remember that rogues now keep combo points on a target (even if untargeted) as long they do not generate combo points on another target. Sap/CSing and running away for a restealth is difficult to pull off on a shaman, as fire totems and EB make getting the restealth more complicated. For this reason, it is quite acceptable to do either.

Step 3–The Stunlock

Your shaman should have no poison cleansing totem up at this point, maybe even all relevant totems are gone. It is also possible that you’ve sap/CSed into pre-combat combo points, but I’ll outline the fight without those. I expect that gouge is on DR at this point, so watch your timers, and try and save the use of gouge for when it isn’t on DR or for trinket. If you are totem squashing during CS/Gouge/KS (generally gouge), then be quick.

Premed and open with CS on all shaman. Control is most important. Go through your normal stunlock routine, while accounting for diminishing returns. You should consider saving gouge, as it is very useful in preventing the kite on a trinket. Be sure to shiv if crippling doesn’t apply naturally. In some cases, especially non-resto shamans, rushing down from here is quite acceptable. Premed-CS-CB-Evisc brings them to 50-70%. From here, a shaman that has no PCleansing totem up and chooses not to trinket out of the initial stunlock has already lost the fight.

Generally, a good shaman will trinket on CS or KS, and I see arguments for both. In either case, watch for the trinket. If the rogue is not quick in responding to a trinket, you should see the following things occur in this order:

1.) Poison cleansing totem is cast
2.) A Shock hits you
3.) SStrike or NS when applicable.

The rogue wishes to prevent a successful trinket. If the rogue is not successful in responding to the trinket, then he has yet another PCTotem to take out and the possibility of being kited or DPSed down. Expect frostshock. The best response to a trinket is a gouge or a KS if available. If and when you don’t get a gouge on the trinket, then CoS/Sprint/Evasion/Vanish/Blind (as long as PCtotem isn’t up) are all viable counters. CoS is especially good at the end of a stunlock, and pretty good on a trinket, as it will often eat the initial shock, preventing the kite in large part.

Here is where I’ll break up the fight, we’ll go from easiest situation to hardest.

Step 4–Toe-to-Toe

Usually only an unskilled shaman will use this tactic exclusively. Enhancement shaman who are used to 3-4 shotting people (and it does happen from time to time) are quite prone to toe-to-toe, especially as their spec is designed for it. Generally, this means they will be attempting to burst you down and will rarely be healing. They’ll melee+shock you to death.

At any stage a shaman wishes to toe-to-toe with you, you should pop evasion. A SUBSTANTIAL portion of a shaman’s damage comes from melee. This is especially true for enhancement shaman. Evasion will shut them down cold. Keep your face to them, and stick on them like glue. Anticipating a shock with CoS is also quite helpful. By the end of evasion, the shaman should be in trouble and CS should be off DR. Just vanish-CS into him and he loses.

Step 5–The Kite

You really prefer to have shiv’ed the shaman and kept them toe-to-toe, but a good shaman just won’t have it. Somehow, they’ve managed to escape your grasp. They will attempt to snare you through frostshock and EBtotem rotation (attempting to avoid DR and work around cooldowns). Easy damage for them and opportunities to heal up. This tactic wins matches, and if left uncountered is a loss for the rogue.

Deadly Throw, Sprint, CoS, and Vanish should be used to close the gap between you and that shaman (basically, use anything you have to catch them). Sprint is the most powerful in closing the gap, and should be saved for this portion of the fight (don’t use it during the open, use it when you actually need it).

1.) CoS (F-shock/EB)-> Sprint

2.) Vanish (F-shock/EB tick)->Sprint

3.) Deadly Throw is excellent (requires combo points though). It is pretty decent damage, and if the shaman is very low on life, feel free to CB Deadly Throw them. The snare effect is quite powerful, and with PvP Gloves it becomes downright amazing (yay, our own little earthshock).

I truly suggest CoS-Sprinting. Nothing will stop you from closing the gap, and you saved your precious vanish(-CS) and combo points for later in the fight. Generally, I want to sprint up and either gouge, kick or KS them in the face. Preventing heals is vital, so if you can’t get up to them in time, then you need to deadly-throw or blind.

From here, you are going back to step 4ish. You WANT to toe-to-toe with them. Keep them stunlocked when you can, and keep your energy available for a kick at all times.

Step 6–The turtle

While elemental and enhancement are easily defeated by the steps 4 and 5, the resto shaman is a different beast. You can’t “rush” a resto shaman down as a rogue. Properly geared, a rogue (w/o poison) cannot outdamage their healing. Their earth shield effect has 10 charges on each cast (which scales with +spell gear to some extent), and combined with any quick heals and NS, the resto shaman is going to be staying at high health for an extended duration. Luckily for us, the resto shaman deals relatively little damage compared to the other trees. The turtle can be similar to toe-toe-toe and is the tactic a resto shaman uses almost exclusively, but is also used when a rogue has closed the gap at the end of a kite on a low-health shaman of any spec.

Here is where wound poison shines SO much. Keep those PC totems smashed and keep them wounded. Cutting their healing in half means you’ll be cracking the turtle while taking less damage. This is a war of attrition, and you’re going to be eating their hits (and you’re gonna like it too mister), conserving energy and abilities with one purpose in mind: interrupting and preventing all heals.

At no point should your energy drop below 30, and preferably not below 45. You’ll need available energy to prevent and interrupt heals (shaman are pretty fast cast). A combination of kicks, KSes, vanish-CSes, blinds (yeah, that is plural, I’ve had fights last long enough that I’ve used 2 in a fight), and gouges to interrupt those heals. Gouge and blind are particularly useful for giving you a window to bandage yourself. Don’t be afraid to gouge->bandage. The war of attrition will lead to one of three things:

1.) Catching the shaman with his pants down having no Earthshield while being at 40% health with no poison cleansing totem. Just blind right here and you win.

2.) Running out of mana.

3.) And, sometimes, dealing lethal even through earthshield, usually due to perfect spell interrupts, wound eating heals and even his NS, and quite often because it was a poorly played or geared resto shaman.

Running a resto shaman out of mana is a common practice in arena as well. You can always go for the gouge-restealth-get to safe place and bandage just to re-open on a shaman with far less mana (assuming he has no summoned food or drink). You’ll outpace his mana regeneration by a long shot, and, for long enough fights will give you CD’s back. But, generally, in regular duels, you never want to give them an opportunity to eat/drink. Most likely, if you ran them out of mana, you were diligent in gouge/blind/sap->bandaging.

And, as stated, sometimes you be so lethal from interrupting the big heals that NS and Earthshield are simply speedbumps to the finale. Good for you!

In any case, if they are turtling, then they aren’t dealing really lethal damage at the same time. Proper heal prevention and bandaging will crack a turtle.

Tips–

a.) You CAN effectively blind through PCleansing. Luck might be required to some extent. The cleansing effect is periodic. So, it is common to blind a shaman and quickly kill his totem before he is cleansed.

b.) For extremely long fights, it is quite acceptable to simply reset it by gouge-restealthing, running off to bandage up and coming back again to fight. This is especially common in arenas, against resto shaman, and when you’ve made one or more large play errors.

c.) Consider taking out fire totems, as this eliminates another good portion of their damage.

d.) Never drop below 30% health, as a shaman can one-shot you in this health range.

e.) While EA is good, it is not optimal. Expose armor is generally not worth the point expenditures in this matchup. CB-Eviscerates, KSes, and deadly throws are simply better finishers for this matchup. If you are very skilled, sap/CSing into a sap/EA/killing the 2-3 relevant totems/restealthing/opening is a possibility. You need to be pretty awesome to pull this off though, getting OOC/restealth before the end of sap in this lineup is difficult.

f.) Gouge those who don’t jumpshot kite and just walk backwards (retards).

g.) Note that wolf form prevents sapping. But, he can’t cast totems inside ghost form.

Summary:

1.) sap/squash relevant totems/restealth
2.) Stunlock
3.) Prevent kite and interrupt all heal
4.) Bandage as necessary

This is a fight a rogue should be winning, we simply have too many tools to prevent or eliminate shaman’ strategies.

Hunter-

This used to be a matchup I loved when they didn’t know I was there, and one of the worst matchups if they were prepared for me and played correctly. Flare/Trap/Track Stealth camping nearly counters a core function, possibly an entire tree, of the rogue class. Geared and played correctly, I always felt a hunter should win more times than not in this matchup (having played both and written PvP/Duel guides for both, that was still true until late 2006). However, as we closed in upon TBC, we saw a few meaningful buffs to the rogue that gave us a much better chance against the hunter, putting the fight in our favor.

1.) Cloak of Shadows removes everything, can help eat traps and also gives us the opportunity to get rid of that awful Serpent Sting. When trapped, a good hunter will open with AS-SSting, and as vanish has been bugged for a long time (and always will be, *sigh –”working as intended”), SSting will stick even through a spammed vanish–no rogue could effectively restealth or escape. We could sprint up and vanish into his face, and we had a brief gap between DoT ticks to get an open…but we could never reset the fight. CoS lets us reset the fight, often on our terms. Finally, rogues have both a proactive and reactive disruptive feature that gives us anti-gank measures.

2.) Vanish removes hunters mark, and without SSting on us, it is a true restealth. Don’t forget it, because hunters will often forget to re-mark you in later combat (and that can come in handy, especially in group pvp).

3.) Evasion now also gives us a 25% avoidance to ranged/missiles. This lowers their effective damage on a kite, as well as dealing with pet damage (which can easily break 250-300 DPS).

4.) We have the HP to withstand more hits, no longer can we ever be 2-3 shotted by this class…even though you will see 3.5-4k Aimed Shots once in a great while. On the same token, the hunter has higher survivability as well, but not the same proportional increase in survivability as the rogue class.

5.) Deadly Throw–not bad damage, can be chain thrown with relentless, and is effective at snaring your ranged hunter. Not a bad deal, especially as once you’ve closed the gap you’re going to premed-CS open for 5 points, so extra points are wisely used here.

With that said, we won’t put a hunter on farm status just yet. Even among certain nerfs they’ve faced, they’ve also had a few buffs. Dropping traps in combat (even if they have a timer), pets that immediately stop attacking on a CC’ed (mezzed) target (giving them less to worry about, and higher damage on average), becoming difficult to CC with their 41 beast talent, and greater survivability as well.

With any rogue spec, you’ll be aiming to close the gap, stunlock, and prevent any kiting. Almost all builds will be putting huge pressure, enough to kill, or nearly kill, any hunter that eats a full stunlock round. Get that open and you’ll win.

Step 1–Choosing how and when to open on a Hunter.

The hunter wants to kite you. Period. He wants to put distance between you and him, keeping you out of stealth while he pwns you. He’s going to flare/trap camp to start, and no matter how it works out, you’re going to want to stop him from kiting at all costs. Obviously 2x Crippling poison is what we’ll be using.

You need to ask yourself one question before we can go on: Are you going to eat the flare/trap and be forced to dance, or are you going to wait out the hunter’s silly flare/trap camp?

Given that we are a stealth class, we are gifted by the deities of Blizzard with the innate ability, via stealth, to choose whether and when we wish to strike an opponent. This ability to wait for “the moment of opportunity” is mostly present in gank-type situations, but it certainly has relevance in a duel. In the hunter matchup, we come face to face with it quite vividly. A hunter that is fully prepared for a rogue will, obviously, have laid a trap for us to walk into. We know it, we can even see that trap (both literally and figuratively). The hunter will be double flare/trap camping, and with even mediocre spirit regen he can keep it up all day. If you choose to not wait him out, then you lack “opportunity” in every sense of the word when you, begrudgingly of course, accept your fate that you will not get a stealth open, and will also be forced to trap-dance. In a friendly duel, I’ll gladly swallow my lumps and trap-dance, but if winning matters, then I’ll use everything I have in my power to win, including the resource of my time while in stealth (plus I get my CD’s back if they are down for some reason).

Alas, our stealth gives us the choice. You can just charge in, or you can sit and wait for the hunter to stop camping (or camping incorrectly, thus allowing you to catch him when he wanders off just slightly). Some hunters will call “waiting them out” poor etiquette, but clearly they have no clue about the very nature of the rogue. Blizzard gave us this ability and even if it pisses everyone off, we can surely use it to our advantage. We were designed to do this, even in duels. Time is on our side. It takes 100x the effort and concentration of a hunter to chain flare/trap camp as it does for me to walk to safe place and AFK until I’m darn well good and ready to open. For example, in the arena, when a hunter and I are the last people standing (I’m stealthed of course), I simply refuse to eat his flare/trap. Within even a minute, that hunter will get frustrated (and I won’t). He’ll slip up; he’ll run around, he’ll get outside of the flare radius, he’ll try hopping from flare radius to flare radius. Even if he goes to get a see-stealth buff, he’ll screw up while I’m patiently waiting at a safe distance. If it matters, then you can choose to get your open from stealth, and for important matches, I do suggest it.

Steps two and three are going to assume you will not wait him out, but if you do wait him out, then skip to step 4.

Step 2 (eating flare/trap)–Trap Dancing

So you’ve chosen the harder route, good for you–the fight is action packed and exciting. The hunter is sitting directly on top of his trap, or thereabouts, and he’s chain flaring. You will attempt to circle him, hitting him with shots just outside the trigger radius of the trap. There is only a slight difference in radius between melee range and the trap-trigger radius, but with practice you’ll become quite adept at weaving around the fine line. If you need, you can blow CoS, forget the trap, and just rush him.

Feel free to watch your timers, you can tell how long until that flare and that trap will wear out. You will want to at least wait until these are almost up before you start trap-dancing. You want to make sure they will run their duration quickly. Why? Because trap dancing should lead to eventual control of the fight. You are accepting loss of control from the beginning, but you need to quickly gain it back…Stealth is required to win against a good hunter. You cannot stealth neither on a trap nor on a flare. So you either need to draw him away (by letting him kite you), or even better, catching him with a blind at the end of the flare/trap duration so that you can get your open.

When you trap-dance, and most hunters won’t be used to this technique, they have a few responses available.

1.) They sic their pet and take your hits, keeping autoattack on, but not budging from the trap, hoping you’ll eat the trap or the pet will take you out before you take them out. This is the response of a noobie hunter.

2.) They’ll back up, and circle, attempting to keep the trap between you and them. Interesting technique. The proactive chaser (rogue) will close the gap though.

3.) They’ll Scatter Shot you, attempting to make you eat a trap, and will begin kiting. The normal response you should expect. CoSing the trap is quite nice right here. Early cripple/shiv takes care of a big kite. CoS-Shivving is huge.

4.) They go all crazy red incredible hulk on you and zerg….just run off and vanish, you can’t CC him. He just wasted a CD.

5.) Pet intimidate and begin the kite.

Those are the general responses, and sometimes they’ll use a combination. A poorly played hunter is highly susceptible to continual trap dancing. Sprint and evasion can help here. If you catch him off the trap, KS and unload on him. Generally, though, a good hunter is going to stabilize the fight first on you, and he’ll make you eat an SS, trap, or pet stun, and then they’ll start kiting.

Step 3–Preventing the Kite

On the kite, they’ll aspect of cheetah for the run speed, lay a trap while running (if not on CD), and open. Feel free to evasion right out of a trap. Be careful to avoid traps layed during combat, you’ll see his animation when he does it (don’t be deceived by those who jump+trap). A good one will begin kiting and drop it midway. You simply cannot allow for him to stay at range obviously, but don’t eat a trap you don’t have to just because of your fervor to prevent the kite and reopen. You need to close the gap and reset the fight, this time on your terms.

It depends on the situation, but sometimes simply sprinting up to him and vanish->opening is all you need. Other times the hunter will get his huge open on you–and if you decide not to CoS-Vanish (usually do to CD or flare constraints), then blow evasion when they are going to get some ranged hits on you. Feel free to deadly throw at him if you have the spare points. Anyways, you’ll catch up to him, hopefully not having sustained a ton of damage.

So, when his flare/trap is gone, or they’ve kited you to an area where there is no flare/trap, you want to get your real open on them. You have two options, you can Blind and/or Vanish (generally CoS->Vanish is required). Whatever it takes, you aim to get your open on them in a non-trapped/flared area. Again blind is less useful against dwarves, but it still might be necessary to blow it (maybe wait until they blow it to get off crip poison). Once you’ve stabilized the fight, you aim to control him the rest of the way.

Step 4–The stunlock

Assuming you’ve stabilized the fight or you are getting the open on a hunter, then you’re going to open with a fat CS on him. Here his PvP trinket is your only worry. You’ll go through your normal stunlock routine, but you watch for that trinket. He can bust out of either of your stuns (and your crip poison). You need to catch him on it. If you don’t catch him on it, then he may SS you in the face and start the cycle again. The perfect catch is a gouge on his trinket-SS. If he drops a trap here, just avoid or CoS it.

Full CD, on the open, and no trinket (a surprising number no longer equip this), you’ll win 100% of the time if you play correctly. No hunter comes back on our open. Premed, blind, vanish, and CB are invaluable in this stage. Burst him down within your stunlock, and continue for as long as you can. If you have it, or even need it, a blind post-KS (against non-dwarf) seals the deal every time.

If you can’t fully stunlock him, that’s okay. Stick on him like glue; he’ll be very low on health, and your remaining CD’s will overcome any measure of control he can muster.

Tips:

a.) Shiv that crippling poison on them if it isn’t already applied.

b.) Restealthing isn’t effective, as pets still charge at you even after you stealth. You have to vanish.

c.) It is possible to sprint-Sap a hunter within a flare. It won’t work 100% of the time, and it is latency based.

d.) CoS can be used in stealth, and it can be used to eat a trap. Charging into a flare/trap camp and CoSing to eat that trap can be quite powerful (and is sometimes necessary, especially in arena).

d.) Boar Charge can buy them additional kite time, be prepared for it.

Summary:

1.) Trapdance or Open
2.) Use Anti-kite measures to gain control of fight
3.) Stunlock (maintain anti-kite measures)

Until I start seeing better equipped hunters, I think a well played rogue should win this matchup more times than not. Armor levels have dropped considerably, and most hunters aren’t stocking up enough on HP gear. Prevent the kite and you win.

Druid-

A PvP druid will usually be feral, if they aren’t feral then you own them (wound poison and stunlock cures all). Now that doesn’t mean they’ll be in feral form the whole time by any means, and it doesn’t mean they won’t have points invested in other trees. But, the strongest PvP druids will be feral, and that is what you should prepare for, especially as non feral druids are much easier to deal with. Mind you, as an odd “hybrid” (and I use this term very loosely in regards to the druid, who really plays “role-replacement” in my mind), the feral druid can have varying gear, and thus a varying tactic that we must identify and respond to. Some are going all out damage, at the expense of a solid mana-base and armor; some are going to tank you; and, some will keep their mana-options open, but sacrifice feral damage and tankability–the best will use a combination thereof. Mangle and gear variations can make this a difficult class. Finding truly skilled druids that can make use of their abilities is a different matter together (how unfortunate!).

It is to know what gear configuration they are using. You need to identify whether they are dealing very lethal damage (even higher yellow DPS than a rogue as far as I’m concerned) or if they are going the defensive route. If they are in tank gear, then you’ll be more likely to DoT and tank them down. If they are damage based in gear, then you’ll really want to kite them more than you tank them, on the flip side their mitigation won’t be nearly as high. Their mana supply is also an issue to consider. Druids with low-mana bases really can’t afford to shape shift several times in a short period of time.

Good druids will start bear form. Refer to the rogue stealth section if they try and cat-stealth you (it is a sign that the druid thinks you suck; even if their PvP gloves have stealth detection, it is a poor choice by the druid). Other things to keep in mind is that they can use their bark skin armor buff during stun, NG even in feral form, and bash has become more effective as dodge levels have dropped. Beyond their amazing mitigation, I have become more and more impressed with the bear forms ability to dodge/parry–fighting from behind is always a good idea against these guys. Constant positioning is a powerful and even necessary tactic.

In bear form they hope to survive your initial stunlock/dots/kite, and they’ll attempt to bring you down as far as possible without putting themselves in harms way of not being able to heal up effectively. They hope to catch you at a crucial point where you are possibly low on CDs (if you needed them), they have 30-50% health, and you are susceptible to traditional CC. It is here where they want to heal to full and bring you down the rest of the way. They’ll Bash->Cyclone, heal to full, and re-bear form. Expect to see Nature’s Grasp trix and well-timed trinkets. The longer this fight lasts, the more likely the druid is going to win. Finding druids who pop these CD’s at appropriate times and every time they are available is rare as well. We just don’t see a lot of druids that maximize their potential, beware of those who do….this is a class that has the potential to beat a lot of rogues if played correctly.

There are 3 tactics that should be used when dueling a feral druid:

1.) Stunlocking
2.) Evasion tanking
3.) Kiting

Knowing the gear configuration changes the effectiveness of each of these tactics, and sets priorities for the rogue. Stunlocking is always good, but if we go too heavy on it, then we lose the ability to punish a druid out of bear form. Evasion tanking is good, but it is both temporary and is most useful when attempting to dodge a bash. Kiting is also a two-edged sword, as it makes you more vulnerable to CC effects and a druid getting a heal off, but it is necessary against high damage druids. In the end, a combination of these will be used against a well-played druid.

Step 1–Preparation

As much as some rogue’s don’t like to use it: Wound poison…you need to stack 5 quickly and sustain that 50% cut in their healing. I don’t care if you use rank 1 wound poison or the highest rank. All that matters is that they won’t be healing effectively–in the end, a very good druid will get a few heals off, it is up to you how effective they will be in their healing endeavors. Healing is greatly diminished with wound poison, to the point that you can force earlier bashes, blowing fewer CDs and taking less damage. It is so important to keep them from healing that you should be using wound poison MH. Keeping their healing down is at a premium….12k hp bears (attainable in greens) that get a single full heal on you in a fight are 24k hp bears….and there will be times that you can’t stop them from healing.

A rogue really cannot afford to give up the ability to gouge->bandage or blind->bandage against a very good druid, and so DoTs must be used wisely. This fight is in part a war of attrition, one that will be lost when you can’t effectively heal yourself because deadly poison is breaking your disorient/incapacitate effects and also because they can effectively heal because you haven’t stacked 5 wound. If you do go the deadly route, then go all out, be sure to use Envenom. I don’t recommend this against a well-played druid. They’ll outlast your damage…they are a turtle. Breaking the turtle is best done with wound poison/crippling poison, not deadly.

Only at the beginning of this fight do we want to risk using DoTs, as the beginning only sets the tone of the fight, it isn’t until we are 20 seconds into the fight that we have to worry about CC effects. So, we are setting up for a warrior-type open; a garrote->5pt rupture is quite optimal. CS-Imp Gouging for pre-combat points is easy an excellent. They can still hit you with FF from a good distance, but with minor run speed and quickly running after the gouge you’ll always get your restealth. If you do get hit you can always CoS-restealth. Saving your premed, you’ll want it later in the fight after you vanish into him. If you choose not to use precombat point generation, then premed is just fine against these guys, just be careful to use those points quickly–this can be difficult when the druid is jumping and twirling around, as you’re open must be from behind for garrote (and many have stealth detection)…so you’ve got to use premed points in 10 seconds, but you can’t let them catch you in stealth for an FF. With FF preventing vanish, you may consider using it liberally from the get go, negating some of the utility of pre-combat points, COS does give us more flexibility though.

Step 2– The open

You prefer to save sprint if possible, as it closes the distance quick on a kiting druid, but sprinting in for the open is acceptable if it is necessary (you really prefer to save this though).

Some might prefer CS, and against non-bear tanks this is strictly correct. But, as a rogue can generally afford to not have to use gouge/sap/blind in the initial 20 seconds of combat, DoTing is a very effective means to deal some major damage to these heavily-armored feral units. On top of this, the druid fight is one of the very few in which I am greatly concerned with my diminishing returns. Opening CS->Gouge->KS eliminates the immediate future effectiveness of these abilities, and that can really come back to bite you. As usual, these are pseudo-warriors, don’t even open until they have no rage, and avoid the shouts. And, please, watch your castbars, you don’t want to open on a druid that has freshly casted NG (Nature’s Grasp). This also goes for the druids who think they are smart in HoTing themselves right before the beginning of a duel–just wait these out.

If you do choose to open stunlock, then consider vanishing within your KS and premed-Garrote-5pt rupturing. Assuming precombat points, something like CS-Gouge-KS-Yellow-Vanish-Premed-Garrote-Rupture-Yellow is fine. Be ready for the trinket on KS though (ouch). If you choose to DoT open, saving your vanish (with CoS it is another open, and that can be very powerful), you’ll go something like Premed-Garrote-Yellow-Rupture.

Step 3– Toe-to-Toe’in, Kiting, and Stunlocking

I generally give the druid a few seconds of tanking from my open. Why? Generally I’ll get a few hits in before they even join in on me, I’ve got the energy to blow, and I get a feel for their gear if I didn’t already inspect or visually identify what tactic their gear points them towards. Most importantly, staying in melee range lets you apply your poisons, and this is vital. You need 5x wound poison and crippling. Jumping through the bear and circle-strafing around him properly will give you his back. You really want to avoid both his damage and his frontal defense when possible. Get your poisons and run those DoTs.

If I see my druid is taking and dealing heavy damage, usually because they aren’t wearing their +defense tank gear, it is usually best to treat them like MS warriors. Go ahead and 5-8 kite (closer to 8 than 5 for the druid though), regen energy, jump through, stun and unload on them, and do it again. You want to beg their charge and bash early, and you also want to beg them to pop out of bear form for a quick heal. You want to catch them with their pants down, while running into unload and running back out to avoid his damage.

If my druid is a true tank, then I’m more inclined to tank them as well because their damage will be lower. Generally, you’ll want to be using rupture, but only when KS isn’t on CD. You can’t afford for them to pop out of bear form for you not to have KS when blind is going to fail on a DoTed target. And, when you aren’t rupturing you should be using gouge to bandage and regain energy. Toe-to-toe is more acceptable in this case because you aren’t likely to be bursted down.

Step 4—Preventing Heals and Catching them in Caster form.

Assuming his HP is getting low, it is going to beg a response. The first response from a druid with lots of rage and not perfect health is Frenzied regeneration. Good ones will blow this early to maximize effectiveness against your wound poison, with 100 rage (not hard to get) it heals them for a base 2,500 health). There isn’t much more you can do to prevent this, but winning before they can do it again is something you can do. If frenzied is down, they have three other answers in bash, charge and nature’s grasp.

At some point, usually around 50%, a druid will bash-Cyclone or NG (NG-Cyclone is common). After landing the fearsome Cyclone, a druid is free to heal, maybe even DD you, and get back into bearform. You need to prevent this at all costs. We have a few counters. In the end, you want to end up catching them in caster form with a gouge/KS/CS/blind if possible. Even a few seconds in against them in casterform is lethal.

The counter to bash is quite singular: Evasion. The higher your chance to avoid that stun effect the better. For DPS feral druids who generally take sizable damage from you even in bear form, but also deal lethal damage themselves, going evasion early is a good idea. Minimizing the damage they deal to you is very important, and conversely, their need to bash will come much sooner than a bearal tank’s need, early enough that going evasion while their at 75% will put huge pressure on them as you burn them down to 30% in the next 15 seconds. For bearal tanks you really don’t want to evasion until they get to 50-60%, otherwise they’ll just wait through your evasion and bash afterwards. If bash is dodged, then they are in serious trouble. They’ll be forced to NG.

The counter to Nature’s Grasp: Cloak of Shadows. For now I catch many druids with their pants down as they jump out of bear form because I’m 12 yards away, only to see my CoS into a blind on their caster form. It can be good to CoS-Vanish (as FF is now gone, and this is a rare opportunity to use vanish)-CS them. If the druid catches you CoSing out of NG, and doesn’t pop out of bear form, they’ll be stuck with their last resort, charging.

Charge is a root, but it doesn’t eliminate your abilities, just your movement. Vanish can get you out. Catching them with a gouge on a charge is most optimal. KSing is fine too. If they get away, blind is a good idea. Deadly-throw on a caster form is pretty amazing too. You might see charge before bash or NG even, just be ready to gouge it immediately. Otherwise they’ll kite away, pop out of bear-form for an abolish poison and an HoT, and pop back into bear form.

If you get him in caster form, he’s dead. Druids don’t come back from it. Unload on him in casterform. Even a 2-3 point CB-Evisc can be lethal at this stage of the fight.

You are going to eat some bashes, NG’s, and charges that will net the druid in a successful cyclone. Druids will get heals off if they play correctly. We just need to come back on them.

Step 5—Recovering

So, they successfully cycloned, or CoS/vanish was down on an NG, or you just saw them Abolish poison, and now you lost control of the situation and they went back to full health. What can you do?

Prep gives you all the options again. Constant gouge->bandaging is important. Blind->bandage is very good. You need to outlast him. Things like Mark of Conquest and Heroism card are very good in this matchup. Catching him on a gouge/blind (or even KS) at the end of FF duration might net you a restealth. Continue to follow through with the gameplan.

Tips:

a.) Restealths are good, they happen often enough with the help of CoS. Gouge-CoS-restealth can be of use.

b.) Be prepared for stun resists and trinket.

c.) Don’t be afraid to CB-Eviscerate very low-armor bears, you’d be surprised how hard you can hit.

d.) If you do use deadly, envenom becomes quite excellent.

e.) Watch for abolish poisons when they jump out of bear form. It periodically removes poison effects, rendering them unblindable (for the full duration atleast).

Summary:

1.) CS-Gouge-Restealth
2.) Garrote-Rupture-Apply 5x wound and Crippling
3.) Kite high damage and tank low damage bears.
5.) Counters his abilities appropriately.
6.) Catch him in caster form or kill him before he kills you in bear form (gouge/blind-bandage is good).

In the end, most druids really don’t maximize their characters’ potential. How many druids even use their PvP trinket to pop out of the crucial 5-point KS? How many are popping NG, bash, charge, and Frenzied regeneration every time it comes up? Each of these put pressure on the rogue, and often require us to blow CD’s in response (or even as prevention). It is quite possible for a bearal tank to live long enough to use these abilities a few times. Most of the time you’ll trounce druids simply because they just don’t know howto fight a rogue….seriously, premed-garrote-GS-rupture-evasion-rushdown will defeat most druids. But, should you meet one that does play correctly, you’ll need to be tactful.
Rogue-

The once awful mirror match is now not as bad as it once was. Pre-TBC, save for a dodged gouge or a stun resist, the open is really all that mattered at some threshold of gear. Once you met that gear level, any rogue could be defeated. With itemization changes, this has become a slightly more skill intensive fight than “get the open and win”. Don’t get me wrong, the open REALLY matters, as it sets the tone and pace of the fight, but it is no longer the tell-tale sign of a win or loss in a match. There are very few rogues that are pumping out lethal damage before the end of KS, and none of them can do it consistently (they got some really, really lucky crits). This will now, at the very least, be a matchup that requires CD’s if we do hope to 100 to 0 another rogue. With that said, there are a few things you can do to improve your odds of getting the open, and you should take all possible measures to make sure you get that open.

Step 1–Getting the Open: stealth and odd mechanics

The ability to see them first is 9/10ths the open for most rogues. Perception, potions, heightened senses, and certain pieces of gear can improve your stealth detection. There are also many effects that increase your stealth levels itself. MOD is obvious, but don’t forget boots, cloak enchant, Nelf racial, and a few other things can improve your stealth. In general, stealth detection seems stronger, per piece of gear, than increasing your stealth level itself. I highly suggest getting as much of both as possible. Put it on a gear-swap macro, you’ll find yourself using your stealth setup quite often in BGs, dueling, and even world PvP.

The other thing that helps greatly in getting the open is something akin to Belkin’s Nostromo N52. Now, while the n52 isn’t necessary for a rogue to play, it does make high-end play easier and more effective. In this case, the macro spammability feature is certainly game-breaking in the context of getting the open in the stealth vs stealth matchup.

Most rogue’s stealth around, trying to just walk past their opponent, then they target their opponent and CS. This is not what you want to do. Stealth was designed so that you are either a.) forced to AE the area in which the rogue is, or b.) manually target the rogue in stealth and then use an ability. The “bottleneck”,so-to-speak, for a rogue vs rogue, is in 1.) Actually having a visual of the the stealthed opponent, 2.) Taking the time to target (whether by tabbing or clicking on him), and 3.) Pushing CS about as fast as you can spam it by hand. The N52 gets around all three of these.

You can setup a macro that will allow you to hold down your CS key to spam CS faster than humanly possible for an indefinite duration (as long as you hold the key down or press it again, depending on how you set it up). What does this do?

It is an odd feature of the game, but if you spam CS at the n52’s amazing rate, you don’t actually have to target a stealthed opponent. If I am next to a stealthed opponent, my CS-spam will automatically hit them. Even better, the spammed CS will almost always hit my rogue opponent even BEFORE I have a visual of them on my screen. I’ve played without MOD and opened repeatedly on rogue’s with MOD just because of this CS-spamming. This is a serious advantage.

Assuming you didn’t just stand still, and you didn’t walk some obvious path, you should most likely get your open on another rogue using the tools above. So, step one, you’ve CSed your rogue opponent. What now?

Step 2: The stunlock

This is your standard stunlock situation–Always stunlock a rogue. Don’t be fancy here, no “rush-down” until you know you’ve won…you may not come back if you lose control of this fight. Your job is to stunlock your opponent from 100 to 0, or, if you must, rupture kite them while you are out of their blind range. 2x Crippling Poison is clearly the best poison choice. Use your usual stunlock, but remember you must keep 25-30e open before the end of your KS. You will need to proactively disrupt your opponent by the end of KS, or you will get a.)blinded, b.)gouged in the face, c.)vanish-CSed. There are two viable end-KS choices:

Blind–Blinding at the end of KS signifies that you are going all out, and to me, if used after you get the open, it is the closest to sure sign of a victory as we can say. You get to re-open, and that rogue is most likely going to die. This is the safe way. And, some might view it as cheap. My opinion: Do what it takes to win. That means blowing CD’s. Blind after KS (when available) is ALWAYS the correct choice in a duel against another rogue. (By the way, elusiveness now puts blind at a 1.5min CD.)

Rupture Kiting–This can be dangerous, but it is sometimes a necessary evil when we don’t have CD’s available, specifically blind. Rupture kiting is simple: apply rupture and get out of their blind range, restealth and re-open. Rupture prevents your rogue opponent from effectively restealthing. In the meantime, you seek to go OOC, gain some energy, and restealth. If you don’t get OOC, then generally you’re going to be vanishing in for the 2nd open and, hopefully, the kill. Your job is not only to get a restealth, but essentially to avoid an incoming blind that your opponent has been spamming since your initial CS. If your opponent blinds you, then they get to restealth and open on you (regardless of DoTs).

Rupture at max range, and rupture early in KS. You’ll need at least a small time buffer of KS-time to escape blind range. Be sure to test your build to make sure you have enough room after KS so that you don’t eat a blind. For example: you can generally get 2 Hemo’s in and rupture during KS, and still be far enough away not to eat a blind. This takes practice. Shorter rupture durations means you have less and less of a time advantage over your opponent, maximizing is good, but not at the expense of eating a blind.

Your opponent might bow/throw you to keep you in combat. He has 30% health, you have 100% health…just trade blows with him and throw back at him (keep your distance of course). A reasonable rogue opponent is not going to try and keep you in combat, as this is merely an exercise in futility. Sprint-Vanish will take care of these rogues too.

A good rogue opponent is going to do one of two things:

a.)Pop CD’s and try and open on you directly.
b.)Pop CD’s and run away from you, primarily to heal up and try again to open on you.

CoS, Vanish, and Imp Sprint all remove crippling, so be prepared to blow CD’s in response. My usual rule is to pop the same CD my opponent has popped. If my opponent vanishes (still has rupture on him), then I vanish. If my opponent sprints, then I sprint. You can tell when your opponent is going to let you OOC and when he isn’t. Be prepared to blow CD’s, maybe even pre-empt them.

For those chasing you down, the good ones are simply trying desperately to get a blind on you. If you can smell the blind, then just vanish…you can always circle for another minute to find him, and your next open will be lethal. Rupture-Vanish is perfectly acceptable. The problem is that they can escape pretty easily if you do this immediately. They can get just get out of crip poison and sprint out to restealth. If you do choose to rupture-vanish, then be sure to keep up with him, sprint and distract can help in this regard.

The reason rupture-vanish is simply not as good as blind is 2-fold. 1.) Diminishing returns on CS, Gouge, and KS (ouch), and 2.) Lack of energy (blind gives you 100, rupture-vanish gives you varying amounts, usually less). If my opponent is very low, I’ll often Premed-CS-CB-Evisc, and it ends right there. It is a difficult balance between DR/Energy issues and whether I let my opponent escape or not.

Always remember that even if your opponent does get the blind on you, he still can’t kill you in a single round (most likely). Use anti-rupture kiting techniques on him…and you are both even, only your CD’s are more likely to be up on the 2nd encounter than his.

The real problem I foresee is that at some gear threshold, since neither rogue can effectively 100 to 0, it is conceivable that many times both rogues will get each other to half health, and in fear of not getting the open, both will hide and bandage up their health to open, yet again, on a full health rogue. Endless cycles…I find this common in arena especially. Prevent rogues from kiting you is a major skill to have.

Tips:

a.) Sometimes it all turns into a real mess. Evasion isn’t a great answer, but at least they won’t be gouging you or really dealing massive damage to you from the front. Always remember to blow this when all hell breaks loose.

b.) Recovering from another rogue that opens on you means spamming blind and using anti-rupture kiting techniques. Remember that you can always stealth away after escaping from being opened on and find a comfortable place to quickly bandage/eat. This essentially resets the fight completely.

c.) Don’t use deadly poison.

d.) Be patient, don’t get lazy or frustrated when you are having a hard to finding them. Even circling that silly flag or what not takes some degree focus and concentration.

Summary:

1.) Get your stealth detection and +stealth mods on.
2.) Spam your CS open, and think while you prowl around. Don’t be obvious in your walking patterns, and if you see a safer place to be scoping out the area, then use it.
3.) If you open full CD, then win, if no blind available, then rupture kite. If they open, then blind and/or use anti-rupture tactics.

Priest-

A match that has become almost unwinnable for a shadowpriest and arguably easier for, but still not in the favor of, a holy/disc priest. Cloak of shadows and lower mitigation levels have made this a much easier fight for the rogue in general. On top of this, a rogue that is properly sap/CSing can frontload so much damage while maintaining a lock and severely stifling their healing that most priests simply can’t come back on you. Our main problems with priests in general are a.) Shielding every 15 seconds, netting no increased cast time from taking damage and, of course, +virtual HP, b.) Killing the priest before the 2nd (or 3rd for UD rogues) fear, and lastly c.) Preventing the kite.

I’ll first outline the open stages of the fight against all priests, and then I’ll elaborate on the spec.

Step 1–Getting the open on a zero armor target

Sap/CS is so powerful in dueling. Honestly, it is an abuse of the game mechanics, but I’ll take anything I can get. The priest is the prime target of this tactic. Here is where expose armor becomes useful as well, and the good part is that a rogue can put EA on a target without sacrificing his open!

Your routine:

1.) Sap/CS, restealth and wait for DR on both. (2-3 combo points)
2.) Sap/CS, restealth and wait for DR on both. (4-5 combo points, generally 5)
3.) Sap/EA, restealth, OPEN HERE.

Remember not to actually use your last sap until a.) they are 12-13 seconds from losing their shield (which won’t happen against most smart priests), or b.) they newly cast their shield. You want to either be really opening on a priest with no shield or the inability to cast another after you crack his shield. Shielding and fearing are chokepoints for anyone dueling against a priest, and so we really want to unload as much damage as we can before the next shield and/or fear chokepoint.

For sap/CSing, blackout-procs can be a pain, and also be sure you don’t deal any damage (even from weapon procs+enchants). CoS+vanish takes care of those problems though. CoS+vanish is a reset of the fight (only you get to keep your combo points).

Again, the n52 is so powerful in this matchup. I have this all hotkeyed. I sap and push one button and the EA through sap happens for me automatically. I restealth, and I’ve got a zero armor target for 23-25 seconds). Remember sap shares DR with gouge–Try and wait out the DR before gouging (if your opponent even lasts that long?). From here, the fight diverges into two different approaches:

Step 2 (Shadow)—Elimination of their damage+healing.

Shadowpriests put out some serious damage, and have the highest damage+healing ratios in the game. But, TBC has certainly changed this matchup. Rogues are in a much better position because we have the tool to eliminate the damage (and thus the healing potential) of shadowpriests in our beautiful Cloak of Shadows (some might even say cloak of skillz). At equal gear, a rogue should win this fight every time. Crippling poison is a must have (MH or OH, either is fine), and is acceptable in both hands as well. Preventing the kite is the game. A 1x of Mind-Numbing or Wound is also acceptable.

Generally, I’m just going to rush these guys down. They have 15% damage mitigation (after 5-point EA), and I’m in an excellent position to premed-CS-CB-Evisc them to half health right now. Stunlock them down if you can, but they’ll usually trinket right on CS. Be ready to answer a trinket+fear. Rush them down. Let them Vampiric Embrace+DoT, and then use your CoS (15 second CD on VE). CoS gives you practical immunity to their damage for 5 seconds and also eliminates whatever they just threw on you, it is most powerful in bridging the tempo advantage of a kite while you sprint up to them. They won’t be denting your HP, nor gaining any life back–they are in serious trouble. They won’t be coming back on you if you play your cards right.

As always, if you are having a really tough time, blind is your ‘oh-sh*t’ key. It resets the fight and gives you yet another open. Easy enough.

Step 2 (Holy/Disc)–Overcoming the turtle

This fight has become slightly harder for the rogue. Holy/disc priests are pretty decent turtles. Pain suppression, blessed resilience, and a few other talents make for a decent turtle. I do recognize that Disc and Holy are very different trees, but for now, I lump them together because it is the same basic gameplan: Prevent all healing, stunlock as much as possible. Catch them at 40-50% health with no shield or trinket and, if necessary, blind to restealth and premed-CS-CB-Eviscerate for the win.

Although you do want crippling on at all times if you can, what you really MUST have is wound poison. You need to out DPS their healing (and they will get some healing even through your wall of disruption)–wound poison cuts the heal to DPS margin in half (actually, slightly better including damage dealt by Wound poison). Wound MH and Crip OH is really what you want in this matchup. Sprint fills in any crip-gaps you might have, and shiv prevents most kite gaps from occurring in the first place.

You should still premed-CS-CB-Evisc on your open. Although, Premed-Ambush-CB-Eviscerate is good, it isn’t a stunlock. For the moment, you should CS even instead of ambush as it forces a trinket. Like a resto shaman, here you’ll sustaining damage, being sure to kick, gouge, KS, blind, deadly throw, and even vanish-CS all non-instant heals. Apply your wound poison as a source of pressure to both the time available to get their HP up, but even as a way to put pressure on their mana supply. 5x Wound Poison is a huge detriment to the very fabric of their spec and class, and they will not overcome it.

Proper responses to stun resists, fears, and their heals should still guarantee you a win. Don’t go too low on energy, because if they get a flash off, you’ll be sitting there even longer. Don’t go kamikaze to the point that you don’t have energy to disrupt their heals.

Use CoS Wisely. Generally, I wait to burn it as it can provide guaranteed opens alongside vanish. But, in this match, you could arguably just burn it early to have it ready yet again. CoS early on SW:P forces them to cast it yet again, using up their precious time and mana just to deal a bit of damage to you (and keep you from easily vanishing, not that you shouldn’t be capable of vanish-CSing in between ticks anyways). It is up to you.

Against not so great holy/disc priests you can go pure rushdown, against the better one’s you are fighting a slow war of attrition, one that the rogue will eventually win. Some fights will be slow enough that SnD is worth it, other fights are more concerned with bursting.

Tips:

a.) Proper CoS usage can be key. You should atleast wait for them to DoT you before you blow it though. Using in anticipation of a fear won’t be a good idea until the end of the fight.

b.) Never, under any circumstances let them kite you.

c.) Stunlocking, even if only a softlock, is STILL a good idea–so what if they have stun resist, tempo is tempo (any rogue who says otherwise simply has no idea how this matchup works).

d.) Try to kill before the 2nd shield, but make sure you kill before the 2nd fear.

e.) Wear your PvP trinket, have it bound to a key, and be ready to push it. Time lost during a fear kite is time you could have been punishing that priest.

Summary:

1.) Sap/CS into 5 points
2.) Sap/EA/restealth/Open
3.) Premed-CS-CB-Eviscerate
4.) Prevent kiting/healing and respond to fears quickly.

The shadowpriest matchup is considerably easier, and the holy/disc matchup is considerably harder before TBC. At equal gear, a rogue should beat a shadowpriest every fight, and should win the majority of fights against holy/disc priests.

Mage-

As always, a lightning fast fight, arguably an even quicker fight than before TBC as we both have access to even more tools against each. In general, with CoS, this fight is in the rogue’s favor, even against frost-mages. Non-frost mages should lose 100% of the time to a rogue– even played to their peak capacity, we out-CD them and apply far too much pressure for them to control us. While a fire mage is dead in the water when you blow CD after CD, the frost mage has alot more answers, and the longer the fight (as usual), the more likely your opponent is going to win. Your mission is to deal massive single blows at all choke points, prevent the kite, not eat their blasts, and as always, avoid getting polymorphed at all costs.

All mages aim to do one or both of these:

1.) Sheep you (without you having a trinket left) (the fire mage really wants this)
2.) Kite you using instants until you die (the frost mage will do this).

The mage and rogue are actually very similar in terms of the situational control and survivability we possess. We have answers and lots of disruption to use against each other. When fighting a mage, Blink, Ice Block, Blazing speed, PoM, Slow, Water Elemental, and Nova all require a rogue to blow CD’s/trinkets to effectively counter. And, if a mage is given a chance to use all of these abilities, the rogue will eventually run out of CD’s. Once the rogue is out of CD’s he is dead in the water, as he has no way to prevent the mages disruption, and, on the same token, will never catch up to disrupt the mage. The rogue must win before the mage can use all of these abilities because he won’t have enough responses.

The mage’s use of CD’s allow him to blink and shield/barrier enough times, burning all the rogue’s CD and options, such that he lives through each burst, and eventually overcomes the rogue. We trade CD’s to just get in range and deal any blows to a good mage. But getting past his CD’s isn’t your only problem. With each shielding he throws up, he gains virtual hp (like the priest), adding even more damage that is required of us to actually kill him. The longer the fight, the more often a mage will be able to shield/barrier himself, and thus a 7-8k mage becomes a 11-12k hp mage pretty easily.

This fight is NOT about sustained damage, it is about dealing lethal singular hits in between the choke points of iceblock, frost-nova, blink, and shielding. If you treat the fight like it is a sustained damage fight you lose immediately; this is completely about burst and disrupting/responding to the mage’s control features. The mages control abilities are mostly instant cast, and they happen in rapid succession, and so the rogue’s damage is choked through each of these abilities. We are forced to create opportunities to deal sizable amounts of damage in single shots. We aim to out-CD the mage, eliminating chokepoints before we reach them, and to deal massive blows.

Before we go on, I’ll go through possible responses to each of their abilities:

Frost Nova/Freeze/snare=Vanish, CoS, Blind, Imp Sprint
Blink=If sprint is already up, you can catch them before any major spell can hit you, assuming no PoM. I’ve even run the opposite direction to restealth from OOC in some cases. Vanish works as well.
Sheep=Avoiding it in the first place with Vanish, CoS, or any stun, Deadly throw for interrupt, and trinket if it hitst.
Ice Block=Depending on whether WE is out, turning off autoattack, either sit next/behind them and be ready to mash if they melt, or hit your special of choice at 0.5 left on their Ice block. Or, you can OOC and restealth. Killing their Water Elemental isn’t a terrible idea either if you’re combat. Be ready to blind the mage.

The good part about this matchup is that the more you know about your opponent, the better choices you can make. So, for example, if you know they don’t have PoM, you can use strategies that aren’t flawed by PoMable gaps, etc. The general fight is the same though, but as you’ll see that CD’s are extremely important in the frost mage matchup…probably to an extent greater than any other matchup.

Step 1–Setting up the anti-kite

As usual, 2x Crippling poison is best. 1x Mind-Numbing is “okay”…but, generally, the mages that you’ll have a tough time beating, frost mages, will be using instant casts the entire fight.

All mages will start the fight AE’ing. This can make your Sap/CS setup kinda difficult. Be patient, play like a stone cold killer. And, if you don’t get that perfect open, then just restart the fight with a gouge, vanish, or even CoS-OOC-restealth after they blink away. Even here, if you really want to win, I suggest sap/CSing. It saves you a premed, and that can be quite powerful after a vanish. They can Ice block through sap, and if you force a block by just sapping, well all the better for you! N52 spamming of sap is invaluable here. CS through sap if the coast is clear. For those who don’t want to spend time doing this (even though it is highly effective), you can just sprint in, premed-open and continue. Premed is safer, less frustrating for your opponent, and much faster, but it is not as effective.

Once you’ve generated your pre-combat points, either through sap/CSing or premed, it is time for the actual open.

Step 2: The Open.

Generally, like the priest, you either want to open when they have no shield on, or when they just newly casted a shield. Wait for this point.

A rogue has three opens to consider:

CS=2-3 combo points for 40e, forces a blink, keeps them immobilized for a split second, and usually gives you a second hit (like an Eviscerate). Can be used from any angle (a huge plus against those twitchy, ‘jumping around’-type mages that make positioning difficult).

Ambush=1-2 combo points for 60e and a massive hit. With talents, it is going to crit most of the time. Requires positioning and doesn’t control the opponent in any way (both of which suck). However, with MoSub, a successful crit Ambush-CB-(4-5pt)Evisc will flat kill any mage that isn’t packing stamina gear, and if it doesn’t kill them, they are at very low health.

Garrote-1-2 combo points for 30e, DoT, and THREE second silence. Three seconds against a mage is an eternity. This requires positioning. It is a DoT, so it deals damage, conversely, it prevents you from effectively blinding/gouging/sapping until the DoT is removed.

They certainly all have their strengths, and plenty of rogues will argue for each of them. I’ll admit a good rogue can defeat the most mages with any of these three. But, I’m more considered with what is the most optimal play. I’ll go in order of what I consider the strongest and explain why.

While I’m a control fanatic, and I do hate to say it, Ambush (especially with talents) is the strongest open you can get against a mage. Assuming precombat points, CS or Garrrote -> BS/Hemo/GS/SS -> CB-Evisc is strictly worse than just Ambush-CB-Evisc. All end with a blink into WE/Block. The question is simply, which dealt more damage before the turtle?

Against a mage, assuming pre-combat combo points, Ambush-CB-Evisc can easily see 5-6k damage in a single second. This is the only class that I absolutely prefer daggers in 1v1. As explained previously, massive singular blows win this match as it eliminates the viability of future action trees and the choke points that mages attempt to use to overcome our CDs. Ambush is a massive singular blow that is easily coupled with a 5-point CB-Evisc. If you have daggers talents, then this is where it is at.

I’m sure plenty of garrote fanatics will argue that “they can just blink away”. But, we have to really look at the time structure of the open->blink. Given latency and the small pause before a blink, you clearly still get a full 1 second against a mage after an open. This is a second strike against a mage before or on his blink (two hits). Certainly, garrote extends this to 3 seconds, and this is good, except Garrote really doesn’t do that much for you. Meanwhile, Ambush->CB (No global, just macro it)-Evisc will still hit every mage if you play correctly. It cannot be stopped when done from n52 spam with normal latency, and it puts on alot more pressure than other opens. It is 5-6k damage now. Garrote or CS leads into 2.5-3.5k damage now. All the opens will force a blink, the question is really this: what life total will they be at when they arrive? (And, will you be able to gouge/blind effectively?)

Cheapshot and garrote are actually nearly tied for a sub rogue. As a sub rogue, CS requires no positioning, nets you that 5-point CB-Evisc. Garrote requires positioning and nets you a 5 point CB-Evisc and 3 seconds of white + 1 tick of DoT. Against extremely twitchy mages, sometimes you might not have time or room for positioning. In addition, as I always sprint for my true open, I can often catch my mage on a gouge as I run towards their blink location post-open…garrote won’t let you do this. For non-sub rogues, garrote is the clear winner. Mut rogues get poison application and a mut in, and combat rogues can extend the silence to 5 seconds (AR early) with kick.

Choose your open. It is going to end up in the same place…the mage will blink, WE, shield if he can, and Iceblock when you catch up to him.:

Precombat points-Open-CB-Evisc. Just macro the open folks:

Open into a one-press, “take 3k damage” key:

/use AP trinket
/cast Cold Blood
/stopcasting
/cast Eviscerate

You want some mean damage to punch through. From here, especially if the mage is retarded (intellectually or lag), then you can maybe add some yellow to the frenzy. Unload everything you have until they blink. Just keep in mind that you’ll want to control the fight from start to finish keeping this mage on his toes. Be sure to shiv if you don’t see crip apply immediately.

The last part of the open is simple: know the direction your mage is facing and be ready to run in that direction while he is blinking. In addition, watch your castbars to know what he is casting, you may have a different response depending on what is cast.

From here, the fight breaks up into two trends. They will either poly/DD or instant you out. The first is usually from a fire mage and the latter from a frost. Look at their buffs and any debuffs applied to you, which type of mage are they? I will divide the fight into PoM/Fire and frost from here.

Step 3 (Fire)–Not eating the poly or the blast.

From the moment the fire mage blinks he will do one of two things: the good ones will PoM/Poly or just poly, the poor ones will PoM/blast or just blast.

If they do not PoM, then consider gouging/kicking/KSing. If you can land one of these hits before they hit you with their sheep/blast. If you don’t think you can make it in time or you see them PoM, then you have 2 options:

1.) CoS-reduces it to a 10% chance to eat a poly/blast, but sustains 5 seconds for you finish them or bring the fight back under your control. Unfortunately, as the fight is pretty fast, this will be the one time you can use CoS, so you need to make it count if this is your choice.

2.) Vanish-Premed- this is a guaranteed chance to not eat a poly, but if the mage is talented and you aren’t quick on the go, it is a chance for them to AE you out of stealth–usually CoC. On the flip side, most mages won’t have the timing to AE quick enough and you get a premed-CS on them for yet another 5 point eviscerate.

Personally, I’m already sprinted, and I prefer to vanish-premed into them, saving CoS for the rainy day…or for when I might lose control 3 seconds later. CoS has more uses that vanish, and CoS can’t be prepped. Better to conserve it for when it really matters. But, if your open is strong enough, you can sprint up to them and kill them within CoS, it is pretty common.

In any case, the mage is in a lot of trouble. Remember that KS is quite useful after a blink. It is a solid tempo advantage. They should not escape at this point. The fire mage won’t have enough control over you because you just won’t give him any time to use it.

Step 3 (Frost)–The control matchup

The frost mage is a pseudo-turtle. He isn’t a turtle in virtue of his direct hp or mitigation, but he is a turtle in virtue of his sheer survivability, shielding+blocking+nova/blink/freze/snare kiting. He will attempt to outlast you, pecking you with instants while he kites and reshields the entire fight. You’ll catch up, break through the shield, just in time for him to slip out of your grasp to start the cycle again. The skilled frost mage will not be using sheep, he’ll be aiming to kite and shield as much as possible while burning through your CD’s. The longer the fight, the harder it is for the rogue to win against a frost mage. With their 41 point frost talent, the Water Elemental, the mage will eventually out-CD us, overcoming our disruption, pummeling us with the control of kiting and peppering us with instants the whole way.

We are talking about multiple frost novas, ice lances all day (and they hurt when frozen), CoC+fblasts to keep us tender, armor to snare us, blinks to keep us blowing CD’s, a pet that deals decent damage and furthers the snare/root aims of the frost mage, double shielding which you will be forced to penetrate atleast once, usually twice, and up to 3 times in a fight–and on top of this they have the uber Ice Block. While it is not as robust as a bubble, it has similar qualities. Just when you controlled your way into an opportunity to deal some serious damage, the mage shuts down your gameplan, letting his pet eat at you, while he gets to blink to safety post block.

For a rogue to win, you must win in seconds. You want to force his CD’s earlier than they should have to be used at no cost to you. I always want to see early iceblocks and catching him with a blind before a coldsnap. If there was ever a matchup that daggers were just the serious bomb it is this one. It forces through so much damage before his next shielding, and begs an early iceblock. Sap/CSing is seriously a powerful tool here as well. Some frost mages will IB through sap (if they are stupid). Otherwise, it means you have premed for your followup open.

Basic lineup: Sap/CS-wait for DR-sprint-open-CB-Evisc-add as many hits as you can before blink if they are slow-

From here you’ll need to consider blowing either CoS or vanish. Which is it? I prefer to vanish against a top mage. We will see. Choosing between CoS and vanish is going to be up to how you are going to respond to their WE/IB.

A good frost mage will blink-WE immediately. WE is the monkey wrench. When you catch up to the mage, you’ve got a pet to deal with and an Iceblocked mage. Bad ones are Iceblocked with no pets, just restealth or spam on melt. To the WE mage, your responses:

1.) Deal with the pet and attempt to blind the mage out of IBlock.
2.) Vanish or restealth off, wait for pet to subside (mage will eat/drink up)
3.) Vanish off, reopen on the mage after block (avoid his AE): Premed-Open-CB-Evisc

Some rogues advocate blinding the mage (and I admit I do this often, but not because it is optimal in a duel, but more often because I know my opponent isn’t the skilled enough to have CSnapped out of block). The reason blind isn’t good is because a good mage is going to be spamming Coldsnap out of block. In the same way a mage cannot stop us from getting a 2nd hit in after our open due to latency and small pauses, we cannot stop a mage from coldsnapping out of block. As he controls when he breaks it, even if you are a miracle worker, he’ll still Coldsnap before Blind hits him. Your blind should still fail against a proper mage.

I’ve heard a few rogues exclaim the beauty of 1.), and in arena matches or BGs, I have to agree. This is the best route due to time constraints. But, in a duel or arena duel (1v1 left over), this is actually not the best option. Option 2.) or ideas similar to it are particularly strong in long matches. You burned his Coldsnap, WE, and Iceblock. You get to charge up and do it again. In arena, this can be very useful. You get blind and CoS back, and even vanish with talents long before they get their CD’s back. Using option 3.) is similar to its predecessor, only in eliminates the possibility of eating/drinking/shielding(in some cases).

From here, you’ll need to use CoS, vanish and prep wisely. A blind after his first iceblock (but before he may have coldsnapped) is very good if you are in range of killing him with a premed-Ambush or CS-CB-Evisc.

Tips:

a.) Good mages double Poly (even after the CC nerf). Be careful about trinketing immediately out of poly. You need to be watching his castbars so you don’t eat the second one.

b.) CoS is the end-all-be-all spell in this matchup. There are certainly pro and cons to using it early. If the fight lasts long enough, a 2nd CoS can be extremely demanding of the mage.

c.) KS can be extremely powerful after a blink.

d.) Deadly Throw can be absolutely spectacular. You can even activate Cold blood on it. Interrupting long cast spells (if they cast any), dealing good damage, and dazing them is really quite nice. With relentless, you can chain throw. Sap/CS-CB-CS-Evisc-Relentess-Blink-Start casting poly-Deadly throw….lol, hilarious.

This is a match that rogues should be winning, except against the best frost mages. Generally, it has more to do with your CD’s than your gear. But, timing, dexterity, and skill are king in this matchup.


Warlock-

We are the hard counter to this class. There is no class in the game that comes back on a warlock that opens on them, except a rogue. The introduction of Cloak of Shadows has made this match very easy. Huge drops in mitigation levels and warlock’s gearing up +spell damage, while often sacrificing stamina, means we have disproportionate gains in HP levels and pretty much buffed melee damage against warlocks as well.

Warlocks aim to use traditional CC methods and kite. If they can sustain their DDs/DoT’s, within the lock components of fel-intercept, fears, seduces, and deathcoil, then they’ll win in a pretty quick fashion. They are truly a fierce opponent against non-rogue classes, nightmares for most people. Luckily, stunlocking is extremely effective against a warlock, and almost completely eliminates their tactics altogether.

Regardless of spec, their DoT and DD damage is sizable, you always aim to avoid it. In addition, they tailor their play style with a pet. We really have three pets to concern ourselves with:

1.) Felhunter–High stealth detection, nominal damage. The counter is sprint and coming up from behind. Be wary of Fel’s on aggressive mode, as they will pull you out of stealth. Generally a weak pet against even a decent rogue.

2.) Felguard–A 41 point demo talent, the felguard is actually pretty good damage, I’d put it on par with an average hunter pet’s damage. What makes this guy actually troublesome is his stun intercept. Timed properly it can disrupt a stunlock and buy a warlock a DCoil. Be sure to evasion right out of your opener, it gives you avoidance and negates a great deal of the Felguard’s utility.

3.) Succubus–Back to CC 101. Seduce shares DR with fear, but it is quite powerful none-the-less. A pro will keep his succy far away, much like a shaman will keep his PCleansing as far away as possible. He’ll reinvis it asap as well. He’s going to try seduce/nuke you. Your trinket, wotf, and CoS are all good ways to break or make yourself immune to seduce. You can choose to kill the warlock despite the succy, or blind the warlock, kill the succy, and then deal with the warlock. Generally, it is better for a rogue to simply go straight for the warlock at this point, especially for all UD rogues. Sprint is invaluable in preventing kites, CoS can eat seduces if necessary. Additionally, seduce/fear/nuking is hindered in that the DR effects build up very quickly. Premed-CS-CB-CoS-Evisc+4-5 seconds of beatdown will kill all but the most stamina’d of warlocks using succies..

The rogue tactic is pretty much the same: burst him down within a stunlock. If the warlock is geared well enough, and my burst isn’t going to take them out, I prefer to save CoS for AFTER deathcoil/DoTs. CoS will eat his DoTs and give you a 2nd open. No warlock comes back after a second open. For second opens, when DC is down, Ambush is perfectly acceptable.

Step 1–Preparation and Open

Pretty straightfoward fight, 2x Crippling poison. Mind-numbing OH is acceptable as well.

Standard stunlock. Should go something like premed-CS-CB-Evisc. If you think they’ll be dead within 5 seconds, then feel free to pre-emptively blow CoS and kill them within that safety net. Mind you, a good warlock will not deathcoil while you are CoSed. Most anticipate that you’ll CoS at the end of a stunlock, and they won’t immediately spam it like they used to. So, if you know the warlock is good, don’t try and be slick and CoS his DC, just wait until after a DC and CoS. Depending on your situation, use a combination of CoS, Vanish, sprint, and blind to lock the lock. Pretty straightforward fight. Stunlock and win.

Step 2—Other warlock issues

It is best to save your sprint until after a fear/DC, primarily because if you sprint away while feared, you’ll have to sprint back, so there are no actual time gains from having sprint up during a fear. Assuming you saved it, sprint can be amazing in catching up to a warlock. Countless times after a warlocks opens on me, or DC’s me in a stunlock break I’ll just COS-Vanish-Sprint for the 2nd opener.

Stun resists are always painful, especially against a class that is unforgiving in regards to stunlock gaps. Once again, our advantage is SO large that vanish-CSing will make it seem like nothing happened.

Soul Link Warlocks can be a monkey-wrench type class. Yet, they are merely a shadow of their former uberness. SL-tanking took some major hits. You’ll see the glowing aura, and it is especially the case when you see that Voidwalker (VW) out. While their damage is substantially lower than other speccs, it has the strength of turtling. It is conceivable that we’ll see 20k-25k virtual HP warlocks in the coming months with SL. But 20k isn’t as big of a number as it once was. With lower mitigation levels, and rogue substantial CD-based burst damage, SL warlocks will still lose. As they can recast pets at near instant speeds, it is usually best to stunlock 100 to 0. You’d rather only have to eat through 1 pet+shielding than two. Blind seals the deal here.

Healthstones should be the in the back of your mind. While they might not be able to DC you during CoS, they’ll certainly be able to create a buffer with an HS that might last long enough through CoS to make you eat a DC.

Tips:

1.) Refer to CoS as “Cloak of Skills”…it is quite parallel to DC’s colloquialisms “Skillcoil” or “Lollercoil”..yes, it is that game breaking against this class.

2.) Kick all fears, seriously. No need to burn a trinket when you don’t have to.

3.) For affliction spec locks, you’ll notice they have a 2nd instant cast fear, an improved Howl of Terror (I.E. Psychic Scream). Watch for it.
Races:

Human: Watch for perception, it is 10-yards of stealth detection beyond what they already possess. You can come from behind. Sprint is good.

Gnome: Can break our snare.

Dwarf: Stoneform breaks all poisons and makes them immune. Goodbye crip/wound/blind.

Nightelf: 1xLevel of Stealth detection

Undead: Not much against rogues.

Orc: Stun resist, good gracious. Don’t let them talk smack if you lose a duel because they resisted 3 stuns in a row but played like a moron.

Troll: Not much to worry about.

BE: Possible to have a boost in energy if they blow their CD for it and have charges. Wait the charges out?
Taxes are nearly finished. We still have a few values to put in (trying to find those). I doubt we'll get much back (we are in a the lower-middle class tax bracket now--used to be upper-lower class). That is fine with me. I'm sure we'll be asking Dad to check over our stuff to make sure it looks correct. I don't want an audit or any trouble. The cool part: we are doing our taxes online. No paper work or jazz.

Speaking of finances, we have money saved up, now we just have to choose wisely how to use it. Things we are looking at:

1.) Paying off the debt (10k)
2.) Visiting Mom and Dad in Thailand (2k-3k total)
3.) Getting a 2nd car. (2-3k)

I think it will be very difficult to do all three of these. I may sell my WoW account to try and pay for some of it.

On another random note, my pants are barely fitting. I think I'm moving from 34-36 to 36-38. I am fat. I am stagnant. Lord knows, I am not one for stagnation. I sit in front of a computer screen more than anyone I know. (Such a special bond with my monitor). My uber-wealth allows me to be fat. Although, for L*nt (so bad it deserves a Bleep), I gave up deep fried foods. I can't believe how much I miss it. So fat. I can hear my mother now: &quot;well, go for a walk, exercise, yahta yahta..&quot; I come home from work pretty tired. I usually cook dinner. Exercising means I need to equip the baby up to go...It is a hassle. Would the hassle be worth it? Sure, I could wake up early and do it, but then I'd need to goto bed earlier, which would mean I missing out on Daily Show/Colbert (my source in so many ways). I don't mind working with my hands as long as my brain is not rotting away. Where can I do both? Teach...gym! Nevermind.

My life is good. I just need to remind myself of that fact. Sure, I lack purpose, wasting away in some senses, hate my job, depise the people around me, couldn't find a spiritual and intellectual home if I had to, and see no real way out of my predicament. On top of that, j3d1h still taps herself on the chest, pointing and saying 'momma'...she mimics, but she has no idea that words mean anything. What is this, The Miracle Worker? &quot;MMMOOMMMMAAA, it has a name.&quot; Will she ever get it?....of course, my wife is just as sunshiney as I am, so we are great empathizers. Other than that, yeah, I do have it good. I'm sure every parent goes through this stuff, whatever. Fulfilling my purpose might be selfish anyways, I've got k0sh3k and j3d1h (in part, my purpose in the first place, am I begging the question?) to consider.

Wow, I nearly sound Emo. I'll shutup.
I always wonder why people call me arrogant. What is arrogance? And, what makes them think I am arrogant? First, we'll need the framework to understand how arrogance can exist:

I have come to the conclusion that value is simply that, value. Everything worth thinking about, worth pursuing at all, has value. Presumably people have value, most would say very high value. People have high value because of their free will, their ability to make moral choices. Of course, we don't &quot;assign&quot; value, that must be innate to the action, idea, or object. We might say that our free will &quot;creates the possibility of value&quot;. But, if we are really begging the question correctly, we must admit that value pre-exists us. Our moral/logic/value-based choices simply reveal the already present innate values of this world.

Other questions come to mind, specifically how we can judge the value of a person. Maybe you've heard people have infinite value (it's a nice phrase to say, it makes people feel good). But, clearly, we could all be &quot;better&quot; in some way, and thus we aren't of infinite value. In fact, we are clearly less than whatever our maximum possible value would be if we are not perfect.

What does &quot;better&quot; have to do with value? Morality is the root of value. They are synonymous. To say something is valuable is to say it is morally good, and vice versa. Remember: morality literally means, what one ought to pursue...that is exactly what we mean by value. To say something or someone is morally better is to say it is more valuable.

Take person A and B, identical in every way, except A is slightly better in value-variable X. The difference in value between A's variable X and B's variable X is essentially the only difference in value between A and B. We must conclude that it is possible that a person can be better or, more specifically, more valuable than another person.

This, of course, does not negate the -minimum- value of a person, as we'd all assume it would be reasonably high. But, we must make the distinction that some people are better than others. Most hate this idea. But, it is undeniable.

We have all been taught, by the post-modern world, that no person is better than another. We want to believe that all people are equal. They are not! Do you think any of us are as good (moral=value) as Jesus? What about the Apostle Paul? What about Mother Theresa? These people, in virtue of their massive moral contribution, are more valuable than we are. But, value also extends even further. What about Michael Jordan? If Basketball and skill in basketball is important (i.e. valuable) in any way, then someone identical to MJ, but lacking only in MJ's basketball skill, then MJ would be more valuable. Value is very hard assess, but clearly it exists and so do the differences in individual net worth.

So, now that you have a brief metaphysical foundation of valued-based thinking in the realm of personhood, we can move on to the real and fairly narrow topic of arrogance.

What is arrogance?

Despite what you may have heard:

Arrogance means thinking you have more value than you in fact have. A person who is arrogant overestimates their value.

Now, now, it would be quite easy for the post-moderns who think everyone is equal to call someone who believed that he or she was better than someone an arrogant person. In the illusionary world of post-modern equality, anyone who thinks they are better is clearly arrogant by definition. But, we know better, we aren't retarded. There are more valuable people than others in the world.

So am I arrogant? Do I overestimate my value?

Many people think so. It generally is said to me in the course of an argument. I defend a position they don't like, and I refuse to think otherwise. I Know they are wrong, and I'll say it. People don't like that. How dare I think I know the answer? How dare I discredit them, and believe my answer is better than theirs? How dare I think I have better answers altogether? How dare I think my brilliance is greater than theirs!

Lol.

I often feel I'm more valuable than others. Of course, I value myself, and especially see that my thoughts as extremely valuable. I see no reason why I wouldn't be (I'm not saying I can't be wrong, but there are only handful of people who have what I have). I see my faults, I see my strengths--both are weighed in evaluating self-worth. I know when I'm wrong, I know when I'm right. If I don't have an answer, then I don't have an answer. I don't claim to be the most valuable person...but I do see value in my opinion (of course I would, I'm just an egoist right?). I have value in virtue of my genius....self-created,  not entirely. But, I how I use my mind I am responsible for...

Mind you! Your value isn't wholly based on your decisions. God may not have created all people equal, and therefore he may not have created people with equal value. So what!~ Why are we repulsed by this? Is it the &quot;Democratic flaw&quot;...where we so much would not wish to be marginalized or be at the bottom of the food chain that we play it safe and say there is no up or down, and everyone is equal. Do you really think everyone has a right to vote? F-no. Do you really think everyone is equal? Of course you don't!!! You only say it so that, if and when you found yourself in an unfavorable position, you could defend yourself under the false pretense of equality.

Getting on with it, misassingment of ones purpose and role can be indicative of being arrogance. I know my purpose is to think. To teach, I don't know. I know where I fail, but I know my success. This is not arrogance.

Most ironic are people's attitudes towards what they perceive to be my arrogance. Now remember, arrogance means one thing:Â  People generally hate my so-called arrogance because they are offended by the thought that I am more valuable than they are...These are often the post-moderns who contradict themselves in assigning and understanding the meaning and application of value in this world. They say, &quot;nobody is worth more than anyone else&quot;. Clearly, this is patently false. Some people are worth more than others. In fact, we each have specific and certain value, some higher or lower than others. I claim I am more valuable than lots of people, often in virtue of simply having more valuable trains of thought. Either 1.) I am being magnanimous and truthful, or 2.) I'm being arrogant, or 3.) I am being meek, and fail to realize my full value.

So what if I claim that? So what if I think I'm right? Did they really sit down to evaluate these? No. The irony is that they are steadfast in their foolishness. The fool is arrogant.

It is evident they aren't as valuable as I am. Their very dislike, their hate for my truth stems from the belief that they are equal to me. They overestimate their value, and they are the one's who are arrogant. How foolish are these people to think their ideas could possibly compete with mine? They overvalue their opinions and themselves. Ah, don't we love the problem of egoism?

Moving on, this egoist/arrogance issue triggers a basic protective instinct in me. I see the world of fools around me, arrogant egoists, people who think their opinion matters as much, if not more than mine. I cannot argue with them, I fall prey to the same argument. &quot;Well, of course, Mike, you are an egoist too, of course you think you are correct.&quot; is all it takes to dismiss me. Why argue with them? Why teach them? Why teach the unteachable? Why should I be concerned with them if they are trash. I must shield my family from their foolishness. I have become completely intolerant of incompetance.

Pearls before Swine. They don't deserve it because they don't want it. If they sought the truth, then they deserve that truth. But, I will try anyways. If and When my family is not vulnerable, then I may be more tolerant. Don't get me wrong, I put up with stupid people all day. But, to allow them to influence me is a different matter. We are chosen among a world of pigs and fools. We must protect ourselves from their arrogance.
What is Economics?

The word 'economics' is from the Greek for ο;span style=&quot;font-family: Tahoma&quot;&gt;ἶ&lt;/span&gt;Times New Roman&quot;&gt;κος (oikos: house) and νόμος (nomos: custom or law), hence &quot;rules of the house(hold).&quot; The word of course has morphed several times to include and consider several ideas. The earliest definitions of political economy were simple, elegant statements defining it as the study of wealth. Later definitions evolved to include human activity, advocating a shift toward the modern view of economics as primarily a study of man and of human welfare, not of money exclusively. Formally speaking, Economics currently refers to the social science that studies the production, distribution, and consumption of goods and services. How blah!? How bland!? How inaccurate!?...The tide is changing; the meaning of economics is evolving.;/font&gt;&lt

I mean to outline a trend in the meaning and pursuit of &quot;economics&quot; which I find, in large part, has been overlooked by even those who work in that field. Essentially, I am inclined to believe a.) The formal definition of economics is evolving and b.) Economics is verging upon the actual study it seeks (which is very surprising), and c.) Economists, who generally gravitate towards furthering economics as a &quot;science&quot; will come to find they have been pursuing something which they do not consider to be science (they may even be appalled at what economics really means).

Mainstream economics begins with the premise that resources are scarce, and secondly, that because resources are scarce it is necessary to choose between competing alternatives. Of course, because economists must analyze the meanings of choosing between alternatives, understanding choices by individuals and groups has become central to modern economic theory to an extent that psychological analysis and decision/strategy-making concepts are now the cutting-edge of this field we call &quot;economics&quot;. Economists believe that incentives and desires play an important role in shaping decision making. It seems like I've heard these claims before *cough....Only fairly recently have economists begun to speak the name of their true (and supposedly new) doctrine. Economists now borrow concepts from the Utilitarian school of philosophy, claiming utility is used as 'analytical' concept within economics, though they claim to appreciate that society may not adopt utilitarian objectives. They are begging the question about our motives and decision-making, as if egoism is absolutely true, but then they go on to protect their beautiful secular “science” with a contradiction saying &quot;it doesn't apply to everything&quot;. 

This concern with utility is most prevalent on a microeconomic level; some economists extend economic analysis to all personal decisions (ahha! a smart lot of them). Of course, it is easier to see the &quot;math&quot; behind individual decisions, and so, as macro-utility is much more complex, it hasn't caught on as effectively. Butterfly-effect anyone? An alternative can be thought of as a vector where the entries are answers to questions like &quot;How many eggs should I buy?&quot;, but also &quot;How many hours should I spend with my kids?&quot; and &quot;Which candidate should I vote for?&quot; These micro-economists, which appear to be &quot;rogues&quot; of their subject, on the cutting edge, are simply extending the meaning of utility within economics to what philosophers have always understood utility to mean. Economists are on the cusp of the meaning of value (one that implies morality!!). How dangerous for them...

As usual, economists will blather on, saying that the relationship between economics and ethics is so &quot;complex&quot; yet &quot;separate&quot;. Many economists consider normative choices and value judgments, like what needs or wants, or what is good for society, to be political or personal questions outside the scope of economics. They go on to say that once a person or government has established a set of goals, economics can provide insight as to how they might best be achieved. It is odd that economists have this separation of positive economics (&quot;what is&quot;) and normative economics (&quot;what ought to be&quot;). They cannot be divided. In order to do solve positive economics, you'll be forced into making normative economic claims. Blind people. The transformation of the subject begins.

Anyone who knows anything knows that utility is unforgiving and completely universal. It mathematically divides up metaethical values among the many things of this world (although we do see amoral strains that act as a social virus—eventually contradictory). It is all or nothing. If you claim egoist utility, then you’re going to be applying this reasoning to all aspects of life. It is ironic, and blatantly compromising of their thesis to apply utility only in matters of wealth, but not to all areas. What has occurred is that a formally “secular” idea has evolved several times into a pseudo-science which requires psychological, mathematical, and now philosophical analysis to determine the who, what, where, why, and how of “wealth”. Moral claims are not secular ones. And, this pseudo-science is less and less secular (much to their dismay). The irony of Economics is that their “study” required them to work through a great deal of things to adjust their initial definition of wealth (and value), only to discover they started a hollow study. Economics, after looking at its conclusion and where it is heading, is not a synthesis of other fields, but simply a direct portal into already existent fields of study (namely philosophy/religion).

Economics began as some study of money. Probably, much as the alchemist who wishes to turn rock or iron into gold through some magic item, the original economists sought to make money through the mathematical study of an &quot;economy&quot; (which is some vacuumous space that somehow relates to the world, we know not how). If only there was some formula in which economists could crunch numbers to decide &quot;which stock is going up today?&quot; Of course, these economists (frontiersmen, pioneers in a &quot;new field&quot;) quickly found that they had more homework to do before they could reach these riches through simple deductions. (Although, one must ask: &quot;what are riches&quot;...something they should have asked long ago). They conclude that money makes you rich.

What is money? I'll be brief; it is the quantification and qualification of value that allows for universal exchanges within a world of comparative advantages. My time here becomes your time spent there. Value my friends, money attempts to represent value (albeit, it does so poorly). In reality, the economist no longer seeks to study money, they wish to study value. 

The concept of value is central to economics. Economists say that an observable measure of it is market price. Again, they see value through a lens of pure material wealth. Hard currency lends credibility to this &quot;value&quot; concept. They assume that value in economics is DIFFERENT than say, &quot;moral value&quot;. Dumb! We already know that value is value, and that it exists in virtue of its worthiness of pursuit. There is no difference. Morality, therefore, must have a price tag, else money means nothing. Economics, in virtue of studying value at all, MUST be a study of all value. 

But, if it is a study of all value, then it is a study of morality! It is the study of God! Isn't economics the pursuit of truth? Isn't economics just pointing us towards the same thing as philosophy and religion? Think back. What is &quot;wealth&quot;? What is &quot;value&quot;? They are those things which are worth pursuit! The economist claims that money is worth pursuit as it is a currency that translates for other values. While they look at monetary decisions, and begin upon utilitarianism, they are blind to the very basis of their subject. 

We do have to ask some questions though. If money really does have &quot;value&quot;...then it could be used to trade for other things of value that we wouldn't have expected. All things which have finite value can be bought with money, correct? Would this allow you to buy a person if a person had finite value? Or...what about exchanging money to makeup for negative values you've imposed on the world? What is &quot;production&quot;? 

A new light shed on economics as a study of true value means we are forced to redefine key principles and components of a subject that once dealt exclusively with material wealth, translating a small study into an already much larger one that involves metaphysical value to be considered. Or, we could just scrap it. Now, while economists are slowing progressing towards the inevitable truth, I question whether they will ever take that leap. Would they be willing to accept these statements? Probably not. They are likely dogmatically complacent in their religion of money. Economics is a falsely secular concept. They use utility and egoism to defend material wealth. Idolaters.
1.) k0sh3k got us in the E-town Swim&amp;Fitness club. That is so expensive. She promises to use it though. If she does, then it is worth it I think. She'll have fun, the baby has a cool daycare program there too. It could amount to relatively cheap entertainment per hour if we use it enough (I think I'll enjoy racquetball, swimming and weight lifting the most).

2.) We had a busy week. Got our online banking to work (finally). Paying 5k of debt. Got our taxes nearly done and sent mom&amp;dads w2s to them. Looked for a car (unsuccessfully). Cleaned that fridge out (I can't stand messy fridges). Found k0sh3k's wallet (in the most obvious place of course).

3.) For some odd reason the Farley's haven't been by for their piano lessons. No idea why.

4.) We've decided to try and simply move to Thailand asap. We will knock out the debt, create a financial buffer, find jobs over there, sell the house, and move. It should be an experience. Close to 8k in the bank right now, 3 after the 5k payment this week. Estimating it should be a few months.

5.) Picked up my Birth Cert. online. I expect it in 3-5 days. I'll ask for a bit of time in the morning off to go and get my passport.

6.) Work is hilariously dull. Timed myself this week: 8 hours of work finished in 1.5 hours. Hrmm...I wish my management could recognize these numbers and do something about it...say, scale my pay with production? How about just let me go home early? Or, even better, let me work at home!! I could easily do my job at home, I have all the equipment, and this is ENTIRELY an E-business. Nothing goes on paper. They may consider it. It would be even cooler if I lived in Thailand and kept this job over the net. Wouldn't that pwn SO hard? 12 hour time difference, so I'd need to make calls between 8pm and 8am Thai time. Eh, whatever, for 30k+ a year, staying up late or waking up early to to squeeze in time would be worth it.
Well, I’ve botted 10k G or so on my Rogue and spent a great deal of that. I have 2k left, nothing to buy. Fully enchanted. I’m without question the best 1v1 player on the server. But, for the life of me, I can’t find a good teammate. Lots of decent ones, Zombienoir and Aesop do a good job. However, it is clear that they are still not top notch. I call blinds, sap, target switches, and focus fires…and they aren’t quick enough. They just haven’t mastered the ability to talk/listen on ventrilo and play at the same time. We are rogues…we don’t break the 1850 rating without high levels of communication. So, arena is failing for me. Too bad dueling is gone. I’m tired of it.

So…..I start a warlock. Botted his ass to 30 real quick. I expect him to get 70 in 2-3 weeks. Gearing him up won’t be very easy I assume. +damage/+stam are the stats I’m looking for, and those are highly sought after. Drain tanking pwns. It is the beauty of resource conversions at its finest in this class. It exemplifies the very principles of offense/defense ratios. It is beautiful–the core of economical comparative advantage.

What is drain tanking? Easy. Load your target with DoTs, and used a very improved Drain life to convert mana to hit points while dealing damage. Chew through mana with lifetap. You have NET gains in many fights. The less you are hit the better. From my math, it looks like Dark pact (just eating my pets mana for mine, stupidly good) will put this tactic over the top. I’ll go succy for spirit regen on his mana and taking adds.

Getting used to the global CD going from 1 to 1.5 sucks though. Timing is very important for the class though. Long cast->instant->kite-repeat is common enough.

Reminds me. F’ing warrior 5-6 levels above me jumps my character while botting. Looks like my bot did very well against him (D-tanked him though, pfft). I come back, kinda pissed…I go for him. I dance him to death, literally keeping my 36 yard spell reach, but outside his intercept range. Eventually, when I softened him up (he was running for his city, kiting me as I had kited him earlier to ours), I actually let him double back on me. Ate my fear, and that was she wrote as he ate Incin+SB+Nightfall’s SB. This class is fun. I feel like a necromancer again.
I've written several times on this idea of Value. For some reason, I've always had a disconnect, and never universally applied this concept. It is elegant and foundational. I've long thought about how one deductively arrives at &quot;what one ought to do&quot; and the existence of God. Inevitably, there are complications, and further building blocks that I must reason through. Epistemological and metaethical concerns are so germane to the problem that we can't move on without first going through those small, but highly relevant claims. The beauty of these building blocks is that they really beg the question for us (something I'm not usually for). Without initially accepting the concepts of value and logic, then there is no point to continue. By assuming these are true, we make way, in virtue of the question-begging, for deductive claims that are much easier to establish, even within a world that more and more wishes to remain &quot;secular&quot; and apart of &quot;value and logic judgments&quot;. Value and logic must be universally applied; after all, they are the foundation. They solve our complications, and they are the first step in our deduction. It knocks out nay-saying post-moderns and relativists. We have a base to work from--one that is the root all others things. It connects so beautifully with all other deductions in the chain. It is the filter by which we can have truth and meaning. So, I'm glad to have a solid starting point in my isolation and application of value. It knocks out most all of the arguments that are against us. You are either for value and logic, or you have nothing to say. The synthesis (and adjusts to be made) of all possible values into a single and universal value gives us leverage. There is no difference between moral value, economic value, and whatever else. There is one value to consider. Is it worth pursuing, and how much is it worth (pursuing)? s

While this doesn't seem like headway to most people (if they even saw the distinction I'm talking about), it really is...Not a person I know really applies these meaning universally. They don't breathe the concepts of value and logic, nor do they extend and consider their meanings in all situations. This is a common disconnect; and I do find that at some level, we are all guilty of betraying the system. We have a rock-solid starting place. It is quick and obviously true; it separates the wheat from the obvious chaff immediately. I am pleased.&


 
This means that our starting foundation is Utilitarian in nature. What is &quot;useful&quot; is simply pursuing that which is most worth pursuing. But, wait...&quot;pursuing that which is most useful&quot; is a principle. Mmm...Deontology and Teleology may co-exist in this context. By following the original principle, one can implement utilitarian deductions. But, the deductions made follow that &quot;rule-utility&quot;. While most rule-utilitarians would not want to place value in the &quot;rules&quot; themselves, clearly the very path by which you must choose has the most value in and of itself. The rule is valuable. The principle remains. We have the makings of our next step (which must be drawn out), the synthesis of teleology and deontology. We cannot accept that damn triangular approach to ethics. There is only one way.
Yeah. I’m getting tired of WoW. Who would’ve thunk it? I see that Blizzard will never adjust the game correctly. We are mere mortals after all..but you’d they think could have done a better job than.. that (/point)…atleast!! Imbalance is terrible. Itemization is now reaching that threshold of utility where you either have it or you don’t–I.E. skill has diminishing returns, or even worse, isn’t necessary.

The lock, eh, he does pwn hard. He isn’t a rogue though. Once you go stealth+stunlock, you never go back. Mind you, I’ve chosen to go for the awful 30/0/31. I’m lacking imp gouge, some camo/mod, and deadliness (ouch!)–but I can still hemo-stunlock. Eh, I stick to daggers though. It is hilarious to just premed-Ambush-CB-Evisc when the time comes. Countless times I’ll remove that pesky healer from the group, and we take them down because I broke their matrix. I feel like the other part of a rogue in this build…not so much control (albeit, I still have it when I need it), but burst.

1v1 is nearly gone (and that saddens me). I hate losing because someone else screws up in group. I have had 10x the skill of the combined opposing team, and we still lose because a.) skill doesn’t mean everything in a gear and class-config’d game and b.) skill isn’t calculated fairly in the group v. group equation (not that it is fair in 1v1 either). Whatever.

The worst part is that I’d love to play with Allen…but he really doesn’t have what it takes (no worries, I know he doesn’t read this blog, I’m TL;DR for him, and he is “so” busy, lol). He is absolutely terrible at video games, and his rogue, which requires a buttload of skill to actually perform decently, is no exception. He is such a combat rogue at heart…I.e. a zerg it down warrior-type that wants to play as a brainless zombie.

Now, certainly I am patient with the inexperienced. I’ve taught countless rogues howto stunlock or take particular classes. I’ve taught some so well that I never have a chance if they open (which is saying something in TBC, because I never get 100 to 0′d anymore), regardless of gear. But, Allen will never learn, and he will never be good. Allen doesn’t have the will or way to learn. Seriously, he’s slow both mentally and physically. It requires a great deal of effort, and honestly, usually he’s too lazy or full of pride to sit down learn and execute what is best. (He was the same in EQ)

“Storyline” *sigh…He doesn’t play a game. I somehow wish he didn’t enjoy the narrative, mostly because–the narrative is stupid and childish. If you were 6, then I’d say, yeah, go for it. But at 23, you should be mature enough to not be sucked in by the lameness of the “storyline”. Play the game to win, simple.

Oddly, this sort of rant probably is against most all players of this “game”…I’m tired of being surrounded by incompetent fools (not just in the game either).

Unfortunately, Ebay doesn’t want me selling intangible goods. Yikes. Where can I sell it then?
Bah! There comes a point where a good deontologist simply has a very hard time partaking of any aspect of life. We become passive, even though we aren’t neutral. 

How could I possibly explain what I’m thinking to others? How could I possibly walk through the argument, especially for those issues which to most people don’t even seem to warrant a discussion in such a direction? 

I seem dead. But, I am not. I am fully aware, and fully here. I don’t participate because I cannot. I am standing by my principles…and in large part I can’t be disciplined and forthcoming at the same time.

Why be reclusive? Because the world is crazy! They are stupid. They are wrong. They are too ignorant to be enlightened. Ivory tower, no. Protection from the world is all I seek. 

Everyday I am sucked into it, and I climb out…I escape. Escape to principles and truthseeking. Escape to thought. I Escape to Reality.

Some days I feel like the smartest person in the world. Other days, especially when reading history, I don’t feel like that at all. A lot of brilliant people lived. A lot of amazing things have been accomplished. There are people who can do things I can not…and vice versa. It is a little of both.

Do well with what you are given. Arrive at the Will of God. The means to this goal, and attaining a resembling will is all that matters. This is enlightenment. Whether you are brilliant in mathematics, art, physics, reading…what have you, these only HELP to get you to that end goal. They are important, yes…almost exclusively insofar as they help on to reach that goal.

I think my gifts aren’t easy to point out. I think mine are judging fairness/justice and redefining concepts, adjusting what they should mean to reflect reality (I.E. judging and interpreting). Now, I’m not saying I use or apply these perfectly. But, it is clear that I have a wealth of insight in whatever I do (with the ironic exception of my own life!).

While I don’t have “obvious” direction in my life, I choose VERY carefully. I am wrong sometimes, but rarely. I know what I know, and I am in my element dealing with the abstract. Combined with my distaste for so many things, it makes it difficult for me to be of use to the world. Maybe God placed me here to just be here to think about this sort of thing (would He have use for that?....surely He would want someone searching out and praising His brilliance!)

I have that hidden fear I will never contribute to the world. I bring myself back and realize that IÂ exist for my family and for God....I know that I may just be one of the smartest Janitors on the planet. The world needs smart janitors. 

Seek God.

God has granted me wisdom in many ways. I need the patience and will to use my gifts.

While I’m certainly a passionate person, I feel choked as a…computer. God has granted the knowledge, but not the ability to communicate or use it effectively. Ironic.

I think my tattoo is superb. It holds my deepest belief and desire.

I know I don’t belong here. It can suck to be….different, you know? I need a light for my path. (Who doesn’t?)…You know the feeling, the intuitive tug…the immediate reaction when you have stumbled upon what IS right and what is fit for your purpose. My wife was this, my major was that, my deepest sorrow for the innocent and a pursuit of knowledge (and its distribution!) must be as well. 

(Wow, I’ve blathered on…structure people, structure!)

&lt;font face=&quot;Times New Roman&quot; size=&quot&lt;font face=&quot;Times New Roman&quot; size=&quot&lt;font face=&quot;Times New Roman&quot; size=&quot&lt;span /&gt;

&lt;font face=&quot;Times New Roman&quot; size=&quot

1.) Bought a car. 1200 for an Oldsmobile Cutlass (Supreme, oh yeah?) with 110k miles. It idles high, always 1k RPMS higher than it should. Nothing dangerous in that aspect. Although, I think the ABS is on permanently (which it really shouldn't be). I'm thinking it was worth the 1,200.

2.) k0sh3k got a new doctor. This one takes her seriously and really seems to think there is more to consider that &quot;just being a mom syndrome&quot;. k0sh3k has new med's (which seem to be working so far?) and has a CT scan today.

3.) j3d1h can drink out of a straw. She shakes her head &quot;no&quot; as well. Seems to be pronouncing sounds that resemble words more than babble.

4.) JRE came over for his GRE's. He did alright on the test from the sounds of it.

5.) Still need to fix that bathroom, fix Claudia's car.

6.) we are going to take care of another family's kid after school while their baby is having surgery in Kosair (yeah, pretty serious).

7.) Found out there is no spring enrollment for Talbott. Eh, ok. k0sh3k and I will wait a year then. We could use the time I assume.

8.) Mom should be coming in about 2 months (I'm going to try and find the dates out from her). I think she will be kind enough to take j3d1h for us and let us escape for some R&amp;R.

9.) Oh yeah, I said we were going to Talbott...this was because we need an education before we goto Thailand. Perfect programs for us there. Will be 10k tuition per year for both k0sh3k and I together--dirt cheap.

10.) The organist for Memorial sang high praises of my piano student Caleb Roberts. The kid is pretty serious (as far as his personality)...I knew that kid was cool.

11.) My back is spasming, it feels very much like what happened to my neck a while back. But, thankfully, it isn't nearly as intense. No passing out, yay!

12.) A and J (no title required) are forced to find a new place to stay. I don't think the owner of the house will be able to salvage anything. Good luck to both parties.

13.) Yeah, I hate my church. The Sunday school class is the best thing (and even then, it can be truly lousy...&quot;everything for appearances&quot;). I don't feel satisfied at all in church. I walk into service, and I can smell the stench of hyprocrites. Easter was the worst. On Easter and Christmas we will always have the attendence of the 2-time a year &quot;christians&quot;...these people are half-breeds, they are filth. They are defilers. They are the &quot;good people&quot; who lead the world to confuse Christians with...that trash. All or nothing people. They are less than the unbeliever. I am disgusted to say the least. I sit in silence.
Hmm...It has been a week. I'm ready to sleep.

Last night j3d1h jumped off the couch face-planting a book (and she is heavy, so that really can do some serious damage). Damnit child, how many times have I told you not to do that!?!11!? (jk) Anyways, her top tooth split open her bottom lip pretty well. She had blood gushing everywhere. We freaked out.

I didn't know how bad the situation was, so I reacted as if it were the worst. I soaked up blood and made sure j3d1h wasn't choking on it. I applied some pressure with a towel wrapped in a ice. (yeah, I know, I'm stupid). From what I understand, the head bleeds well (although the mouth regenerates quickly). In any case, it was a serious matter and I was a desperate parent--I do not take things lightly.

Of course, the cut wasn't that bad. But, at the time, I didn't know if this girl had a lip anymore or not. My main concern was making sure she wasn't going to bleed or choke. Lord have mercy, there have been very few times in my life where I was so filled with fear. That is one of the worst feelings in the world. 

We called our doctor immediately (busy)...we weren't going to wait. We called Janet-- Janet said it wouldn't hurt to have it checked out. While k0sh3k was on the phone I got j3d1h to calm down (and I calmed down too). The blood was coagulating (sp?) and the lip growing big. I sit down with her, she's past the shock, and then she realizes she's still in pain (and I know the difference in cries, I don't respond to whining, but I know this one hurt even from the sound coming from her mouth).

We examined her lip (had to pull it down and out to see the full extent of the cut). It was a decent length, but we couldn't tell how deep it was. By this time, I know my child is safe, so I've changed from surival mode to problem-solving mode. The cut was pretty deep though, and we decided to goto the hospital, even if it was likely j3d1h wasn't going to get stitches.

j3d1h was doing okay while distracted ...so we didn't know whether she needed to see the doctor or not. Better safe than sorry, right? So, we head to the hospital ER, check in, and the nurse brought a doctor into the triage room to see if the cut needed &quot;suturing&quot; as they put it. He examined my screaming child, and could not make a conclusion right then and there... (wtf, why not?). So...we wait for some crazy amounts of hours. After it gets 2-3 in the morning we finally in the actual ER. At this point, my child has been asleep on my neck for a bit, so she gets MIGHTY pissed off when we enter the ER. And, I mean, this girl was ferociously angry. She flat squalled for another 1 hour while we sat in the actual ER. I don't blame her, it was late, she should be sleeping, and instead she's bleeding out of a painful cut on her lip.

They examined her again and they decided to suture. Whether they decided to suture because we had stayed for so long (as if we might have attitudes of this trip to the ER being a waste if they didn't do anything) or not I do not know. I think the head doctor gave valid justification for the stitches.

Let me tell you the worst part of my night: four people (me included) holding my child down while she has her lip stitched. We didn't just hold her down though. A kid that had been nearly unwillingly awake and screaming for the better part of the night, who generally dislikes any sort of restrainsts placed upon her, was literally fitted and strapped into a device designed to force the child into submission and stillness. My child, who is is truly my child, did not submit. Yet, still, the huge straps choking her body down to the board behind her did not contain her fury. I had to do it.

While I don't really care if I got stitches or whatever, watching them open, close, prod, and stick my child's wound over and over again while I not only sit by and watch, but help them do it by securing my child for her torture session, was traumatic for me. It had been a long day and an even longer night, and now I was helplessly required to force my child to endure that mechanism of submission so that the needle, tweezers and wires could be used to stitch her lip. She fought the whole time, choking on her blood and snot. Through our containment of the child, Her face and her limbs were compressed, almost to the point of bruising. Man, I didn't want to do that--I'd give anything not to have to do that again. I know I had to do it.

I don't know which is really worse: a.) being helpless, and not in control of my child's future and welfare (like the beginning) or b.) Causing my child great pain, even if it is best for her in the end (you sit there and do it, it isn't so easy as you might think)

I realize these are both two different coins, both with different sides (and I have mixed, yet exceptionally strong feelings regarding them). The first eventually leads to my child making her own choices (good and bad ones I assume), choices that will be meaningful one's in God's eyes. I hear that is a pretty necessary precondition to be of value to God. The second is useful, it allows me to cultivate a fruitful child in the end, one that will be passed over as Judgement falls upon those who did not have her painful training.

What a night.
Wittgenstein was wrong (a box of contradictions). As brilliant as his understanding of language may have been, his dissection of &quot;form&quot; is clearly flawed (upon which rests a great deal of his theory). Form is pure logic, it is required as a base for meaning. F-ness must exist, or we have no true reference and no value base from which to communicate or think. Wittgenstein, like many others, does not understand this. Of course, we can all deny that &quot;metaphysical object in the heavens&quot; which contains the truth-meaning of X, but they go on to deny even a simplistic understanding of form as a tool to categorize (which form is more than just a categorizer). The truth is right after a &quot;body in the heavens&quot;...it is still a concrete necessity of the universe.

Ironically, his one base example used to defeat the validity of &quot;form&quot; is...(drum roll), the &quot;form of gaming&quot;. I own this guy. I can certainly see why he made the mistakes he made though. His questions regarding how a game could possibly have a form stemmed from some complex issues. My essay answers his questions, restoring the dignity of the form. The denial of &quot;form&quot; (or as my dad would prefer, &quot;logos&quot;) is founded upon a lack of disciplined thinking. Moving from &quot;scissorness&quot; to &quot;gameness&quot; is a perfect example of that slippery slope where we can think that &quot;forms&quot; just might not be a universal necessity. It is easy to identify and validate &quot;form&quot; in the context of something as simple as scissors; but it becomes so complex and difficult to understand the form of other things (like game) that even the best philosophers of this century will give up, and consequently, they deny the the universality of form. Essentially, whether they can identify the form of something or not is irrelevant to the fact that forms must exist.

The trick to the form is that is more than mere semantics or words. We can't just think of form as a way to categorize things, it must be more than that if we wish to actually reference something. F-ness requires it is real if we assume what we say makes sense and has an honest reference. We beg the question of forms, but we fail to realize what we have begged. When you say &quot;white&quot; you are referring to &quot;white-ness&quot;...either a.) you aren't thinking of anything actual, and what you've said is completely non-sensical, or b.) you have referred to something real. For any meaning to exist, you'll need to assume the latter. Tough beans.

This issue, alongside the books I've been reading and the essay I'm working on, brings me to an odd disagreement that I have with my dad. It is this issue of &quot;semantics&quot;...

Don't get me wrong, my dad is as smart as they come-- seriously, he is brilliant. He has a wealth of knowledge in many areas which he can use to synthesize and deduce conclusions which can be fairly extraordinary. So, when my dad says something, I tend to listen (and think). While I've never fully understood the problem he has with what he refers to as &quot;semantics&quot;, I'll do my best to describe and consider it. (Beware strawman!)

Formally speaking, semantics (ironically) means: the study of language meaning. (Of course, debating the meaning of semantics has to be the funniest thing I've heard all day.)

My dad knows the dictionary meaning of semantics, but when he says it, he uses it in a pejorative sense-- much like how one dismisses an argument as mere &quot;rhetoric&quot; (rather than substance), my dad (like many of us) describes some arguments as merely &quot;semantics&quot;. There are good reasons to do this, but I think we have to be cautious in our use of this word. In his uhh...tone of disapproval (which is most often deserved), as he calls out &quot;semantics&quot;, he seems to point toward a type of argument that is inauthentic, invalid or false, usually one blurred by ambiguous wording, which lacks logic, relevancy and true meaning. Clearly, he doesn't mean the dictionary meaning at all, he just means to say that the speaker is twisting word meanings or being ambiguous to arrange a false argument in order to justify something that dad believes can't logically be justified. Namely, if we corrected the &quot;semantic&quot; issues, the argument falls apart. Clearly, every false (whether valid or invalid) argument in the universe is based upon what he refers to as &quot;semantics&quot;.
I think his favorite example might be this guy we laugh at: Paul Tillich. Ever read something from this P.T.? P.T.'s arguments are like water. There is nothing solid to grasp. While we might be able to chart out a few syllogisms, and definitely see the 1+1=2's and the If A then B; A; therefore B's, we have a huge problem with the very meanings, definitions, and words used in those false syllogisms. P.T. never goes to fully desribe or defend the very meaning of some variables in his equations. Because his variables aren't fully fleshed out or meaningful, his greater argument made cannot have meaning either. P.T. rides his use of &quot;semantics&quot; or unjustified redefining and use of terminology to lend false authority and validity to his end arguments. It is easy to see he has poor arguments because it is easy to see how he weasels his way into false or useless word meanings.

In reality, when we call something &quot;semantics&quot;, we just mean that the meaning of one of the premises is distorted, illogical, or meaningless. While the argument can be logically &quot;valid&quot; in some broad sense, its conclusion (the sum of the premises) is false because at least one of the premises is false. Or, in other words, semantics, in the way dad uses it, must really just point toward any untrue-valid argument by definition, as it is obvious that every untrue-valid argument is flawed not because of any strict validity argument, but rather because of some illogical or meaningless piece of language in one of the premises.

For example:

If A, then B,
B
Therefore, A.

This is an invalid argument, even if Premises 1, 2, and even the end result of 3 are true. Or, to fill in the gaps with an example, we can say:

If it is raining, then it is wet outside.
It is wet outside
ConClusion: It is raining,

Invalid. Clearly there is some causal link that must be made from 1+2-&gt;Conclusion. But, stand that aside, and realize that this is in valid in virtue of that broken causal link (so we can't claim &quot;Therefore&quot;), and we can easily see that 1, 2, and 3 could be true, we just can't deduce 3 from 1 and 2.

This is the invalid argument, and it is not what my dad means by semantics. Dad means that an argument is valid but false. So, we start with a logic-shell that works (making it deceptive, as we want to think of valid arguments as true ones when we aren't completely disciplined in our thinking), but still have a false argument due to semantics. The perfect example is a counterfactual.

If santa clause is real, then X.
Santa Clause is real.
Therefore, X.

It doesn't matter what X is, X could mean anything, even something illogical. Why? Because the &quot;if&quot; can never be true, i.e. it is semantically non-sensical, we can say whatever we want about X and it doesn't matter. A person can justify X if they can make you accept the object of the &quot;If&quot;. All arguments break down into base syllogisms. In the end, you have to go claim by claim, word by word, and assume (and be willing to defend) each meaning. This is just a requisite to logical argument. Our disagreement with the above is not from an initial validity issue, clearly it adds up, rather it is the false meaning placed in a premises (namely premise 2).

&quot;Santa Clause is real&quot; is such a base premise (basest of basest, as premises are actually conlusions themselves formed from sub-premises, and so on and so forth until we reach statements like X is true). Most just shorten this argument to &quot;Santa Clause&quot; and the &quot;is real&quot; is silent (and assumed). Obviously, &quot;Santa Clause&quot; lacks meaning, it does not align with reality. This is what dad must mean by semantics. In virtue of a distortive, ambiguous, or meaningless word(s), one or more premises is false, thus the conclusion isn't justified. Clearly, this is simplified, but every &quot;semantic&quot; argument MUST boil down to something of this nature.

I think I prefer just to say that a premise is false. It is clearer to think in this fashion, but much more difficult because we will be asked to show which exact premise is false and why (something we aren't always capable of doing). Saying &quot;semantics&quot; is short, but not very descriptive when you haven't fully fleshed out its meaning to your audience. I think we should leave the meaning of &quot;semantics&quot; as it is...a purely good and reputable idea. An undeniably true and necessary concept. The denial of true semantics is the denial of form and absolute, DISTINCTIVE truth, which is just relativism (which I've deduced is undisciplined thinking in any respect). Dad, of course, would never deny true semantics. He has the same passionate hate as I do for poorly made, ambiguous, and especially deceitful arguments that justify corruption, sin and irrationality. Semantics is clearly necessary, it is the basis for all argument, as we cannot have premises without words and absolute meanings to construct those arguments. So why do we say &quot;semantics&quot; instead of just explaining why an argument is wrong?

Clarity and distinction are not some unnecessary hairsplitting. They are required. Unfortunately, it can take a great deal of time and effort.

I think sometimes calling an argument &quot;semantics&quot; can be used in situations where we don't have the exact reason why we believe a conclusion isn't justified and we don't want to spend the time to find one. Both dad and I sometimes refer to things as &quot;semantics&quot; without fully having justified what we mean or why we think an argument is false. Often, this is because don't know the end answer, or because we can't articulate the answer, or because don't have the patience to truly dissect an opposing argument correctly. We have to be careful in how we dismiss arguments, sometimes we haven't dug deep enough to honestly make those claims.

Lol, wow, this brings back memories. I remember before dad left for Thailand that he offended me one day by saying I was just using semantics. Of course, as a philosopher (and somewhat of a literalist), I took that as an unfair dismissal of both my argument and even my life-pursuit. I don't think dad meant the latter. But, I'll be glad to clear up what he means by semantics.

Even the subject of &quot;philosophy&quot; is a shrouded mystery with my dad. Sometimes he likes it, other times he treats it as heresy (I'm no different). He is a pragmatist. (strawman?) I think he doesn't always see the point in pursuing ideas if it doesn't show obvious physical results. The actual pursuit of truth for the pursuit of truth may not always seem reasonable to my dad. And why wouldn't he think so? Ideas need to be useful to a utilitarian! =) Ah, but that is another topic for another day.

Now, of course, I do not want to be accused of grandstanding or limiting what is posted on my blog to only my arguments without giving anyone a chance to disagree. I don't mean it as some unfair exhibition of my thoughts. Honestly, I write whether anyone reads or not just so I can organize my thoughts (although, I do a piss poor job). Feel free to post replies!

Oh yeah, Umlaut is a funny word. I think of a german thug bellowing it. Wittgenstein was a thug. Ghett-o-matic.
Look inside yourself. You know there is a struggle. You have to make the decision to do what is good or to do what is evil, you will fail someday in this choice (probably many days). You will know the Will of God, but you will deny it. You will rationally choose that which is irrational. You will be, in that instant, post-modern and a relativist. You will deny the truth. You will choose to change your perception of good being good, to the wrong being good. You choose what you feel is most valuable (always--undeniable fact), and when you choose evil, you are claiming that this &quot;evil&quot; really isn't evil to you, you are saying that it is the most valuable option. You willingly modify your memory, your belief, and your knowledge of what is good and what is evil. You give in to that temptation to do wrong. You believe you are smarter than God, that you are correct and He is somehow wrong. You commit blasphemy. You refuse to relinquish control, to give to God what was already His to begin with! You deny God His right to your mind and to your choice. At some level, everyone is the deep sinner. You doubt the existence and truth of God by your very choice and desire to do evil. You are no better than the rest of the trash in this world in this respect.

It is in this mindset that I have the utmost empathy for sinners. I see us as brothers in a struggle, a self-conflict. You cannot pass this off as mere &quot;angst&quot;. This is a question of denying self for God--you better be anxious about that! For those who are not &quot;nervous&quot;, I think a.) You are either perfect or, and far more likely, b.) you are too stupid to realize you are also in this continual conflict. When I am not actively evil, I hope I can be honest about who I am in those moments. I want to reach out to the people who are stupid and evil, especially because I know I need it when I am being stupid and evil. I have been where they are now! I must be discerning, but I must be compassionate.

The denial of such a conflict, or the scoffing at the honest outward manifestation of such a conflict that we all obviously have (but choose to hide), is a choice of ignorance, hypocrisy, and a choice which lacks the compassion and will to help those in need (the people in conflict!). It is here that I fully appreciate the music of Nine Inch Nails. How shocking!? Right? Why would I listen to NiN? Isn't he demonic (C.S. Lewis spells it: Demoniac)? Isn't he evil? Look at his lyrics to some of his more blasphemous songs (and I rarely can even hear lyrics in a song, I only hear music, ask anyone; I still don't know lyrics to songs I've heard hundreds of times...but when I have a spiritual stake in the matter, I can remember the words for some reason...Church music and Nine Inch Nails).

NiN songs, the best ones of course, are concerned with this idea of control. While I do not make the same conclusions as my friend from NiN, I can see where is coming from. I see him across the bright boundary. I know I jump to his side of the boundary each and every time I sin, and I cannot act like I have never been there. I see why he is there, and I admire that he has the balls to flat say what the conflict is in the end: an issue between our control and God's control. Do we give up ourselves to God? Yes, he chooses incorrectly, but he is no hypocrite--that boy sins boldly.

To any autonomous and sentient being of this world, giving up the true authority and control of self is a much larger thing than most anyone can imagine. It can feel worse than death (and there are several things worth than death if you need further explanation). It is a willing sacrifice of that which we most value about ourselves. We honestly cannot justify our occupation of this control, we are required to give it back. The greatest good is to give the control back to God. You are meant to be a slave--you are not meant to value yourself. You are only valuable insofar as you are useful or good to God. Do you know what is required of you? Can you possibly fathom the robotry asked of you? I doubt many do.

Yes, welcome to existentialism. The land where everyone fails, where most are blind, and where the few live in anguish as we recognize both what is required and why we fail over and over again.

While I listen to NiN, I know where I stand, and I am sobered. This is the spiritual battle that is before us all. It is real. It is the most important choice we can make, and NiN does a better job of showing this than half of the happy-go-lucky-warm-fuzzy crap I find in church. I would rather dine with a sinner that knows he is a sinner than the likes of the people I goto church with. Lukewarm is really a continual denial of this battle of control--it is no different to me than the unforgivable sin.

You are all in or nothing. I have much more respect for those who choose nothing than the lukewarm. The ones who chooses nothing has a chance to repent, just as I have a chance to repent when I choose to sin and when I have temporarily chosen the nothing.

Here, at the recognition of our base conflict, it is easy to see why one would &quot;mourn their faith&quot;. Every bone in our body seeks to maintain control of ourselves, we want to be ourselves. Being a true Christian is more than a leap of faith, it is the purposeful casting of one's self off a cliff, hoping never to return. It requires, to some degree, self-hatred in that sacrifice. Matured faith is much more difficult than we make it out to be. God help us.
So, I've had the opportunity (I.E. free time at work) to do some reading. And, on top of everything I always read on the interweb while in the Ville of Louis, in the past couple weeks I've read actual words on paper, including:

6 of 6 Harry Potter series (7th book is coming next month, be prepared!)
'Manufacturing Consent'
Some of 'Anna Karenina'
'This is Your Brain on Music'
C.S. Lewis's Space/Sci-Fi Trilogy

Nothing much to say about the Harry Potter series. I mean, I've read them before, and I'm just prepping myself again for the final book (hard to keep that much storyline in your head all at once). Although, I must say that after a 4th time reading through, I am struggling with the underlying presence of relativistic thought in this book. The struggle between good and evil amounts to something less meaningful in these books. It is apparent in the last part of the series that &quot;love&quot; conquers all, and our enemy is &quot;fear&quot;. Oh, please--Donnie Darko again? I am now having to think about when I would let my child read these stories.

'Manufacturing Consent' was simply fantastic. Noam Chomsky has created a masterpiece essay. 1/3rd of the book is introductory thesis. The stuff in the middle is highly relevant and exhaustive support for his thesis, which is maintained by the last third of this book: pure citation. This book was made in 1988, and it reads like a book attacking our world today. Superb book.

'Anna Karenina' is a loathsome book. Don't read it, please.

'This is Your Brain on Music' is a book by a neuro-bio-physio-psychologist with a few extra PHD's and a wealth of experience in all things music. It is seriously a good read. He dives very deeply into the brain, the mind, other biological functions, and how music interacts with these objects. I found it to be thrilling.

C.S. Lewis's Space Trilogy was...different. 'Out of the Silent Planet' was the first book. It honestly hinted at moral relativism and Darwinian thought. It was decent sci-fi, but we were left more confused than when we started by the end of the book. Wonderfully, the first book is resolved and completed in 'Perelandra' (the 2nd book). The second book was by far the best of the series. It was obvious C.S. Lewis writing. Only he can make you read a story that you would have been unwilling to read if you had only known what C.S. Lewis was writing about in the first place. I am certainly glad I did read it though. The 2nd book is a fascinating account of the fall. Every 40 or 50 pages, you'll find the few paragraphs that he has been working towards for the entire book, and you will be astounded by the astute insight he has in store for us. And, frankly, C.S. Lewis's genius was that he could put immensely complex theological ideas into fun, tightly composed sentences and allegories. He does not fail us in the second book. The third book, yes, he fails. My wife didn't like it because it was &quot;sexist&quot; (which it wasn't blatantly). I just thought it was a poor resolution to the story. He should have stuck with the 2nd book, and left it at that.

And, I'm starting in on Flannery O'Conner's short stories (Epiphanautic Grim Allegorical Southern Gothic Protestocatholic Overly-Symbollic Existential Revelatory literature with a pinch of Egalitarianism, and probably too much detail that we are supposed to glean &quot;deep meaning&quot; from...). You know what, these stories put me in such a good mood. I am inspired to glance off the pages of Mz. Flanz stories, to look up and observe the finer qualities of &quot;humanity&quot; in my co-workers. ROFL. Oh, and I'll define the odd word for you. Epiphanautic is an adjective that refers to sailing or navigating in a metaphorical sea of epiphanies (generally, if there is a sea of them, then you are hallucinating--you just think you are receiving an inundation of divine manifestations of wisdom and insight). Please savor this word. Yes, it is very good.
My brother said something odd to me the other day: he thinks he is not a good writer. I've seen my brother's writing (for a long time), and I simply have to disagree with him. I don't disagree just because his writing has always been much better than anything I can do, I know he is a good writer because he communicates truth (and does a good job of presenting it to boot). I know he can write very well, but JRE simply disagrees. He wouldn't explain what led him to the conclusion, but my guess (which is probably quite accurate) is that the English professor that teaches JRE's &quot;Christianity&quot; class is overly harsh, critical of the wrong things, and maybe even lacking a full understanding of what &quot;a good writer&quot; exactly means. JRE will see his paper marked up or given a poor grade, maybe due to &quot;passive voice&quot;, and he feels crushed over it. I told him otherwise.

Don't get me wrong, I would be disappointed in the low grade I got if I had worked so hard and produced something I considered so good. But, JRE doesn't stop to think about why he got the grade, or if the grade was warranted. His base premise concerning his belief that he wasn't a good writer was essentially:

His writing isn't beautiful or elegant.

My reply: So what? What does that have to do with good writing? If you are writing an essay (which is all our family tends to write--even our letters our politicized essays), the beauty of your essay does not spring from your rhetoric, use of syntax, or colorful language (f-to the l33t izz0). The beauty of an essay is in the truth-value, relevance, and significance of the very contents of the essay--not the way in which it is said. Wouldn't you prefer (or in fact value) an essay with mere coherence (so, I guess it isn't flowery or aesthetically pleasing) and insightful content than a useless, shallow, and illogical essay that we might consider aesthetically pleasing? The form of an essay has nothing to do with aesthetics--the essay exists in virtue of the argument to be made. And, we will soon find, all forms of communication (and writing) have one purpose in mind--they all are a type of essay (some are just better essays than others).

Now, if you have a poor argument, then you have grounds for dismissing an essay as awful, regardless of the other qualities of the essay. The beauty of an essay can only truly be analyzed insofar as it fulfills the form of the essay. Poor arguments translate into ugly essays, while good arguments are beautiful essays

But, what of the linguistic mechanisms required to transport those beautiful thought-capsules? Obviously, the mechanisms will be valuable insofar as these are necessary in communicating and transporting the ideas and details of arguments. Coherence is the base requirement of communication--not aesthetics. I propose that we have a false sense of aesthetics, a twisted sense of beauty, and an ill-conceived notion of the purpose of communicating in general. It is not about the emotions you inspire; emotions that do not stem from rational propositions are meaningless. Communicating is about transporting truth--all else is secondary, including that which we perceive to be &quot;aesthetically pleasing&quot;.

It reminds me of my principle disagreement with my own &quot;Christianity&quot; professor. He was a mystic and spiritualist--generally irrational. More important to our topic, he could truly impress us with his language of decor while speaking of his beliefs. He was eloquent, but he was very wrong. The lack of truth (which was hidden to most) made for hollow or even damaging communications. This false beauty was dangerous!

Ironically, both our professors are &quot;very close friends&quot;.

JRE really has taken to Berea more than I did, not because I didn't have a chance, but I think I had a good reason for being so cautious. I am glad he is leaving that place, he should know he is a good writer and why he is a good writer (and why he is not to be Berean). I did not wish to be sucked in by the false prophets--and believe me, these guys are pro's. Their belief is based too much on emotion, which they problematically use as a justification, as if their feelings had something to do with their rational argument. Sure, they use big words like &quot;Christomimetics&quot;, but they truly lack the fundamental principle behind the &quot;image of Christ&quot;. I remember reading an article by JRE's teacher on &quot;orthodoxy&quot;, and I couldn't help but laugh. Why? Because, this heretic, this...relativist English professor was going to try and preach to me what the &quot;straight path&quot; was? He has no earthly clue; all he has is his emotion. These are well-spoken emo-kids who convert masses into believing that God and religion are mere &quot;mystery&quot;. They are concerned with a spiritual revelation that is far from true belief, from--orthodoxy and that actual Imago Dei. They pursue some heretical neo-catholicism, which they consider &quot;orthodox&quot; (roflcopter), and use semantics and beautiful language to mask the empty and meaningless &quot;ideas&quot; that they disseminate to their students.

I can see why students like these teachers. We are taken in by their appearance of intelligence and through the false beauty (aesthetics) of their words. But, their ability to spread heresy within that false beauty is truly dangerous. It is why I do not think so highly of aesthetics in the end (although, I must admit, I do enjoy them, especially when they are used to display the truth).

The longstanding feud I will have with these....artists is the question of aesthetics. Why pursue beauty? It is not important in and of itself, not outside the context of the truth atleast. Beauty requires relevance, it is only revealed from something much greater--something with a moral purpose.

And, it is here that their argument unfolds. They seek aesthetic appeal. To them, it is here that words and art, while attempting to communicate truth, are mysteriously mixed with emotional and irrational expression. It is contradictory to the very nature of absolute truth. These professors think of communication in general, as an emotive tool, not as a truth-seeking tool. This is a warped perspective. As they cannot understand the root function of communication, they cannot understand the value of JREmy's thoughts and what he has written.

JRE's Spanish teacher (my Christianity Professor), held interviews for going to Rome on short term. JRE was denied (not just because he is related to me), but possibly because of one question on his application and in his interview. JREmy explained that his favorite piece of art was &quot;1984&quot; by Orwell. De Rose thought this was odd, and asked JRE for the reasoning behind the answer. My brother did me proud.

JRE essentially said: &quot;The purpose of art is to communicate truth&quot;. And, in this case, JREmy was fond of the moral truth and ways in which it was communicated in the art piece of his choice (books are a form of art). JRE is correct. He understands WHY we read, why we look at pictures, movies, and listen to music. While words may not be necessary (you can listen to a symphony or observe a painting), the use of words might in fact be the most effective form of communication.

Of course, De Rose didn't like this. He felt the trip (and life in general) was about finding meaning exclusively through what he considered to be true &quot;art&quot;. But, it is evident that he fails to understand what is &quot;art&quot; means, and the limitations of certain mediums (and the limits of natural human perception/deduction). De Rose thought JREmy should pursue pictures instead. The professor thought this because he didn't understand the limited value of pictures, or even the reason why one would create or observe a picture. He thought communication was meant to inspire emotion, and probably felt that pictures did a better job of this than words.

They say a picture is worth a 1,000 words...but that is only because people are too lazy to read and too stupid to realize how difficult it is to describe important and complex truths in a picture. Only the immortal genius can look at the world (or a picture) and decipher and deduce the complete meanings of what is around him. Not only is the picture not a medium for the everyday man for the most important truths, I don't think it is possible for our small minds to make such deductions from those pictures when we already have such great difficulty with a much clearer and more effective medium for important and complex truths, words. If you can't understand it in word, how could possibly come to know it through a lesser medium?The picture, to gain any serious meaning, requires too much work for a mere mortal to deduce things from (not that it isn't possible, but rather it probabably isn't worth our time). Words, on the other hand, have the beautiful ability to easily and effectively communicate a truth to even the stupidest people. The written text and spoken word are tools; they are the best mediums for communicating substantial truth to a population. In reality a word is worth a 1,000 pictures to small minded mortals like us. We seek the truth, and in our pursuit, we will be most effective in using the best medium: words. There are very good reasons why God would choose to communicate truths to us in words (no Holy Ghost arguments please, the Holy Spirit guides us toward the Word, grace through undeserved and unjustified emotional pursuit of God--this is grace, not justice...for our own pursuit, stick to rationality).

Our teachers do not agree. They see a meaning deeper than what words can express--and it is here that they fail. They do not understand the full implication of words. They do not understand absolute truth. They do not understand relevance. They do not understand form, function, and orthodoxy.

JRE is a good writer because at his core he knows what his teachers do not. He knows the fundamentals, and he understands why we write. For now, maybe he is just longing the bliss of our teachers' ignorance because their path is much easier. It isn't hard to be stupid.

I don't want a fuzzy picture, I want an immaculate concept! Words paint a much clearer picture than oil on canvas. Mortals should be economical (as we don't have eternity) and realistic in our pursuit of truth. While somehow our foolish professors are blind to the obvious, it is evident that the guiding invisible hand of opportunity and lifenomics has long been persuading us towards mediums which most effectively and efficienty express and imbed in our minds the truth of God, and in this case, the beauty of truth-seeking words in virtue of their orthodoxy, relevance, and truth-value. JRE seeks truth in his writing, and for this, he is a good writer.
So, yesterday, I realized we are bad parents. k0sh3k was sleeping on the couch (she was exhausted, the 'j3d1h' can drive anyone crazy). I was, of course, on the computer, with headphones so as not to disturb the living dead on the couch. The floors were clean and the bathrooms were as childproofed as we can make them. The door to the baser closed, electrical sockets plugged with the plastic thingies...you name it. The front door (the wooden one) was open, but the screen/plexiglass frontdoor was shut.

Somehow, without my active listening (headphones) and visual observation (the screen) directly on j3d1h, I found myself completely ignorant of her whereabouts and status. Anyways, the doorbell rings, and this old lady (a neighbor from across the street named &quot;Caroline&quot;...tells you how much I know about my neighbors after 10 years in E-town, a sad state of affairs in this world, but another matter altogether) was ringing the bell. k0sh3k and I got up, and Caroline was holding our child in her hands.

Apparently, j3d1h escaped the prison-house we have provided for her. I had no earthly idea she could get past that plexiglass door. All it takes is a tug on the handle (high up for her) and a push on the door (a decent push for her actually)--but man, that is a lot for a little toddler like her. j3d1h, as usual, burst through the gates to freedom, running straight for the danger zone that makes my heart stop: the road. The sad part is that neither k0sh3k nor I even knew that j3d1h was out there.

We are very fortunate that j3d1h didn't get hurt and that a neighbor (who we don't even know) came to our rescue. It only takes one second of inattentiveness to ruin a lifetime. Uggh. We were kinda freaked out, especially about the part of not even knowing she had escaped.

Onto better news, I'm reading one of the best books I've ever read. It is called &quot;The Language Instinct&quot; by a this Stephen Pinker. It is a jam-packed thriller of psychology, philosophy, biology, grammar (I know, wtf, right?), and, oddly enough, computing. Plus, he puts in funny lines. I found this joke from to be very funny (k0sh3k thinks it is stupid, so it probably is--I was just tickled by it):

A woman landed at Logan Airport (Boston) and asked the taxi driver, &quot;Can you take me someplace where I can get scrod?&quot; He replied, &quot;Gee, that's the first time I've heard it in the pluperfect subjunctive&quot;.

ROFL! (Scrod is a type of fish I believe, but the taxi driver ironically misunderstands the word to mean something very different)

Anyways, the book isn't about jokes. Although, there is a good deal of humor in it which is helpful when navigating the annals (better spell this one correctly!) of brain-mind-language-philosophy stuff. I think I'll let mom and dad have my book (they can't get good books in Thailand); I think they'd find it very interesting. This book is definitely &quot;archetype&quot; or &quot;era&quot; defining. A classic fo'sho'.

Also, in other important irrelevancies, I got a new cell phone because my other one died. Thank goodness, I need the battery life for my travels, and I use it constantly. I can't manage without one anymore.

We have been looking through schools, and we've decided that Talbot School of Theology is for us. We can't seem to find other schools that fit our desires, and Talbot has been spot on. k0sh3k is questioning what she will focus on. She is torn between Theology and Biblical studies (Old or New as well). I think she'll go for the Biblical exposition because she seems to enjoy that most. Although, she really is driven to apply the Bible in today's world, and Theology may be somewhat useful in that respect. I still think our understanding of theology (*a hybrid of biblical exposition and philosophy) is simply better than anything a school could ever give us. But, I won't discourage her from either of the studies simply because I don't know what they will be teaching her exactly. I just want her to be happy with whatever she chooses.

Allen said he might stay over the summer. Or, maybe he might live down the street and just chill at our house. Either way is cool with me.

Oh, and President Bush is retarded--and, I don't have to respect his office (quote me St. Paul and I'll give you a mouthful, as usual).
Lots of sympathies on the j3d1h's Minutes Out (her escape). Apparently, it happens. Of course, life seems even more fragile when slip ups happen in such large quantity. We will try not to underestimate this child. She can be deceptively smart, as exhibited in several instances. We are now using minor punishments as it is clear that she understands yes, no, and certain commands. Putting her in her room is what we are doing for now (she hates it in there, except when she wants to sleep). When she becomes further sentient I'll be using the corner. Although, as we've taken her pacifier away from daytime use, she has decided to use her sharp teeth on other objects. It has been a struggle to teach her not to bite people, nor hit people. We are very firm with her (and for now our facial expressions make her cry). If she goes any further she may need to have her hands tenderly slapped. I can't have her being abusive towards anyone, especially not k0sh3k.

Also, I'm no longer subscribing to WoW. =( ...I think I would do better to write my own game.

Anyways, onto our awesome news: We are pregnant again!!! WOOT WOOT!! We have tried and tried; It has been a year and a half, and we didn't think it would ever come (the contraceptive shot was extremely overpowering). But, finally we have been blessed again. I just found out this morning. Boomshakalaka!! So, we have good reason to stay in KY for now. Of course, we'll still be aiming to goto school and Thailand thereafter.

Oh, yeah, we have been asked to teach a second Sunday school class. Actually, I have been asked, but I don't feel comfortable doing it. k0sh3k does such a good job, I am better at clarifying and helping with background work. I can be a wizard as a student, and I'm much better in 1 on 1 conversation. But, I don't have what it takes to communicate or teach to the masses. I'm confrontational, elitist, somewhat disturbed, and I lack the ability to draw out the steps I've taken to reach my conclusions. It takes a very smart person to follow what I am saying in several subject matters. The problem, essentially, is that I cannot help someone see the world as I do, I cannot teach someone to howto acquire and use my lens. I see the answer, but I can't show my work. It is frustrating to say the least. I have long had this problem. I do not write my answers out. My deductions are so severely layered, often based in a cross of several subjects that require at least intermediate knowledge, that I don't have a compatible language to communicate and discuss what I am thinking.

This reminds me of the very context in which I was asked to teach this class. We were in a seminar about &quot;Methodism&quot;. All the pastors showed up, one of them previously a professor. It was clear that these people were morons. They don't even follow their own religious structures, how could they possibly understand what I am thinking? I sit in a room of people doing addition and subtraction while I'm doing Calculus. I cannot explain calculus to someone who can barely comprehend the fundamentals. While I am good in many subjects, the truth is that I am a prodigy in the philosophy of religion. God has granted me an extraordinary talent. Will I use my talent to change the world? It would be nice, but perhaps not (I don't know God's plan for me). It is possible that God gives gifts to people just for them to glorify God directly. My knowledge deepens my faith, my reverence, and my awe. When I sit in a room of people who can barely add and subtract, I feel sorry that they cannot see the beauty of mathematics, or in this analogy, I feel sorry that they cannot see the beauty of the intelligence, rationality, significance, and design of this world and of the Master of the Universe. No doubt, He is. I cannot teach this wisdom if they are unwilling to pursue the truth.

It is here that I question what, or sometimes if, I will teach. The Sunday school class is a starting place. We will see. I am glad I married k0sh3k. There are only a handful of people in this world with such an orthodox handle of the scripture, the depth of knowledge in philosophy, and the mind to appreciate what we do. We are equally yoked. She keeps me sane, she keeps me thinking, she keeps me happy.

God, Give us direction, Give us wisdom, and help us to do Your Will.
I admit I rail against relativism, after all, it IS the plague of society, but often I'm overly eager to simply dismiss (split inf ftw btchz) entire eras of thought that have any elements of relativism. Usually it is good to dismiss, but there are a few brief exceptions. Point in case: romanticism. I can definitely see why one would criticize it. The denial of rationality is always wrong. But, there is a specific, and ironically, reasonable and rational sect of the Romantic world that actually states reasonable arguments against civilization, society, and industry. One of these Romantic arguments is provided in a film called &quot;Instinct&quot;.

&quot;Instinct&quot; is a fascinating film. It is a psychological thriller between Anthony Hopkins and Cuba Gooding Jr (both play their characters very well). The film could be classified as &quot;Romantic&quot; (the era) as it explores the psyche of a scientist who lived with gorillas and has been brought back to civilization. We, the audience, intially assume that the scientist, who is examined by psychologists and what not, is a crazed killer. We assume the worst of this man as he does not follow our civil ways any longer. How wrong we are!

The film unfolds a story that is both anthropological and highly philosophical in nature. The film is a very good lesson as it brings to our a attention a defense of proper and natural barbarism that we should all seek and pursue. We come to emphathize with this gorilla-scientist. We see why he does what he does, and we understand the rationale behind his disgust with civilization. We switch sides. In watching this movie, you will recognize who you, as a &quot;member of society&quot;, have become and why we have the socialization thing all wrong.

The title could have been &quot;civilization and society be damned&quot;. And, wonderfully, it portrays a realist's view of modern culture, an insightful criticism of what we have become, and curious prescription to a web of immoralities and corruptions that &quot;civilization&quot; has birthed. You will realize that so many of your day to day activities are truly useless, stupid, and perhaps immoral.

I cannot help, after having thought about this movie and other things, but think that society and civilization are innately flawed. I'm hardly against rationality, but I see that I no longer could be called a tradition rationalist by any stretch. It is the thesis of this film that captures the essence of why I could not be considered a &quot;gnostic&quot;. Although, my wife does say that I might be &quot;proto-gnostic&quot;. I'm not necessarily for &quot;getting back to nature&quot; for the sake of nature, but rather because of the corruption of civilization. It is the argument against Babel, the argument against politics, and social norms, and politeness. A person is not less worthy because they do not conform to society (a belief that is even shocking to the church).

Make no mistake, I do not claim any sense of social relativism, acceptance of evil, or tolerance. I am being strictly intolerant in every sense of the word. There is only one way!! Conformity for the sake of conformity is wrong. The principles of love and kindness are static, but clearly these are expressed in different fashions. Pursue the principle, not the practice! Civility does not consider your intentions or what is in fact morally right, it considers the size of your wallet, what is &quot;productive&quot;, and the vogue. It is a skewed system of utility! Idiots!!

In reality, I claim a new rationalism. It partakes of the most important aspects of gnosticism and traditional rationalism. This neo-rationalism uses our rationality to defend a barbaric Christianity, one which does not care what other people think(including the so-called &quot;church&quot;--those hypocrites! lukewarm scum!! Vile animals! May God Blot them out!).

Okay, ....need a breather, my blood pressure might skyrocket if I think too much about people. Deep breaths. Writing it out can be good, it is at least better than bottling it up. It is odd that I can love people and want the best for them, but somehow be enraged with them. Aight, back on topic.

Neo-rationalism is against true empiricism, it is against atheism, against relativism. It is for value, truth, absolutes, and rationality. It is against superfluous social conduct and meaningless civil requirements. It is for a barbaric, base, and real pursuit of truth and value, a pursuit of God. Neo-rationalism concludes not in self-worth, nor even in equality or humanism, it is the conclusion of slavery to The Master. Neo-rationalism is hardcore. Neo-rationalism isn't about protective warm-fuzzies, but neither is it about anarchist suffering. Neo-rationalism isn't about reading the Bible word for word, sitting on a slippery slope of literalisms, symbollisms, and contextual interpretations; neo-rationalism reads the Bible as a book that God intended for us to read, as a preordained text to move humanity towards the center of God's will--not in virtue of the perfection of the Bible, but rather the perfection of the Will towards which humanity is guided. Neo-rationalism is rational and yet looks at the world as a series of moral choices. There is meaningful, valuable moral choice or there is nothing in the eyes of neo-rationalism.

All of this I fail to convey. I can point towards it, but I cannot sum it up in a sentence or paragraph. I need time.

I feel somewhat like the man in this movie &quot;Instinct&quot;, and oddly enough slightly found in C.S. Lewis' Space trilogy. I sit silently in a world of idiots. I see through a world of man-made chaos and sin, and I see the beauty which we ought to pursue. It is a very hard path. I will not be successful, but I will try.

Summa Theologica here I come. I've been working on my opening chapter (of which I'm sure I'll never stop writing). It is damn good. I wish to have people to brainstorm with. I cannot systematize such a thing without thinking it aloud and hearing the arguments for and against it from other people. I will do my best.

Any takers?
Democracy is the doctrine that the numerical majority of an organized group can make decisions binding on the whole group (literally: Majority rules). Mind you, Democracy is a word used with pride in America. We live and die by this very word. And, for a long time, I agreed. Why wouldn't I agree to democracy? After all, the majority told me it was good.

Now (oh yes, in my age of wisdom), I don't see how one can think so highly of democracy at face value. What is so special about it? Why should we implement it? The usual argument is both bland and ambiguous, and yet its invalid conclusion is so deeply important to people that we fail to fully think through the premises and implications of democracy (i.e. the invalid argument). The basic premise is that democracy (supposedly) grants us &quot;freedom&quot;. How and who are we that are freed through democracy? What is freedom? Why should we pursue freedom? Even if one could possibly show a link between democracy and freedom, I wonder if people are too lazy to justify the meaning and purpose of &quot;freedom&quot;. Obviously, freedom exists in virtue of moral decisions. And, even if someone got that far (not a big leap), most are too stupid to define what is &quot;moral&quot;. If they think of democracy as a means to these wonderful ideals (freedom-&gt;morality), then they need to be able to defend the conclusions as well. Specifically, they better be able to defend morality and freedom (you wouldn't think such things need explanation and defense, but they must be justified if these are the aims of democracy). But, I will attempt to be charitable (after all, I myself am sucked into the argument from time to time).

Democracy is the idea that you have a guarenteed stake or some degree of control in your destiny. And, the latter is almost definitional of modern views of freedom. Albeit, democracy, direct or representative, rarely lends more than very slight, nomiminal, or sometimes illusionary degrees of control. You are one in a million pushing this way or that way. But, remember kids, &quot;your vote counts&quot;. This is true. And, insofar as you count with the masses, you have an &quot;equal&quot; vote of power (or at least the illusion of it in practice).

Democracy can be touted as a &quot;fair&quot; system, in which the poor man's vote counts as much as the rich man's. Now, obviously I'm not talking about the corruption we see today, I'm talking about the ideal democracy (which we are far from). And, obviously, we can all appreciate the aim to eliminate descrimination for such arbitrary reasons as race, gender, or social status. Democracy rides upon our desire for &quot;equality&quot;.

Democracy also seems to be a better alternative than something like a monarchy, as we have seen in practice. In a monarchy you are either the one or you are the screwed. Right? So, in order to even the odds of having any power of yourself at all, democracy at least gives you some upfront guarentee. And, of course, one person can be wrong, but could millions? Which leads us to our next point:

Democracy uses the invisible hand to guide us towards what is most useful (or atleast in theory it does). In a fair and vacuumous dissection of democracy, we can see a network of minds and choices that adapt and evolve into a better society.

And, finally, I think that many would consider democracy, while not perfect, the most practical option, or, at the very least, it can be the &quot;lesser of the evils&quot;. The basis of their argument is that practicality makes right, not right makes right. Democracies are corrupt. And, you may argue that every argument befalls this, and that the democracy is most resilient in virtue of masses with choice.

All seemingly good concrete arguments, right?

Even moving to the abstract conception, concerning the role/purpose of government, the meta-ethical evaluation of rights, utility/deontology debates, etc., we find that democracy excels in answering these questions. At the very least, democracies would seem as if they are adaptive to a culture. They are powerful, and yet, this does not mean that democracy is correct.

What is right is not always practical, and generally, Pragmatism is laziness (hmm...another article altogether). In reality, democracy is a form of social, or more specically governmental, darwinism (no caps for joo). It is a failed experiment. Even if we wanted to apply pragmatism, or rather, utility, one would never arrive at democracy.

The fact is: some opinions aren't worth as much as others. If half the population is stupid, do you really think that it is most &quot;useful&quot; to have that half of the population voting? Honestly, do you really believe people are equal? Justify it! I dare you. I cannot justify equality, it does not exist. Now, do I believe their is a bare minimum of value to humans, yes; but, I don't believe we are equal. Some are stronger than others, others smarter, others prettier, etc. And, no, don't buy into Humanism. It is garbage--it is philosophically unsound. Humanism exists in virtue of half-truths. Humanity for example, cannot have infinite value. Nor are we equal. But, you may argue we do have value.

Is it really &quot;for the best&quot; that Johnny boy over there has any corporate power? He is retarded. Even in the face of utility, it is stupid to let stupid people rule. Obviously, none of us deserve individual or corporate power. The next stage would be one of representation (but, obviously not democratically chosen, else the purpose is defeated). Smart, non-democratically chosen leaders that are qualified to lead would be better than some direct democracy. But, even this has its problems in utility. And, of course, the pragmatists would still be wondering, how would those leaders be chosen?

What ought the savvy person do? Obviously, corporate government is a failure.

It would seem to be there is only one answer: do the Will of God. Let God rule you. All else is meaningless. All is a question of value, and there is only one value to consider in this world: God's Will. If the masses fail to hear God, and they will, then let us do it individually. I can only be responsible for myself and my own. This isn't relativism, but I can certainly see why someone would think it is.

I've come to the fact that I trust the opinion of a very small minority of people on this planet (and usually only based on specific subject matters). I know none of us are qualified to answer all of these questions, but I think some have the right direction (which is transformational): the Will of God. Will I know or follow this? No. Will I try? Yes. I know democracy is an idiotic plan because there are so many idiots. I want whoever is closest to the Will of God to rule (God Himself perhaps?); and I want someone who wants whoever is closest to the Will of God. Essentially, I know the base answer, I think most don't, and it is because of that democracy fails.

In closing (which is sad, because I've not said much), I thought I would consider something slightly off topic.

I'm not in for Zen-BS, false-dichotomies, nor am I interested in supposed &quot;paradoxes&quot;. All is black and white, there is no equal. There is only absolute right, and all the rest is absolutely wrong. With that in mind, I still find myself amused by the ironies in 1984's mantra:

War is Peace; Freedom is Slavery; Ignorance is Strength

I come back to this statement over and over again. We are in trouble. Do you feel like a madman sitting in front of doomsday? Man, I do. I can appreciate Donnie Darko's laugh at the end.
&lt;p align=&quot;left&quot;&gt;Â &lt;/p&gt;</post_content>
Briefly elaborating on my previous commentary on Democracy: I think it is important to evaluate one more point. People don't necessarily have a right to an opinion. We all take this as a &quot;right&quot;, and we assume it to be true. We don't want to put ourselves in a position to ever deny our own &quot;right&quot; to our opinion. But, frankly, it is obvious that we don't believe people have a right to their opinion.

The only people with a &quot;right&quot; to an opinion are those who are correct. If you say 2+2=4, and that statement is true, then you have the proper warrant to believe it, and thus I might say you have a &quot;right&quot; to that opinion. But, then again, it isn't opinion at that point.

Opinion is useless outside the truth.

Utility arguments fail. A &quot;right&quot; requires some innate value that mere utility simply cannot justify. We cannot value opinions which are blatantly flase, we can, however, admire the truth an opinion contains. Again, this doesn't necessarily justify &quot;rights&quot; per se.

Obviously, there are too many stupid people that have incorrect opinions, and probably no right to hold those opinions. Warrant and reason are required. The lack of those justifies a lack of &quot;right to opinion&quot;.

When we talk about gaming, a matter in which I'm an expert, then I generally have the right to hold an opinion (I.E. because I know fact). If you wanted my opinion on the mechanics of automobiles, a subject that I know nothing about, then I must inform you that I really don't have a &quot;right&quot; to hold any opinion.

In the same way, I think stupid people should say, &quot;I don't know&quot; and shut their faces.

This isn't practical. And, it will never be put into action. But, it is true.
Shame on us...God have Mercy on our dirty little hearts. Shame on us for all we have done and all we ever were...Just zero's and one's.&quot;

Good Gracious. That is excellence. Virtue of the practice of poetry if I ever saw it. What can I say?...this captures an essential principle I hold to be true. We are lucky to be alive, and look at how we waste it. We are sinners and relativists. We deserve to lose our lives. We are nothing better than zero's and one's.

Christianity, for the mortal, requires a good deal of self-hatred. If you don't have this component in your faith, then you do not recognize reality. I doubt you can be much of a Christian if you aren't struggling, else, you live a flawless life. Forgiveness is soothing, and in those moments, you should be sitting in awe.

Slave and Master relationship to God, not friends. You are nothing without God--do you understand what that means? Do you!? Existentialism is not some meaningless mourning or loss. It isn't relativistic or coffee-shop intellectual jargin. It isn't a happy thing. It is rational, realistic, and points out the ideal principle. All people answer these questions, some just really suck at it.

While I'm having random thoughts:

I wonder if women with short haircuts have disproportionately high divorce rates.

I found out that I'm closer to Scholasticism than proto-gnosticism in a general theological approach. I'm all for labeling...it gives me places to research, read, and think. I can see where other people have been before. Why do the work when they already have?

This reminds me of MTG (Magic the Gathering). In MTG, someone, somewhere has already built the deck you thought of...in fact, most of the time it has been done for years. You have to dig up the variations, and read through the forums and notations to see why they did what they did. Some were metagame (context) specific, and others were based on synergy, and other based on defining the role and function of the deck itself. It would seem likewise that labelling myself lets me work on shoulders of more giants. Digging through the past lets me see the less-than-obvious synergies and connections made through the great dialectical work that we call history, literature and the grand pursuit of truth.

This isn't a &quot;who we were, who are we, and who will we be?&quot; type question. It is a tool to sift through the sands of retarded people for the gems of truth.

As I'm going here and there: Mom is flying into the states tomorrow. She is taking the swicky (sweet-icky, Madeline) to Wisconsin and Chicago. It will be the first time that Jude and I have been seperated for more than a day from Madeline (I've been away the longest, probably with a record 18 hours or so, go Magic Tourney Go!!).

It should certainly be an interesting experience for us all. I guess I'll need to prepare for it. Phone card, CC, phone numbers, the works. Oh, and quickly discuss habits, discipline, and nutritional requirements. Good gracious, do I sound overprotective? yeah, yeah...call me a noobie. It is better to be prepared for the worst and hope for the best than to get stuck in a very bad position on something as important as my own child. Pascal's Wager with a smaller subject/topic/focus anyone?

Speaking of MTG, which I have recently picked up as I no longer play WoW, I have been playing with this guy at work called Fred. He's, as they say, pretty 'chill'. He certainly has been around the game long enough, although, he doesn't have a lot of decks to show for it! =)...But, his experience is quite welcome. He can recall decks and metagames from long ago. He is also an avid reader of the same forums as I read. He recalls game rules like a guy who hasn't played magic in a while, but has obviously played magic for a long time.

He is, interestingly enough, a casual player that doesn't play awful decks. He watches the competitive scene very closely. He plays for fun, but he doesn't play suboptimal decks if he can help it. I certainly admire that quality. Additionally, he seems like a pretty smart guy. Who else do I meet that reads &quot;The Prince&quot; for fun at work??

We play during lunch. I'll be happy to see his decks (we've been playing with my decks primarily).

Moving onto other topics, Jim is graduating. He is almost immediately heading out to Thailand to do missions/teaching. I think it is good that he is going to Thailand. A change of venue and breathing room from that place-of-relativism (Berea) would be welcome. Additionally, I'm envious of his job.

Jumping topics again (no transitions for you!!): I am glad that Jude is my best friend. We certainly have lost nearly all social contacts and friends in some way, with very few exceptions (I like the exceptions of course). Jude is the bomb. Oh, yeah, she just started showing too!! woot woot. I think we might be having twins (not confirmed, don't spread rumors...and that means you!).

Rigging Hypercynic for Mom and Dad to use. There are several reasons for it, but I think they'll find it very useful. Storage, downloading, etc.

Jude doesn't use her space on this site much (3 times?)...Never has time to write, or the will to do it. That is odd for her. She usually loves to write.

Speaking of which we've spiffied up my resume some more...I'll be applying for more jobs. Some in Humana (moving up the ladder if I can I guess) and some in E-town. I'd take a paycut for a job in E-town. Which reminds me of something idiotic my aunt said to Jim about me. I'm always complaining about Commute as being part of the opportunity cost of a job. Obviously, it is....Aunty Ann is retarded enough not to realize this is true (she is generally very unwise). It costs 2-3 hours of my time travelling, which could have just been used for overtime elsewhere, and it costs $3k-5k annually to commute like this. Anyone with half a brain would realize a pay cut would be worth it!

I'll be rigging (yeah, I like this word) the old computer for remote access over the network. I'll be running the resource-hog Bit Torrent on it. This will lighten the load on my computer by a great deal. Additionally, formatting is coming to both computers. Have to gear up for this because it takes a lot of work to bring my computer back online.
While a great deal of the work has already been done, and a lot of my job is really sifting through arguments and explaining the systematic workings and synergies of proper arguments into a larger framework, I have found that the introduction has been quite difficult and must be written completely from scratch. I have no sources to turn to, and nobody to ask. Consequently, putting the base argument on paper has been very difficult. I already suck at writing, so to make me think about a very complex subject, organize it, and THEN compose it with zero examples, sources, or help is not that easy (although, I recognize I have already had and will have future help--it is still difficult).

Of course, this is a very, very rough draft. It is a good start I hope. Even if it won't look anything like what I've written (perhaps Jude may write the actual thing), I will have a direction to point us towards. I do need a translator. Anyways, I'm at a point in the introduction that I need to sit back and get some 3rd party opinions. There is much work to be done, and I have to make sure that what I do have completed or worked out in the introduction is accurate and clear. So, even though it isn't nearly finished, I ask you to bare with me please. Fix and forgive my errors, redundency, any contradictions. Please help me find the missings gaps.

 

 

Summa Theologica

 

 

Section 1: Value

To some this chapter will be obvious and elementary. The assumptions and conclusions we make here, at least at first, do not seem groundbreaking. You may even find yourself thinking that I work too hard to assert the obvious. I argue in this fashion because it is necessary that we setup an epistemological base for a grander study. We are, as they say, starting from scratch. Where is ground zero? The foundation of all things and the reason you exist, move, and pursue anything is because of value. Value is our epistemological base on which we build everything. Value is an assumed variable—we cannot justify our existence or the pursuit of anything without begging the question of the reality of value. In what seems like an unlikely argument, as it really is so basic, I hope to guide you through the fact that all things we do and believe rely upon an assumed reality of innate and absolute value.

What is value?

Value is the property or aggregate properties of a thing by which it is rendered useful or desirable, or the degree of such property or sum of properties; worth; excellence; utility; importance.

Honestly, we see this word thrown around in so many contexts. Economics, politics, religion, commercials, and social relations all provide slightly different definitions of this word. In the end, they all point toward the above definition. And, ironically, all of the places you hear this word used really are going toward the same exact thing, they simply may not recognize it.

Value is an absolutist’s term at heart. It implies that a particular thing has some innate metaphysical property which requires that we should pursue it. To say something is valuable is to say it is innately valuable, and that regardless of perspective, that which is valuable contains universal and absolute value independent of our existence (whether we perceive it or not). To ask whether something is of value is to ask: Is it worth pursuing, and how much is it worth (pursuing)?

Why should you believe in value? Some may think that value is a façade, just an idea with no meaning or true application in the end. Perhaps value is a social or biological construct. Perhaps something can only have value when we apply that attribute to it. You will find that dismissing value as a concept is not as easy as it may initially appear.

Look at the meaning of value once again. What is the significant principle to the definition? Value is the concept that something is worth pursuing. It is, by definition, an implied ought. It is the case that, if something has value, you would rather it existed than not--you cannot be indifferent to its existence. To say something has value is to say that it is in fact significant and important...that it is desirable, that it is above neutral or nothingness. Something with value is something that innately is worthy of pursuit! Value entails the existence of an ought by its definition (in modern terms, value implies morality). What appears to be a very generic term is actually quite explicit and completely universal.

This, of course, is a very substantial (perhaps even valuable) claim to make of anything. Value is an assumption at its very core. It is an assumed belief—a true leap of faith. You cannot initially prove it. You don’t even need to fully understand it to use it. But, most importantly, the very consideration, application and use of value requires you to beg the question of value’s existence.

Example:

A child sees a ball a few feet away. The child desires the ball, and goes to retrieve that ball to play with it. This desire for the ball must stem from some belief that the ball is worthy of pursuit. The child assumes the ball has value. Now, whether or not the ball had value isn’t the point of this illustration. The principle to consider is that the child couldn’t logically consider the ball, or even desire it, or go retrieve it, or play with it, unless he felt that ball had value.

This sort of principle is quite universal of all things. If something is worth pursuing in any sense, then it is valuable to some degree.

Ironically, to even read this sentence, to even consider this sentence worthy of thinking about, to actually spend your time doing anything, is to assume that there is intrinsic value in whatever you pursue. We beg the question of value directly whenever we pursue anything. To even argue with me, or even have the will to agree or disagree with me means you have already assumed that it was worth pursuing, as though you ought to read or contemplate this sentence. You have already assumed value was innate to your object or idea of pursuit.

If there is no value in this world, then stop reading. Nothing has meaning. You have no warrant to do anything. You are merely particles floating around, doing whatever particles do and what not. But, who cares? You can't care, you can't think, you can't do anything, you can't pursue anything because it has no absolute, innate value.

When we pursue, we pursue that which we believe is innately valuable. Not one thing can exist apart from this idea of value. To merely concern ourselves with the idea of anything is to assume, from pondering its very meaning and logic, that it has some degree of value (in virtue of the truth of its existence, albeit possibly a weak value). This begging the question of value and meaning has been around for a very long time. From the defeat of Heraclitus to the abundant criticisms of post-modern relativism in Abrahamic religions, we can see the necessity of begging the question in regards to basic logical and value-based claims. And, it still holds true today. It is an inescapable truth, a necessary one for us to continue to hold true even with no deducible evidence in order to move on in conversation and the pursue anything of consequence.

So, we will start with our first begged premise. From there, we will be able to elaborate on other begged premises and deduce other conclusions.

[1] Object(s)* and idea(s) of value exist. Object(s) and idea(s) worthy of pursuit exist. We ought to pursue those valuable object(s) and idea(s). (Begged)

*(The possibility of the plurality of value, such that more than one object can have value will be discussed)

It is here, at the core of value that our search begins. The pursuit of something is the pursuit and acknowledgement of the truth of something. Truth exists to be known and acknowledged; truth is the worthy idea and reality. Truth is logical and valuable. To not seek truth is to seek nothing. By definition, we seek truth because we ought to seek it. Even the activity of pursuing truth is valuable in itself. Either we are called to be philosophers or we are nothing.

Section 2: Mechanics and Underpinnings of Value

To say something is valuable is to say it is worthy of pursuit. You do not just beg the question of whether value exists, but you also, in virtue of mere recognition and pursuit, beg the question on other fundamental issues (whether you consciously believe this to be true or not). At the very least, you’ll need to assume the basic claims of logic.
After all, if A is not A, then you have no way in which you could reasonably continue any conversation or thought, as no thing is itself. You assume that A is A, or the pursuit or belief in it (even if subconscious) is important, that is has value. You in fact, believe A must have value just to acknowledge its very existence. Value and logic are the root of all meaning. Logic, beyond 'A is A', which is truly simultaneously assumed with any idea of value (to think A at all it to assume the value of A and 'A is A'), is the manipulation of value and the deduction of further value from assumed values. You my friend, you believe in value, and consequently logic, at the basest level, and you continue to assign value to other things from your logical deductions in your value-based logical pursuit.

Value and logic go hand in hand. Once you can admit that the value and logic must exist, that things exist in a coherent and absolute fashion, that value is truly innate rather than imposed upon an object or idea, that truth is absolute and independent of us rather than subjective and relative to your perceptions or existence, you can shut the doors on a plethora of ridiculous concepts that have plagued the ‘intellectual’ (how ironic) community for a long time, namely relativism and its kin.

However, we need to evaluate the structure, architecture, begged, and deducible mechanisms of this value-logic system. There are further implications that stretch far beyond this base which we must address here before we can move on. Without considering the epistemological base in detail, we have no authority to make deducible claims regarding any number of subjects.

Section 2A: Metaphysical Innateness of Value

It is already established that we beg the question of value and logic. Furthermore, it is illogical to consider true relativism at all, as it denies the very essence of value. There is no reason to consider or refer to anything with anyone if you cannot (at least metaphysically and logically) consider or refer to the same thing together. Value, logic and meaning are innate to an object or idea.

How do you know this is true?

It is true that we pursue things because we believe they are valuable, not necessarily because whatever we pursue is in fact actually valuable. Now, be careful, I am not making the relativist’s claim. Of course we could be wrong about what is and isn’t valuable, but that does not negate the logic of value actually existing. Our very belief and pursuit in anything requires us to think in terms of innate value.

Innate value means that an object or idea is independently worth pursuing. There could be nobody to pursue it in the universe, and yet it would still be valuable. Innate value is static and unchanging. It has nothing to do with our perceptions! The perception of an object or idea’s value is not the same as the actual innate value of an object or idea. This is important to distinguish because it requires us to answer further questions, and, more importantly, it is required that things have innate value, rather than applied value, because applied value means nothing.

What do I mean by applied value? It is a basic form of the relativists’ stance that there is no true, absolute, and innate value (or logic or truth), and that we merely impose such notions on the things we perceive. This relativistic thinking has huge implications, and is clearly, poorly applied even by relativists (although, you shall see we all have committed this sin at one time or another).

If one argued that only applied value is all that exists, and that we only perceive things to have value, then we fall back into the trap of relativism. We cease to beg the question of whether value exists because we have reasonable doubt of value’s actual existence. If you actually doubt value’s actual existence, then you can’t reasonably justify any pursuit. To really apply the relativist’s stance correctly is to doubt everything to a degree that is absurd, including their beginning premises!

I think of this paradox (which is actually a strict contradiction) in the ironic rules:

No Rule is true 100% of the time or This sentence is false

This captures the contradicting engine behind the relativist’s thinking. It is the failure and the irony upon which we all irrationally choose sin. Surely people do not apply relativism correctly (to the nth degree). There would be no point to anything. Do you not see the mistake of this sort of thinking? If you really think that truth isn’t absolute or innate, then you can’t think. The very act of thinking begs the question of the reality of value in an absolutist’s sense.

Essentially, at some level, you are going to justify your pursuit not in terms of mere perception, but of the belief that something is in fact valuable independent of your (or anyone else’s) perceptions.

Again, the perception of an object or idea’s value does not require that the object or idea is truly valuable. We could be wrong about whether an object or idea is actually valuable. And, we could easily be wrong about how valuable an object or idea really is…Nevertheless, if we assume value to exist, we must assume it exists in a deeper manner than we perceive it to have value. We must assume that objects and ideas have true, innate, intrinsic, and absolute value, regardless of perceptions otherwise.

What does it mean that something is universally and innately valuable?

It means that whenever we pursue or desire anything, we are assuming that someone in our position should conclude the same thing. It is the belief that the standard of a thing’s value is static and independent of us, and that we all must regard the reality of its value in an identical fashion.

For example:

The desire for a purple car is the statement that the purple car is valuable universally and innately (not just to you). The universality of value requires that your desire implies that all people should value that purple car in the same way you do. Now, your perception of the value of a purple car could be wrong (I don’t doubt your perception is in fact wrong), but it is obvious that the value of the purple car is stable, static, and innate. It is valuable in virtue of its value not in virtue of perceptions. To say something is valuable is to imply that it must be valuable to everyone in the same way.

And, while this is almost contained in the first premise, I seek to distinguish this highly relevant truth about the nature of value, and thus I will make it our second begged premise:

[2] Value is innate and universal. (begged)

Now, assuming value exists (and we are going to assume the claim from now on), we will assume there are in fact things which are actually worth pursuing. How do we know what things are actually valuable and what things are actually not valuable? Are there choices to be made between valuable objects? Are there varying types or degrees of value, and are there varying types or degrees of pursuit? And, if there are different types and degrees of value, how would we go about comparing, just as an example, financial and moral value? To move forward we will first discuss how one goes about designating attention to the proper pursuit in the face of equivalence.

Section 2B: Choosing Value

We really haven’t given any thought to what it means to choose value at all, or even what premises we hold to be true in assuming that one can choose value. This is ironic because value is meaningless outside the context of the possibility of something choosing it. Read carefully. I do not imply that value is meaningless if there is no one to choose it, I said value is meaningless outside the context of the possibility of choice. If there is no true choice possible, then value is meaningless. So, even if there were no people in the universe to choose what is valuable, we can at least say that value can still exist as long as it remains logically and metaphysically possible for choice to exist. Technically speaking, in some possible world a being with free will chooses something of value. This is just an expression that means choice must be possible in the most minimal sense (even if nobody physically had it) in order to value to remain valuable.

Look once more at the definition of value. Value is that which ought to be pursued. There are two very functional words in that definition. The first being ought (which is a very moralistic word), and the second being pursue. Both ought and pursue implies, in fact they beg, the notion of beings with free choice.

Pursue means to seek, to follow, to quest after, to act on, to go after, etc. Pursuing is a choice! Pursuit can only be accomplished by a being which can pursue. This word isn’t used lightly.  It is the act of a sentient, aware, and rational being. Pursuing requires choice. You can’t pursue something without choosing to do it.

The rock does not pursue the ground as it falls through the air. Photons do not pursue their destinations. Billiard balls do not pursue other billiard balls. You need to mean what you mean when you say the word pursue. You must mean something more profound than a deterministic object doing what it must do by this word pursue. You assume free will by the very notion of pursuit.

Ought has no meaning outside of pursuit. Ought implies an ought-not. It would be meaningless if all things ought to be pursued. Ought would lose meaning. Ought has more weight to it than most attribute. It is implies Ought and Ought-nots, and it implies that it is possible for being to choose between the two.

We have come to our next begged premise, one that you readily accept to be true in virtue believing that you ought to pursue anything at all:

[3]You have free will (begged).

Of course, this isn’t some compatibilist notion, this is true free will—the ability to do otherwise.

You can’t say that you deterministically pursued in ignorance and that free will does not exist. Even if it were the case, such a revelation would disable you from future action or choice. To those who argue against free will, and are now educated about what they consider to be a fully deterministic reality, one in which they don’t have actual choice, then please, show me how you are pursuing. You can’t possibly think anything is truly valuable. Why pursue at all?

Value doesn’t require there are free beings, just the possibility of free beings. But, you believe in more than just the possibility of free beings, you believe in the reality of at least one free being, if not many. And, in this case, since you think there is value, and you must if you believe you are pursuing in some relevant sense, then you also believe in free will. You believe you had an honest choice to do A, B, C, etc.

You beg this question. It is certainly useful to consider how it exists, but it is not a deniable premise. There is no mystery about these begged premises, they are true not in virtue of the begging, but because they must be true for us to continue on in life. To not believe in free will and value means you are nothing.
Section 2C: Value Equivalence Problem (the true Dilemma).

Almost putting myself in the Cartesian predicament, by which I am forced to think from a rational base starting place (although, one with sensation), I realize that we have other problems to consider. In this problem, we have to consider how we choose what is valuable.

It is easier to demonstrate the problem in an example first and work from there. Bear with me please. Our example:

If Object 1 and Object 2 have innately equivalent value, and we could only choose to pursue one or the other, how would we choose which one to pursue? While one could randomly decide between Object 1 or 2, the method of random choice has placed additional, yet artificial, value on whichever particular object is chosen--other choice-mechanisms would impose a similar artificial value on one object or the other. As one object was artificially worthier, they were not truly equivalent in our perception. In reality, there is no way to choose between two equally valuable options. It is illogical.

This problem can applied to everything in our initial evaluation of all valuable objects. If we live in a world of equivalence, where everything is just plain valuable and equally so, we could not pursue any one thing could we? As we cannot pursue everything we perceive to have equal value at one time, we must understand the begged mechanism for choosing that which is valuable.

The value of all objects and ideas cannot be truly equal because we cannot logically choose one option or another if both are truly equal. In addition, there can be no simultaneous pursuit of two objects or ideas which cannot be simultaneously pursued.

Now, surely, some would think in their minds while reading this: if both pursuits are equal in value, then what does it matter which you choose? Here, we enter a realm of weak psychological egoism and determinism. It is an age-old idea, one that holds some merit. Now, I say this is a weak version of egoism because it is. Stringent egoism would imply that a person pursues what they consider to benefit themselves the most because the person in question perceives themselves to be the most valuable thing to pursue. Our evaluation does not need this premise, and in fact, can easily go against this notion of such a high degree of self-worth. However, the very base sense of egoism and psychological determinism remains true. We will beg at least three questions in order to solve the value equivalence problem:

[4] A person will pursue what they believe to be the most valuable object or idea. (begged)

Obviously, [4] is a huge concept. It implies free will, it implies rationality, it implies personhood, and so on and so forth. It is not so easy to do away with the above concept, it remains resilient, and to most it is already an undeniable truth at heart. And, for now, as I have much to cover, I will ask you to wait for further discussion of this issue. I promise we will re-examine these ideas with depth.

Assuming [4], we want to consider how a person would choose between two objects of equal maximal value. The key word in [4] is most. Most requires a single object or idea to have more value than all the rest. So, from begging [4] we will arrive at our next premise:

[5] One object or idea will have the most value (begged)

So, if there are two or more objects of value in the world, one must have more value than the others. Since value is not just perceived, rather it is innate, we must also claim, if we wish to have rational pursuit at all, that some object or idea has the most value.

The equivalence problem is solved by begging the question that, at least for whatever we are choosing, which we assume to have the highest value, there is no equivalence at the very peak of the value spectrum. That which is most valuable is truly most valuable, we believe this to be true at any point we pursue anything. Now, it is obvious (as I have stated over and over again) that what we believe to be most valuable may in fact not be the most valuable object or idea—but, this does not contradict the explicit logical requirement, one that we already believe at our very core, that there is a single most valuable object or idea.

Section 2D: Prime and Secondary Value Problem

If some one thing must be the most valuable thing in the universe, then what does this say about all other objects and ideas? It only implies, at face value (*cough, just making sure you are awake), that all other things must have less value. The question then becomes, do other things cease to have value in virtue of not being as worthy of pursuit as the most valuable object or idea?

We can consider that a ball might have value. But, surely a ball is not the most valuable thing in the universe. As we seek that which is most valuable, we will pass over the ball, regarding it as not to be as valued as the most valuable thing. Is the ball still worth pursuit in any possible way? Remember, this is not an issue of perceptions (perceptions lead us to the original begged question, but not to actual values beyond the begged propositions directly); this is an issue of actual value possibility. Can the ball, as a secondary object, something which is not the most valuable object or idea in the universe, be valuable? To even acknowledge the existence of the ball is to recognize some semblance of innate value in the ball. To ask whether the ball can have value is to ask whether it can be considered, used, acknowledged, and so on and so forth. The consequences of denying the possibility of secondary objects of value, opting for a sole prime valuable, could prove disastrous.

There are really two options.

1.) There is only one thing of value, and we wrongly perceive other things to have value.
2.) There is one object of greatest value, and all other objects and ideas are of lesser value, but are still actually valuable to some extent.

Luckily, we’ve already required of ourselves the pursuit of several ideas. Deductions upon deductions, each of these have value, most in virtue of the previous, some begged in themselves. You can’t even form singular idolatry of Logic (going back to the root deductions and begged questions), assuming that logic itself is the highest value. Why? Because the steps required to consider logic, which are composed of several things, are not singular, they are plural (there are several premises you will value). You will eventually (just as a begged question) consider and pursue more than one single idea, even in these small deductions. We beg the question of the plurality of valuable objects. Thus,

[6] More than one object or idea has value (begged).

This brings up other important questions. Firstly, what is the most important object/idea in the universe, and how would we know? (Hello, Anselm’s ontological proof!—existence is a perfect making property) And,

Section 2E: Degrees of Value

How does one make sense of a world with multiple objects/ideas of value? One will have the most value, and the others will have at least some value. This leads us to our next conclusion.

[7] The value of objects and ideas must be ranked by degrees.

At the very least, we can see that there are two degrees. Prime and secondary. We have no begged reasons as of yet to think that secondary cannot be separated into a much larger set of degrees of value. On the contrary, we have very good reason to suspect a spectrum of degrees of value larger than a binary system.

Which is better--A world with 1 kiss or a world with 2 kisses? If a kiss is actually valuable, and unless a kiss had infinite value, then 2 kisses would seem worthier of pursuit than 1 kiss. Most would agree to this. Things can be ranked in value. 1 dollar is worth more than 2 dollars (by definition?), one action is better than another, and so on and so forth.

It would seem that by definition, since 2 is greater than 1, that there must be the existence of quantity and quality of the objects and ideas in the universe. We can easily create a spectrum, a huge array, a LIST of all the objects and ideas in the universe in which we could prioritize them from the most valuable object/idea (Prime) all the way to the least valuable object/idea in the universe.

Metaphysical values of objects and ideas can be different—essentially there are degrees of value. Some utilitarian thought has outlined excellent ideas concerning principles of mapping out objects of value. For now, it is good enough that we can justify the existence of multiple objects of value. It is also noteworthy that secondary valuables could possibly have equivalent value without interrupting our choice-mechanism. The single prime value is our true and sole pursuit, all other things are secondary. There is no specific reason at this point not to allow for the metaphysical possibility of equivalent value in the secondary valuables.

The last significant conclusion to draw is this: The degree to which something ought to be pursued rests simply upon the degree of value of the object in question. This seems self-explanatory, but we simply must emphasize the mathematical beauty of a value system. Each exact degree of value is equal to that exact degree of value. This would imply utility from a deontological logic/value base. We assume basic principles and rules (deductions), from which pours out further rulesets, primarily a teleological notion or mode of thought.

Section 2F: Types of Value

We’ll take a step back and look at the bigger picture for a moment. When most people think of value, they can’t really put their finger on what it is, but they certainly appreciate it. What is ironic about our perception of the world as post-moderns is that we separate the world into categories of value. This is financial value and that is moral value and so on and so forth…

What we really need to ask is whether there can be different types of value at all. The short answer is no. If something is worth pursuing, then it is worth pursuing, period. Universality of value means that each degree of value of is equivalent in every possible way. For now, I’ll count utils to mean a degree of value. These utils of value are equivalent and universal, and all things with value must be compared to such a system. (*you’ll notice that it is here that modern Economists have inadvertently crossed into the value system).

I bring this up because it has an immediate effect on how we perceive the world. It is true, every man has his price. Essentially, this is ironic and maybe even startling. For example, just as a thought experiment: It means that X-utils of money is worth something else with X-utils of value. Now, whether economics and trading exist at all has to be established (and is not within range of our deductions at this point). It is quite conceivable that economic systems which trade capital and money are merely a façade, a true Darwinian evolution, something that is entirely man-made. Ownership may very well be an illusion. But, if money and economics are real, and actually valuable, then we can buy things of finite value with it. This, you will see, is an odd thing to say.

I think the one of the more revolutionary aspects of this value system is how we come to understand the universality of value. We can no longer attempt to separate or distinguish types of values. We are required to think of value in the mode of the moralist. Having universally valuable objects, one of which is the most valuable as we have begged, there is that which we should pursue by definition and that which we should not pursue by definition; there is that which we ought to pursue and that which we ought not pursue, there are universal statements of absolute right and wrong based specifically on the innate and independent value of objects and ideas in this world. The value system is one of absolute morality.

There is value, or there is nothing; There is logic, or there is nothing; There is morality, or there is nothing. All choices are moral ones. They are meaningful in virtue of our freedom to choose amongst the many objects and ideas, and meaningful in virtue of the specific and innate values of each object and idea.

The universality of value is highly relevant, and in my opinion, greatly misunderstood by most people. It is only natural that we compartmentalize our lives, creating separate types of values—but, this process of separation isn’t necessarily correct. Essentially, there are problematic distinctions made concerning different values and value systems—these distinctions are facades. One cannot simply designate this as ethics or morality (words that people have far too many definitions for), and this as finances, and this as political law, and this as religion. There is only one value: Is it worth pursuing, and how much is it worth pursuing? This is the only question we should ever ask.

The funny part is when I hear you can’t compare this to that, and frankly, with a universal value perspective, you MUST be able to compare everything. Sure, it takes a great deal of work calculating each objects utility, and we may be too stupid to be able to do it perfectly, but it is at least metaphysically possible—and that is a necessary distinction to make.

Learning to rethink value at its core will be difficult for many. They are blinded by their artificially imposed (and nearly useless) distinctions. Consider, for example, the separation of church and state (which is still technically possible even in a universal value system, but not for the reasons that most people choose to accept this separation). The reasons for this are not genuinely good ones. It is, of course, a philosophical choice to do this, but it is by no means good philosophy (and thus, it is really a form of relativism). Law and morality and ethics all seek to regulate what one ought to do…or, to be more specific, what is worth pursuing. They all are attempting to do the same thing. The reason we really don’t need these distinctions is because there aren’t necessary distinctions to make. Sure, maybe religion and politics have different methodologies in producing what they consider to be the right correct answers and implementations of value, and of course, this distinction of methodologies is useful insofar as we can point out which system is which, the fact remains that we cannot forget the end goals of all of these institutions. We are so caught up in the maelstrom of details that we forget the overarching picture.

This idea of value permeates everywhere. It is inescapable, even in what you may consider the most minor things. When you evaluate two different investments, and you say one is worth more than another, you are making several claims—all of which have everything to do with a value-centric world. You are claiming something like, money is valuable and that money is tangible representation of value, finite and quantifiable. You are reaching out to an economic system and assuming that it in fact valuable to even consider investments and valuable to consider economics. You are thinking that what makes one investment more valuable than another is the difference in the financial returns. You are assuming that ownership of property even exists (metaphysically, this is very difficult to prove), and so on and so forth.

Don’t you see the implications of really thinking in terms of straight universal value?

So, again as an example, if money is really valuable (and trade/property exists, which is the only way money could have value), then you should technically be able to buy any finitely valued thing with it. This is huge. It means you could technically buy the entire planet. Or, what about this: Humans are imperfect, thus they are lacking some value; Thus, humans do not have infinite value; Thus, a human can be bought with money. Ah, I do see problems with assuming that money has any true value.

But, the universality of value, and thinking of each degree of value or util as being equivalent as some mathematical measurement of value, is even further reaching than what we have imagined. It means that the ought to do in a moral sense must be equated with all other things of value.

Morality is universal. All questions are moral questions. When asking, should I get the purple or the red car, you are in fact asking which has more value. Value is value. This is a moral question by today’s standards of the word morality. There is a definite right or wrong. A yes or no, a this is more valuable than that. This is what you ought to pursue in this situation.

People want there to be a neutral. People don’t want to have to think so hard about everything they do. People don’t want to be held accountable for what they might consider insignificant things. But, remember that our perceptions of what is and isn’t value, and to what extent a thing is valuable, are often wrong. So, if red or purple is truly significant in any sense, and choosing reveals it must be significant, then we must say that it is a question of value (significance), and therefore is a moral question. Of course, people haze the issues, they want there to be a relativistic underbelly to the problem. It is so much easier to say, what is right for you is right for you, and what is right for me is right for me. We don’t have to think or actually pursue truth. But, from the very beginning we have shown relativism at its core to be deeply problematic. It cannot stand. You MUST choose between this or that. Choices are moral choices.

This is wonderful. Responsibility may seem like a burden in some aspects, but in reality, it is a gift of trust and value. We are given much, let us do well with what we are given.
Section 2G: The Rationality of Morality

Morality is a rational pursuit. It means that, as we will see in the end, Theism and Christianity require a better foundation than mere faith. At some level, you will be using deductive reasoning to pursue what you ought to pursue. Some are just better at it than others.

Irrational belief is meaningless belief. If a madman says they love you because they are mad, do you really think their statement has the same relevance as when a rational person says I love you? Think about how we praise God. He made us rational beings for a reason.

In the universal value perspective, by definition, you must compare things based upon their value. You make all decisions, deductions, thoughts, and choices from a value-perspective (even if it is a warped one). You must be warranted in your belief. You are climbing a ladder of deductions, and you cannot get to the top without climbing the bottom rungs.
Section 3: Right and Wrong

It is clear that value is universal and absolute. There are no types of value, only degrees of it. All values are, as we would say as moderns, moral values. All things are moral—there are things you ought to do and thing you ought not do. Value and logic show this to be definitionally true. You beg the question of morality as the fundamental component of choice. Essentially, the world is divided into right and wrong.

Given our choice-making system, i.e. pursuing that which we believe to be the highest value, we realize that only one option can be available in any given situation. What is the most valuable thing to pursue is the right thing to pursue. Right is dictated by the single most valuable object or idea in the universe. Pursue that one thing, and you will be doing what is right.

Simple enough? Now, all you have to do is deduce what is in fact the most valuable object or idea in the world, and pursue it. You will find that reason will guide you to God (it is splendid that the gift of the Imago Dei should lead us to such a fitting conclusion, no?). For now, we will wait to cover arguments for theism. Just be mindful that value and reason already push us in such a direction.
Section 3A: Relativism

What does it mean for something to be wrong? And, how do we arrive at the wrong conclusion and end up choosing to pursue something which is in fact not the most valuable object or idea? The answer to the question of why sin exists is relativism and irrationality (Synonyms).

What is relativism?

Relativism is the denial of absolute truth. It is the denial of reason and universality. This philosophy (the irony of such a contradiction, the greatest of them all), is really a means to justify immorality and lazy thought—relativism is the way of the pragmatist and of the evil. There are ideals or there is nothing—the right thing requires diligence, planning, hardwork, and pure reason. Relativism is irrationality.

At any point we are not pursuing truth we are in a state of relativism. It is the state in which you do not care to pursue what you actually ought to pursue. You decide for yourself that what is actually valuable is not valuable. You are in a state of sin. It is blasphemy in the end. As none of us are perfect, we are all, at some time or another, in some way, committing the act of relativism. Your goal, as a philosopher, is to eliminate any remnants of this backwards thinking, and to pursue truth entirely.

Relativism is hidden in a shroud of individuality. These are just barriers to the truth. Truth is independent. To even claim relativism is to claim some sort of an absolute. What about not all truths are absolute or something along those lines? Can you pick and choose what is absolutely true and valuable and what isn’t? Will you allow yourself to arbitrarily justify such things?

Relativism may have come from scientists who claimed the world is unpredictable. The initial ambiguity of such a statement is quite problematic, and probably a starting justification for relativism by those who didn’t fully comprehend what science meant. The scientist of course didn’t mean random or metaphysically or logically impossible to predict, and in the case of scientists, not even physically impossible. Unpredictable just means that something is technologically impossible for us to predict an event. This is our own fault, it is our ignorance that disallows us from possibly predicting something. But, people take unpredictable to mean something much larger, such that it is physically, metaphysically, or even logically impossible for something to be predicted (which would not be our own fault). And, this is the first relativist slip. They changed their perception of a predictable and absolutists view of the word, one in which we are ignorant, to the view that the world is what we make of it, and that we are omniscient in our own sight.
Mom is flying in tomorrow. I've got to make sure she buys supplies for herself (and dad's mentionable unmentionables). She is taking Madeline for a week, so we will escape. We are going to Orlanda, FL...sweet. Space shuttle launch I hope, dinner, less stress I hope. We are going to chill...err...boil. Whatever.

Did I tell you about a moron I work with? The guy is a decent programmer and knows his math. Just a highschool education, but in many respects he can be intelligent. Of course, he knows he is smart. I can appreciate that. The difference is when he starts talking about things he really has no warrant to talk about. When he debates with me, he attempts to cover his retardation up with an argument about argumentation. He says that all argument isn't about truth, it is persuasive, and even more blasphemously he explains that arguments aren't really innately true or false. He says that there are arguments where there are two differen &quot;right&quot; answers. Good gracious, stupid people, please die.

He walks me through his spurious proof of how 1=2. Lol, I'm not an idiot. So what, you can dig up algebra that would appear to show a contradiction to be true. This isn't a paradox. Idiot. Division by zero or improper mathematical procedures (which I KNOW he knows he isn't following proper procedure) is already begging A and not A.

It goes to show: you cannot argue with a true relativist. You have to trick them. You have to manipulate them into the subdual and submission. You must force them into the truth. Sledgehammers for brickwalls people!!

Do I agree with manipulation? Another question altogether. Perhaps a paper. Believe me, it is VERY difficult to justify emotional persuasion or manipulation...it often breaks the very rules by which we were intially trying to condition a person to follow.
In light of recent concerns, I've created a forum. The forum will be open for several topics (although, I truly doubt it will be significant to very many people). The initial purpose of the forum is to give us a place to discuss whatever the topic may be. For now, I'm interested in being able to post and discuss while at work. I realize that my family in Thailand have difficulty talking, and frankly, I don't like email. Forums are a cleancut way to DISCUSS. Forums &gt; Email. I hope our family will use it.

The first forum will be devoted towards the Summa Theologica.

To reach the forum, look in the top right hand corner. You'll see &quot;Home&quot; and &quot;Forums&quot;. Just click on the &quot;Forums&quot; button, and you'll be redirected to forums.hypercynic.com.

Pic, yay!
‘Did you know there are numerical concepts larger than than Infinity??’ (At least, mathematicians think so…)

You certainly wouldn’t expect this to be the case, after all–You can’t “add” anything to infinity. That is part of its meaning–unbounded. The natural question to ask is:

Can one infinity be larger than another? The answer, according to mathematicians, is No. Why is this true?

An older demonstration of the infinity principle is the Hotel example.

In a hotel with a finite number of rooms, it is clear that once it is full, no more guests can be accommodated. Now, imagine a hotel with an infinite number of rooms. One might assume that the same problem will arise when an infinite number of guests come along and all the rooms are occupied. However, in an infinite hotel, the situations “every room is occupied” and “no more guests can be accommodated” do not turn out to be equivalent. There is a way to solve the problem: if you move the guest occupying room 1 to room 2, the guest occupying room 2 to room 3, etc., you can fit the newcomer into room 1.

Additionally, you can solve this problem by just matching infinite sets.

Take as an example the set of positive integers N={1,2,3,…}. These natural numbers are like a ray, they start at one and continue infinitely. What if I took half of those numbers, for example, all positive even integers E={2,4,6,…}, which is also an infinite set, would E be 1/2 N? Intuitively, you might think so. You might visualize a pseudo-ray of N, in which every other point is missing. So, how could infinity be 1/2 of infinity? We find that Infinity divided by 2 is nearly meaningless because it is definitionally non-divisible. How can we say that E/2=N and also N/E unless N and/or E=0?

The way to solve the issues of whether or not one infinity can be larger than another is through the lens in which we comprehend infinity. Infinity isn’t just any number. Unlike other numbers, the way to think about Infinity is simply to understand it as a repeating process. It is:

Step 1: A+1-> A (the new and improved variable)
Step 2: Go back to step 1

Clearly, infinity doesn’t follow the same rules as a finite number at all. In order to answer questions about infinity, we’ll need to think in terms of steps and patterns as well.

Infinity retains one very important characteristic: infinity remains countable (theoretically), and this is why mathematicians think Infinite + Infinity = Infinity and how Infinity / 2 = Infinity.

Notice that we can just compare the two sets N and E.

N->E

1->2
2->4
3->6
….

Here is a pattern that describes the numerical concept of infinity. It also explains, at least in the minds of mathematicians, how one infinity cannot be larger or smaller than another infinity.

N’s Size of Infinity=

S1: N + 1->N
S2: Go back to S1

E’s Size of Infinity=

S1: E + 0.5->E
S2: Go back to S1

If you could count either set in any meaningful way, you’d get the same as size the other infinite set as well. Thus, even though N/2=E, the size of N=E. This is the size of a countable infinity, which is denoted by the ability to systematically associate each element in an infinite set to an element in the natural infinite set.

It would appear that every element in any infinte sequence could be systematically associated, in a one-to-one correspondence, with an element on the natural infinite set. Thus, if it is infinitely large, it is purely infinitely large.

However, mathematicians believe there remain numerical concepts larger than infinity. Remember, the lens from which we understand the number infinity allows us to think in terms of patterns and processes. For a number to be “larger” than infinity, requires that a set of numbers be larger than a countable infinite set which rests upon the backbone of that initial “infinity” pattern.

(Cardinality enters the room)

Can you make sets that don’t do this?

1->A
2->B
3->C

….

The answer may be yes. And, it is here that infinity is supposedly belittled. The uncountable is larger than the unbounded. Georg (no “e”) Cantor offered us some interesting proofs about it:

Cantor’s most well known proof considers an infinite sequence of the form (x1, x2, x3, …) where each element xi is either 0 or 1.

Consider any infinite listing of some of these sequences. We might have for instance:

s1 = (0, 0, 0, 0, 0, 0, 0, …)
s2 = (1, 1, 1, 1, 1, 1, 1, …)
s3 = (0, 1, 0, 1, 0, 1, 0, …)
s4 = (1, 0, 1, 0, 1, 0, 1, …)
s5 = (1, 1, 0, 1, 0, 1, 1, …)
s6 = (0, 0, 1, 1, 0, 1, 1, …)
s7 = (1, 0, 0, 0, 1, 0, 0, …)
…
And in general we shall write

sn = (sn,1, sn,2, sn,3, sn,4, …)
that is to say, sn,m is the mth element of the nth sequence on the list.

It is possible to build a sequence of elements s0 in such a way that its first element is different from the first element of the first sequence in the list, its second element is different from the second element of the second sequence in the list, and, in general, its nth element is different from the nth element of the nth sequence in the list. That is to say, s0,m will be 0 if sm,m is 1, and s0,m will be 1 if sm,m is 0. For instance:

s1 = (0, 0, 0, 0, 0, 0, 0, …)
s2 = (1, 1, 1, 1, 1, 1, 1, …)
s3 = (0, 1, 0, 1, 0, 1, 0, …)
s4 = (1, 0, 1, 0, 1, 0, 1, …)
s5 = (1, 1, 0, 1, 0, 1, 1, …)
s6 = (0, 0, 1, 1, 0, 1, 1, …)
s7 = (1, 0, 0, 0, 1, 0, 0, …)
…
s0 = (1, 0, 1, 1, 1, 0, 1, …)
(The elements s1,1, s2,2, s3,3, and so on, are here highlighted, showing the origin of the name “diagonal argument”. Note that the highlighted element in s0 is in every case different from the highlighted element in the table above it.)

Therefore it may be seen that this new sequence s0 is distinct from all the sequences in the list. This follows from the fact that if it were identical to, say, the 10th sequence in the list, then we would have s0,10 = s10,10. In general, if it appeared as the nth sequence on the list, we would have s0,n = sn,n, which, due to the construction of s0, is impossible.

From this it follows that the set T, consisting of all infinite sequences of zeros and ones, cannot be put into a list s1, s2, s3, … Otherwise, it would be possible by the above process to construct a sequence s0 which would both be in T (because it is a sequence of 0’s and 1’s which is by the definition of T in T) and at the same time not in T (because we can deliberately construct it not to be in the list). T, containing all such sequences, must contain s0, which is just such a sequence. But since s0 does not appear anywhere on the list, T cannot contain s0.

Therefore T cannot be placed in one-to-one correspondence with the natural numbers. In other words, it is uncountable.

Such a ‘proof’ of an uncountable number would seem to overcome, in size, the pattern we think of as infinity. But, doesn’t this all seem like cheating? The proof appears to defeat infinity in name only.

Surely one could see that we are using a pattern that is definitionally non-associable, it is always one step ahead. It is saying, infinite sequences can never reach this sequence because this pattern is designed to be “larger” and unmatchable via a pattern. It should be perfectly obvious that an infinite set of all possible sequences of all possible combinations of infinite elements MUST match any such sequence of infinite elements….That is part of the definition of infinite set.

Here is the size of the ‘uncountable’ pattern I see:

Step 1: Infinity (step 1: A+1= [new] A, Repeat step 1) * Infinity=A

Step 2: A + 1->A.

Step 3: Repeat step 2

I think of it as a computer, with only so much processing power. In this in instance, it would require that either infinite sequences or infinite elements were assumed, and we were computing the other. Insofar as we are forced to compute, the uncountable number is larger simply in virtue of having started at an assumed larger number in the computation.

Technically, if a computer had infinite processing power, it would possess all possible combinations of sequences/elements, including the supposed ‘uncountable’…It is only through the understanding of a limited computing resources can we say that, following these steps, an uncountable type number is always larger than infinity.

I realize that most don’t see infinity as something to be understood as a “computable” number…but this is EXACTLY what we mean when we say it is a “countable” number..

The uncountable number either makes patterns that are simply “infinite + 1″ (or similar) larger than infinity, as they definitionally are larger and “unmatchable” in the creation of their computable pattern, or the uncountable number is nonsensical.

It all boils down to this. Infinity is understood as a pattern (steps). The only way to understand how other infinities are not larger or smaller than other infinities is through a pattern solution (1-for-1 comparison). Ironically, the only way to say something is larger than infinity is to have an initial pattern (steps) that pre-emptively begs the question by saying it is “larger” than infinity, so that it be larger in the pattern solution (1-for-1 comparison).

Uncountable numbers beg the question of being larger than infinity, but they don’t prove it. You already had to assume the (step) pattern of uncountable numbers to be larger than infinity before you could conclude the pattern solution (1-for-1 comparison). This doesn’t mean that the uncountable number (essentially, Infinite + 1> Infinity) isn’t real or true; I’m just pointing at that we are back where we started….Can only infinity be larger than another in a meaningful sense?

The computational answer does seem to me to suggest it very well could be…

So, I ask, do you think something can be larger than infinity? Show me why or why not.
At the risk of sounding like a &quot;coffee house intellectual&quot; moron, an epiphinaut, or someone trying to sound too deep, I'll share my thought for the day. Maybe I'm seeing too much into the issue, but for now, I believe it is a worthy thought to consider.

Out of curiosity (and boredom), I chose to lookup the meaning of the &quot;4th dimension&quot;, specifically what a 4-dimensional object looks like and how it could be relevant to someone like me who tends to visualize 3-dimensionally. I found that it was a fairly odd, and maybe even not fully explored topic in my research. On one hand, the mathematicians look at it as a tool, simply something that is &quot;capable&quot; of being demonstrated, but the visualization not useful in itself--or rather, the mathematical implications (which I still don't understand) seemed more important than the visual applications. On the other hand, we have the spooky sci-fi freaks who probably make it out to be more than it is...But, after further consideration (or simply due to my own ignorance?) I can't help but wonder if there is more to this issue that I thought at first glance. I read even further about what a &quot;4th dimension&quot; visually implies, and it was astounding. So, I thought I'd make a quick note about it, simply because I thought it warranted discussion (even if only with myself).

At first, I didn't even know howto fully visualize a 4-d object (and, to be honest, I still struggle to think about it, probably because I'm so used to thinking in 3-d and seeing in 2-d). For me to understand 4D is like explaining 3D to a being which lives, breathes, and thinks in 2D. If I talked to a &quot;plane&quot;, how could I possibly describe the 3rd dimension (depth) to the 2D object or thinker? He has very little reference to work from, with the exception of understanding the changes in perspective from 0D to 1D to his 2D. Still, it is a very large gap for him to overcome to even begin to think in 3D, no? I think the same is for our case when attempting to &quot;visualize&quot; 4D in a 3D mindset. What is really funny is the learning I've done so far in regards to +dimensions, the 4th and so on, have only be visually explained to me in 2D. It seems like it would be much, much easier to explain 4D to me in 3D than 4D to me in 2D, much like explaining 3D to a 2D thinker is best done in 2D rather than 1D or 0D. I would like to more fully grasp 4D. Perhaps when I happen across a math/science department they'll have a good 3D model/projection of 4D for me to observe (although, I assume it would be impossible to make a &quot;good&quot; representation of 4D in 3D, I assume it would atleast be better than the 2D projections).

&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/5/5e/Dice_analogy-_1_to_5_dimensions.svg/400px-Dice_analogy-_1_to_5_dimensions.svg.png&quot; /&gt;

This doesn't perfectly demonstrate the initial thoughts of 4D (or 5D), but it gives us a place to start. I decided to draw it myself just to better understand the picture. I like to think of dimensions as &quot;movement&quot; in some direction. In this case, I take a ready made object in the lower dimension, and then I 'move' all vectors of the lower dimensional object in the same direction (and 'length') and then recreate the lower dimension as a new projection, then I connect the corresponding vectors of the lower dimensional objects, and I've created a new dimension. Try it out! Point to Line segment to plane to Cube...and then you see the 4D cube. Here look at this, it is color coded (what I used to draw the 2nd time as well):

&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Tesseract_net.svg/451px-Tesseract_net.svg.png&quot; /&gt;

Just focus in on the object to the right, and you'll see how it works. This is a good start in the right direction (hehehe). But, unfortunately, I am just a 3-D guy who uses his retinas to reconfigure 2D images into 3D perceptions. Attempting to &quot;put myself&quot; in the picture to fully understand that 4D object is a daunting task. I have 2 other devices that help me right now (it only gets more complicated when you start using things other than cubes). The next useful projection is the &quot;net&quot; tesseract at the left of the above image. Imagine what other nets would look like to us:

&lt;img src=&quot;http://mathworld.wolfram.com/images/eps-gif/CubeNet_900.gif&quot; /&gt;

This demonstrate 2D planes that are &quot;folded out&quot; to give us a better understanding of the meaning of a 3D cube. The 3D Net is a &quot;folded-out&quot; tesseract (4D cube).

&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Tesseract2.svg/188px-Tesseract2.svg.png&quot; /&gt;

This helps me to understand a basic principle about 4D: 4D naturally perceive things in 3D in the same why I naturally perceive things in 2D, and only through a mechanism like a &quot;retina&quot; could a 4D thinker reconfigure the multitude of 3D images into a 4D perception. More importantly, in the same way that depth perception (3D) is simply a miracle to someone who can only see in 2D, there is an extra type of depth perception, namely seeing 3D objects in their entirety (all at once) that would be miraculous to those of us with normal depth perception.

&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/c/c8/Glass_tesseract_animation.gif&quot; /&gt;
I like to think of it in terms of points. A 1D thinker can see (all at once) the infinite set of points along the line.  A 2D thinker will see a set of points on a plane, something that is infinity larger than the 1D thinker's Line. The important aspect of the 2D thinker is that he can perceive multiple lines rather than multiple points on a line. The 3D thinker, likewise, will see more than a plane's-roaming 2D thinker, and will see infinity X infinity X infinity (I like to think of X,Y, and Z on a graph in this respect). Again, the 3D think will see &quot;the whole&quot; of multiple planes, not just &quot;the whole&quot; of multiple lines like a 2D thinker. In this way, the 4D thinker would need to see &quot;the whole&quot; of multiple 3D objects. The 4D thinker's visual of 3D objects would definitely be analogous to a 3D thinker's visual of 2D objects.

Interesting things to think about. Consider that a 2DT (two dimensional thinker) will be unable to see a plane that moves back or forth (depth) even a few inches. It would appear the 2DT that a whole plane &quot;disappeared&quot; or became invisible. Would not such link between the 3DT and 4D exist? Are we not blind to it in the same way?

Lastly, if time is really the 4th dimension (which I still have trouble understanding at all), then would we not say that God perceives (if He does such a thing) at least 5-Dimensionally? Sounds stupid, I know. But, remember, things with depth are invisible and unintelligble to the 2DT, and likes things of the 4th Dimension are unintelligble to the 3DT. Assuming the 4th dimmension is time, and God is more powerful than time itself, then he must be 5-dimensional to see &quot;all the points&quot; of 4-D objects at once. And, if God is &quot;bound&quot; by time, and co-exists with it, then He might be 4D.

Or perhaps, we can go back to linear time thought, Kantian ideas of time being relative to movement, and just say that &quot;He Knows&quot; it...

But, cmon people!!! wouldn't a world so beautifully made, so perfectly scientific, be made by a Being that is also mathematically precise as well? Would it not make sense that there is a science and a method to this madness and not just &quot;oh yeah, He knows it...through omniscience&quot;. God is a creator, the Great Deducer, THE Scientist. If it can be known, then He knows it not just because He is omniscient, but also because He could DEDUCE it and because He can PERCEIVE the entirety of our world. He can see ALL POINTS at once. Be careful my Boethius-sympathizing friends...

As an additional note, at further consideration, it seems we are possibly 4D observers as we &quot;move&quot; through time. I don't know if that is geometrically equivalent or not...regardless, I think a case still might stand for arguing that God has -scientifically- better depth perception than we have, perhaps in the way of viewing the world through higher dimensions than we do.
Wow, it has been a while since I've posted. This has definitely been a busy month.

1) JRE graduated
2) Mom visited
3) k0sh3k and I went on vacation
4) Grandpa and Grandma moved close to us
5) JRE moved and Mom went back to Thailand
6) I've been teaching another studentless class (I never had many students to &quot;drive-away&quot; in the first place)
7) Birthdays for AIR and k0sh3k.

That was in no particular order. Short and sweet though. I'm sure things are just heating up for our new arrival. The incubatee is now muscling his or her (or its, heaven forbid) into the second trimester. Yay!

Oh yeah, I guess I didn't write this down before...but it is important. We've decided to go straight to Thailand instead of going to school first. k0sh3k and I knew we wanted to live outside the states and do missions and maybe teach our subjects if given the opportunity. We realize that we just won't benefit enough from going to school at this point, and we feel there is much more to be gained (and purpose to be fulfilled) by just entering missions now.

School is more of a barrier to where we should be than a path. School offers us education and certification. Both of which can be important, but unfortunately, these are not entirely useful in Thailand. k0sh3k and I have had to ask why we want to goto school, and we needed better reasons than we had.

Without a doubt, k0sh3k and I have peculiar intelligences, and I believe we have reached a basic threshold in our fields in which we are fully capable of learning, analyzing, and creating knowledge entirely on our own if need be...So, if we are really serious about learning in the first place, then we will do just that, regardless of our circumstances. The basic principle of school can be completed outside of school (the certification no, but that isn't why we really would want to goto school).

If we were called to teach elsewhere, then k0sh3k and I have the tools to do it already. Others may disagree, but that shows in my mind that they don't know us or see the larger plan at all. Of course, of course, we have committed the usual crime of our generation, the usual line goes: &quot;I'm the exception to the rule&quot;...&quot;I'm special&quot;...Lol. While ironically this isn't true of most who say it, k0sh3k and I are chosen. I could loop this back to &quot;other may disagree&quot; at this point. But, there is no point. k0sh3k and I have proven ourselves exceptional (it is one of the perks of being &quot;weird&quot;), and I know that we have the tools to do what God asks of us. There is a reason why I find &quot;4eak&quot; so fitting, I've pretty much taken it as a second name.

Anyways, this shift in plans is obviously important to us. We've been gathering what we need to move. We've talked to our doctors, and we've been advised that we cannot move until at least 8 weeks after the baby is born. This seems fine. We have so many loose ends to tie up. Preparing for the next baby, having it, present and future work and finances, getting 1-year teaching visas, figuring out what to do with the house and the stuff we have.

I will admit, the shift is somewhat bittersweet, but in no way regretful (in the end I am content[THE word of sufficiency]...nay, even happy) about the decision. It is only bittersweet on the surface of things, and that would only be in terms of the opportunity costs foregone to complete our mission. These, obviously, are acceptable &quot;losses&quot;.

I do have to say though, my parents have offered us the house indefinitely, and it has been a true aid to my family. In order for us to have payed for rent elsewhere, both of us would have needed to be working (which would have been fine, but certainly not preferred). The house has offered us the ability for k0sh3k to be a stay-at-home-mom (which sometimes she likes and sometimes she doesn't, although, it is growing on her). We are very grateful for the use of the house.
As usual, a fairly interesting week or two. Beware a post with no transitions. I’m just regurgitating thoughts…it may go on “family guy tangents”…

j3d1h has had an odd diaper rash for a week (she very, very rarely has a diaper rash). We are good about cleaning her (k0sh3k especially), but this diaper rash was very weird. It was a bit all over, but it was heaviest on her lower back…weird. So, we tried different rash-creams, and nothing worked. It would look like it was getting better, and then all of the sudden, it would get worse. k0sh3k took her to the doctor (regular checkup) and we found out that j3d1h has eczema.

Ironically, diaper rash ointments tend to remove and eliminate moisture, which only makes eczema worse. We have a special eczema cream, and I’m sure we’ll be careful to make sure it doesn’t get any worse.

Switching topics…

I also wrote something interesting:

———————————

The Equal Pay Act amended the Fair Labor Standards Act in 1963; it provides that where workers perform equal work in jobs requiring “equal skill, effort, and responsibility and performed under similar working conditions,” they should be provided equal pay.

Essentially, the law also reads:

If an employer asks me to perform an unequal amount of work, then I should get a proportionately unequal amount of compensation. If I am asked to perform using a higher amount of skill, responsibility, and comparative effort than others around me, then I should be provided higher pay.

Expecting more work from an individual, but not paying for it is a form of discrimination. Munesh, and by proxy his supervisor(s), discriminates against me.

The degree of satisfactory work (quota) is clearly defined per task. Take for example Outbound calls which require 8.6 per hour (adjusted to show the actual quota) equates to 65 calls expected in a 7.5 Hour period of production (breaks and lunch do not comprise productive time). To meet expectations requires 65 call in a work day.

Munesh has directly told me he will raise my ‘individual quota’ above everyone else’s quota to 75 per day (as opposed to my co-workers’ 65 calls per day). He has explicity stated several times over the year that those who do not meet their quota will be endangering their employment and future written references. According to Munesh, by not meeting 75 calls per day, I risk termination of my employment and a poor reference letter. I make the same wages as my fellow employees. Why should I be required to perform tasks of higher skill and effort without being paid for them?

Munesh requires that I perform 8.7 hours of work for only 7.5 hours of compensation while my co-workers are only required to perform 7.5 hours of work to receive 7.5 hours of compensation. This is discrimination.

There are two solutions:

If the quota were universally changed so that everyone was required to work 75 calls per day, then I would not feel discriminated against.

If I were paid for 8.7 hours of work instead of 7.5 hours of work, then I would not feel discriminated against.

——————————

I have no idea how it will work out. I know that I can’t goto my supervisor, or his supervisor, or even her supervisor about this issue. I’ll either goto HR or the VP (he is a good guy, and I’ve seen him “weigh-in” before on behalf of small folks like me in regards to similar issues) for advice about it.

For now, I am working to find a new job entirely. I’ve applied to many jobs just within Humana (and I’m applying outside as well). I need 30k + benefits a year for our family to do this with breathing room (kids aren’t cheap).

Moving on (no transitions for you…):

I got a jump-drive with 2GB on it for 15$ (that is a steal!). It is a very neat device, and I’m sure, it will be archaic within a year. 2GB is still a good deal of info. The 5GB will be what matters, as it will catch up to one-time media storage like DVD-R’s.

Speaking of Gift-ish buyable things:

k0sh3k and I have decided to work together on our birthday gifts. We are getting teh gr8 bukz (I have to teach mom some l337 speak while I can). I think this will be a wise choice for our childrens’ education. No matter where we are, we have the heart of Western thought summarized for us…and it will be important for our children to be educated in such things.

Speaking of which, I don’t exactly know how we will go about teaching our kids (I’m honestly not a good teacher…but k0sh3k is awesome). Reading and math are everything. I look at all other topics as advancements to these fundamental topics…these are the modes or languages of all other scholastic pursuits. Obviously, I wish to concentrate on the modes first. I suppose I will need to add logic and music to the list of modes as well. Hrmm…but school requires more. Trades, travel, dealing with society, and other “extras” seem to be relevant experiences. How does one pack all that in? I honestly have no idea how I can give my kids better than what I had, lol.

One major issue is knowing the line at which I will force my children to do something and when I’ll just let them start and stop at whim. Learning about frogs is about them, reading certain types of fiction is just up to them…but, as we move closer and closer to the fundamental modes we begin to see more necessary bodies of knowledge. I don’t want to eliminate their interest in the necessities, I’d much rather they strive to learn and grow in those areas just from plain curiosity, ambition, and self-growth rather than just because I said to do it.

I suppose I look at everything we do as a parent as a form of education. We are conditioning our children (influencing, manipulating). Do I trust my gut/instinct? Should I? Definitely a difficult proposition..this “raising the kids” things appears to be a solid challenge. I am responsible for what they become (in part).

Of course, we all know all of this. We’ve known for a long time…it is just more relevant to me when I am in the midst of such decisions.

I’ll tell you one thing though: parents wing it. Straight up. No lies. At some point, no matter how prepared you are…you will wing it. We might say life is improvised…even though there is only one perfect script to follow.

oh snap….btw, to family members who read this:

The Tattoo-word is out. Grandpa and grandma know. They caught k0sh3k and I…they were fairly polite, we played ‘light-hearted’ defense fairly well. It was clear they believed us all to have them…they saw mom’s…LOL! Of course, Grandpa and grandma were not terribly happy about it.

I always wonder about the generational gaps (a fascinating concept to me). The ebb and flow of “memes” in generations, the biological differences, the change, and especially the similarities…these are important things to watch. what is the statistical relations between my parents and their parents? How will k0sh3k and I, and our bro’s+sis’s, be similar/different to our parents? How about our children? What aspects of these things are good, and what are bad? If good, what can we do to promote such things, and if bad, how do we eliminate the cycle? How should such evidence influence our perception of our grandparents, parents, selves, and children? But, be careful not to be wrapped up in identity…unless you identity is simply seeking God’s Will. And, insofar as this would be God’s will, you should purusue it. I think we can deduce several uniquely hard to understand elements of God’s Will for familial relations and so on from studying the generations.

Oh, they saw our tattoos at Ann’s July 4th party. I was surrounded by Old Southern Republicans…Always a long event. Morons. Anyways, the party was short for us (j3d1h needed a nap)…and we had a good visit. The house was clean (not for long I assume).

k0sh3k’s Morning sickness is an all day sickness, and it appears to be getting worse and worse. Thankfully she can take her Medicine to have fewer Migraines. Throwing up sucks still. I’m trying to keep her eating because if it gets even worse, then she might not be able to eat (or keep it down). I’m not worried at this point. But, I will keep watching.

I’ve begged people to post on the forum…I realize I need input. I need to formulate the picture, and the innovation might require some questions from outside sources.

We’ve been making awesome proxy cards. I clean cards off we acetone, erasers, and sandpaper. Dry em, print them, and dry them. Beautiful proxies. I can get cards that look identical…I could use them in tournaments…even sell them (which I won’t…obviously).
I was talking with [[k0sh3k]] earlier about a funny observation (one I continue to make over and over). I keep looking at a world of people who all are in a struggle of wills…everyone thinks they know best.

Inevitably, people think they are right. Honestly, I’ve never met a person with any opinion on a matter beyond the explicit “I don’t know”, that didn’t think they knew the answer. Everyone with an opinion thinks they are right.

Someone can see a small part of the picture here, and Johnny boy knows the answer to the world’s problems over there. And, somehow, I remain surprised that everyone thinks they have a right to an opinion at all. Who the hell are we to think we know the answer to political/social/religious issues unless we’ve actually sat down to think from the base up? Or, why think from the base up? I guess that requires justification…almost like a rational base to support a conclu…oh nm. Stupid people.

It is here that I sympathize with a fringe/intelligent relativist. We know there IS absolute truth. We know that truth is knowable, and that we can deduce such things. We question what makes someone an authority on an issue. We wonder why the morons around us think they are right…and why we would be wrong? It is completely ironic that we should trap ourselves in the cynic’s case: people are stupid. After all, we are people, but we think we aren’t stupid. I’m not here to promote the world as if it SHOULD be a land of swarming idiotic individuals, but I will say that is what the world is…

I am constantly asking myself, why try? Why should I even try to teach? I know the answer (oh, yes, I said it). But, are people ready to learn? What state of mind must a student possess? There is one relevant variable that decides whether or not you are ready to be a student: do you think you know the answer or not? Do you think you could be wrong? Are you willing to accept that you don’t know the answer for the time being? The world answers these questions in the negative. They are all experts on morality and what “ought” to be (some phrase the answer as if it isn’t morality…but they are ignorant). What could anyone possibly teach them? THESE are unteachable. They choose their ignorance, they choose irrationality, and they choose relativism. They choose for themselves the unforgivable sin of being unable to grow.

How do you teach the unteachable? Should you even try? obviously, we WANT to teach everyone…Let us be honest, pragmatic answers are lazy answers. I can’t give a practical answer because that isn’t “ought”…unless you are omniscient and you can calculate all effects (in which case the ‘ought’ is the practical…but hey, you are always all-knowing, probably all powerful too…what isn’t practical for you?).

I often wonder what the prophets thought and felt. What went through their heads as they taught those who were unteachable? God tested the prophets too. My favorite word of the day: “Woe”… It fits, ironically, both the prophet and the people.

Good gracious. I sound Emo. Lol, what can I say?…”I’m the exception”…?? It is true, I am limited. But, I ask you, show me how I’m not the exception? What about me rings…normal? Shouldn’t a chosen person be exactly that…the exception?

Did God make prophets that were never heard? Was it the fault of the prophet? The People? Both? I suppose, the world need smart janitors…after all, the aim to know God..regardless of your position or circumstance.

It is odd that we should strive to be: unique. I can look through history (not just what moderns teach their children “you are -so- special” talks) and point out exactly where people strive to show they are the exception. People want to think they are unique. And, I’ll agree with them: they are the only people to be exactly where they are…to live in those exact circumstances.

My answer to this is, of course, one that comes straight out of gaming (haha, I know…so sad…although, I’m betting my religious knowledge influenced my understanding of games…in which it is much easier to write about things like “fairness”..so props to God still):

Life (Gaming) isn’t about what you have, it is about what you do with what you’ve been given.

Your praised uniqueness is irrelevant. What you believed and how you behaved in your ‘unique’ position is all that mattered. This is obvious. I think we forget that it is true. It is obvious from our pursuit of uniqueness that we forget why we are here…to become a Godbot (btw, best F-ing word ever…I may name my book “Guide to Becoming a Godbot”). Literally, Godbot=Slave. Get used to it. Oh…I suppose I need to justify a book, or even why I write this blog? Do I do it because I want to be unique? Does it serve the Will of God?

I think this serves as 1.) a brainstorming center (obviously God’s Will for irrational beings), 2.) A reflective center that inspires change in belief and behavior (obviously good), 3.) a place to vent (I don’t know if this one is God’s Will to be honest–but, you might say this is a more constructive form of ventilation), 4.) A place to collect and remember my thoughts (mental function, seems reasonable…*cough), and 5.) I am good at deducing answers, I am bad at showing my work…and writing forces me to show my work (an area I need to grow in if I ever wish to teach).

Uggh…

I am constantly reminded, in light of our stupidity: God is merciful. He gives us grace. We need it.

Hell, look at this fragmented writing (/sarcasm on…obviously there are more relevant aspects of my stupidity), doesn’t it smack of stupidity and Emo. Silly me.

Anyways, Go check out [[JRE]].hypercynic.com
As the relevance and power of your counter-base deceases in relation to the tempo of your opponent’s relevant threatbase (or as the fundamental turn of the format becomes faster and faster), the more MUC becomes reliant upon tempo-type control features. Generally, the earlier a control piece can be played, the weaker it is comparatively to a later game control piece (often with diminishing returns as you scale down, with few exceptions like FoW). The mana to degree of effective to control should certainly scale, and often there are large, even disproportionate, sacrifices made to have free, cheap, and early counters and control. This means that Force Spike is obviously not as good as Mana Leak, except in circumstances in which the tempo of the game is so fast that your only shot to relevantly control the game with permission requires you to “down-grade” in both scale and often proportionate mana to control effectiveness.

At some point, MUC can no longer counter every threat and continue to generate card advantage. Obviously, eternal formats have evolved to the point that MUC doesn’t even consider it possible to counter all possible threats. Thus, MUC is forced into board control. Board control generally boils down to either permanent removal or bounce (both serve different functions), but essentially they both help MUC bridge the tempo gap. Bounce is the cheapest and most versatile form of removal, but it is quite temporary. It clearly doesn’t deal with threats in the long-term (and this is quite relevant to a control deck), but it can act as tempo gain (something MUC desperately can use often enough)…practically a timewalk in many cases. Again, bounce is not card-advantage, and thus it is limited and least preferred in true control, but often its versatility is necessary to fill in gaps. Single target permanent removal does exist (splash for STP?). But, again it does not answer the problem of MUC only being capable of so many 1v1 for trades while generating spell-based card advantage. The only good answers comes in the form of mass removal. Massive permanent removal is more expensive, less versatile than bounce and pin-point, but it offers MUC the end result in wants: card advantage with no relevant threats on the board (or in the opponent’s hand).

To the extent that the counter-base can no longer scale with the tempo of a format, permanent mass board control must substitute. This does mean that MUC is vulnerable because it is often forced to wait to eliminate threats. But, life is a resource, and MUC can certainly use several tempo variables to its advantage to eventually establish control of the game. Legacy’s fundamental turn decreases the relevance and power of a counter-control strategy, thus MUC is forced to win the game not in virtue of controlling exclusively the stack, but also controlling the board. Pin-point removal and bounce do not solve the problem, although they can be used to fill in the gaps between Counters and Mass board controllers.
MUC does remain quite powerful (played correctly). You need to understand your role thoroughly. Mass Board control does offer very strong card advantage, often giving 1 to 3 or more. Some mass board controllers offer continual advantage (which make them extremely powerful), such as Back to Basics and Vedalken Shackles. For MUC to exist (and not become fish), it will need to rely upon mass board control. The most important aspect of board control is that it does what your counter-base can’t do for you while often acting as card advantage like FoF. The more you play MUC in such a fast environment, the more you will come to understand that the tempo of the format decreases the relevance of permission to the point that counters exist to supplement the mass board controllers, not the other way around.

The deck wins strictly on card advantage, and the principle must be continued for MUC to exist. At any point a blue deck doesn’t attempt to generate true card advantage, and simply disrupt, it is an aggro-tempo deck…Fish. When you build and play MUC for Legacy, it is from the standpoint that you are attempting to resolve and use a mass-board controller. Counters help you live long enough to do that.

In a fairly slow format you would go: Counter-control -> Stabilize -> Win condition

Legacy is closer to: Counter-control -> Board Control -> Stabilize -> Win Condition

Stabilizing is the point at which there are no relevant threats on the board or in the opponents hand and you have relevant card advantage. Of course, cantrips, card-drawing, permission, and even bounce will be used throughout the cycle. The important thing to note (yes, I sound redundant): The general aim of MUC has changed. The job of the Legacy MUC player is to get a board controller into play.
So, the short summary:

I find the early game cannot be won by MUC. As we cannot counter every single threat and solely use spell-based card advantage (FoF/TFK/AK/etc.), we have to base our card advantage, in part, on board control. Modern MUC is based upon the card advantage created by massive board control. MUC shouldn’t be trying to win the early game by countering every single threat and using pinpoint removal because it can’t. It really seeks to crop the most relevant early game cards from an opponent (buying time), and then drop a card-advantage producing board controller.

When I play MUC in Legacy, I realize I’m only going to be able to counter 1-2 of the most relevant threats in the first couple turns, and that I’m simply buying time to find the card that gives me actual card advantage while neutralizing board threats. Once I’ve neuatralized the board, I just build up card advantage through FoF and my artifacts, and then flood my opponent with my superior resources.

With that in mind, after extensive play, this is the artifact-bomb centric MUC I use:

1 Morphling
1 Meloku

2 Force Spike
4 ManaLeak
4 Counterspell
4 Force of Will

3 Vedalken Shackles
3 Nevinyrral’s Disk
3 Echoing Truth

3 Brainstorm
3 Impulse
4 Fact or Fiction

3 Quicksand
3 Stalking Stones
4 Polluted Delta
15 Island

I’ll explain my choices in order of functional relevance.

Board Control–

Vedalken Shackles: The MVP of the deck. If you play against a creature deck (with the exception of a reanimator concept), then Shackles is the goto card. It is without question the most potent tool in MUC. I’ve found running 3 to be a minimum, but also optimal number, including a decent cantrip/CA base. There is no substitute for this card. It is all too often so relevant that you might even call this a Vedalken Shackles deck. Despite what some of its critics might say, this card is not too slow for the format. MUC definitely has the tools to live to turns 3, 4, and beyond. With a solid island count (you cannot drop below 16 Island/Fetches) this card can not only begin trading cards immediately and stabilizing, but it also serves as a great win condition.

I will admit, it takes a great deal of practice to maximally use this card. Assuming you know the rulings about the card’s targeting/resolution, you will constantly need to think about what it can do to change the state of the board, and where you hope to end up with this card. Wonderfully, this card be very powerful in multiples, but I’d argue the 2nd (and especially the 3rd) has diminishing returns.

Nevinyrral’s Disk: The best board clearer in the game. My testing has pointed me again and again to this classic. Other board clearers either don’t match Nevi’s mana-efficiency or its card advantage and ability to clear ALL relevant board threats (with DSC as the exception). PK and EE are faster, yes, but they do not perform the function of a board clearer well enough. Use your counters and bounce to drop the Nevi’s disk, not your PK/EE to use your counters. This is strict board control and card advantage.

While initially you would think this conflicts with Shackles, it very rarely does. It will be obvious to you after much testing that both artifact bombs play different roles, and that you’ll be seeking one or the other. Additionally, we have bounce to save our artifacts. And, remember, you can always go: Disk’s ability on the stack, in response (or before you pass priority) Echo your Nevi’s. Yay…

Echoing Truth: Pound for pound, the best bounce available in Legacy. CoV, Repeal, and Boomerang are powerful as well, but unfortunately, they are not as good. CoV is excellent. It can save your own permanents, and it is very cheap. Unfortunately, it allows your opponent to bounce your relevant board controllers as well, and this is simply unacceptable. Boomerang is solid…hitting a land can be powerful. However, the double UU isn’t always available (no matter what turn it is). The ability to hit land simply isn’t worth the extra U requirement and the inability to hit multiples of the same name. Repeal is probably the next best option to echo. It is a fantastic card, but it can be fairly mana-intensive, which cannot be afforded for this function of the deck. Echo is a solid response to tokens and multiples obviously. It is nicely colored.

Bounce does give us some breathing room. Sometimes that tempo boost is what MUC needs. This card fills in a lot of gaps. At the worst, it is brainstormable and pitchable to FoW.

Other consideration: Back to Basics. B2B is a different form of board control, and it certainly acts like a time walk against decks that rely very heavily upon non-basics. In some metagames, it is ridiculously awesome…in others, it is lacking. If an opponent runs enough basics (and many decks do so to avoid Wasteland), then this card isn’t worth the slot or investment. This is a strong sideboard card.

Permission–No longer is it the primary control feature of the deck. It is the smoothing element that hits nearly everything in a format. These are timewalks. I find 12 is the bare minimum number of counters MUC can run, and 18 is really the maximum. These will last 4-6 counter slots should be based around your metagame.

Force of Will: No explanation required.

Counterspell: No explanation required.

Mana Leak: Mana Leak is strictly superior in the early game to Rune Snag (and probably any of the other available permission options). It is a hardcounter for several turns, and it fills in a permission gap. This is a minimum 2-of…I prefer to see 4 in my testing. Do remember: mana to permission efficiency DOES matter, and mana leak is fairly efficient. It does lose some of its late game, but I find it still useful even on turn 10 all too often.

Force Spike: The little counter that could. MUC still can have some early game counters left in it (the metagame isn’t Vintage fast). I prefer Force Spike to Daze simply because I can’t afford to miss a land drop, ever. It is brainstorm fodder and pitchable to FoW. You will still be surprised how many times you’ll use it even in the late game.

Other spells to consider: Delay, Remand, Misdirection, Logic knot (yeah, it can be fairly good), Daze. With the exception of Logic Knot, these counterspells are tempo spells. They are not true always strictly permission unfortunately. This deck needs true permission to eliminate threats. I find Daze would be most playable in general, but the land drop does matter. MisD can also be an fantastically good card against specific decks/cards, but unfortunately, it lacks versatility and all too often just sits in your hand.

Draw–MUC has access to both card quality and advantage spells, and obviously, it should use them. Ideally, you want to open a hand with a cantrip to guarentee land drops, and you want to mid-game Chain FoF/Cantrip.

Fact or Fiction: The best card advantage in Legacy. It gives you the choice along the spectrum of card quality and quantity. It has the ability to capitalize off opponent error and the use of the secret knowledge of your hand. This is a 4-of…no question. Chaining FoF’s together is exactly what MUC does in the mid-late game, and it is part of stabilizing.

Brainstorm: I hated bringing this down to 3. I believe if you run blue, you should be using this card. It is ridiculous, and I’m not even going to take the time to explain the comparative gains of seeing 3 cards. I’ll be honest though, I don’t like to brainstorm without a fetchland. Running 3 means that I’m more likely to have a fetch available. This could easily goto 4, but it would be at the cost of impulse, which is a guarenteed dig.

Impulse: This card is a brainstorm+fetchland in one. All too often you are just digging for your artifact-bomb. This card does it for you. This also bypasses CotV@1

The other consideration: Thirst for Knowledge. A powerful, powerful card with the right deck. Add 3-4 Seat of the Synod and CoTV, and I think it is a must run. My build tends to want to dig FOR the artifacts…pitching is not always best. Additionally, Seat does not work well with other disruption pieces (B2B, Nevi’s, EE@0, PK@0), and it can be wastelanded.

In any case, your mana-base and cantrip/draw engine are connected to each other.

Creatures–The more and more I play an artifact-centric MUC, the more I find that my creatures are not the best win conditions. Creatures, without question, are the oddest part of MUC. They are dissynergistic with board clearers, they are mana intensive, and they are generally not very powerful in blue. MUC’s win conditions are at their best when their are either free (or not casted during your mainphases, like Stalking Stones), part of the control game plan in the first place (shackles), or allow you to switch between and fill multiple roles.

I find three relevant creature spells that allow you to do the latter: Morphling, Meloku, Psychatog, and Rainbow Efreet.

The most important thing to remember is that your creatures exist primarily as a filler to your Shackles, not the other way around. The majority of games should be won on the back of your shackles, not your actual creature spells. Your creature spells should be filling the roles that shackles cannot.

For now, I don’t feel it is necessary to explain these creatures. It is obvious that they have fairly different functions and are better or worse against different decks. Shackles and Stalking stones do a lot for you, these creatures can be excellent at filling in the niche.

In addition, I will have to say that my testing has shown Ophidian not worth the slot. It is a great card in the right metagame, but it does not belong in a creature and removal heavy environment like Legacy. When it is active, it is easy to see where this card is just amazing (much like LoA). But, I ask you to look at the less obvious aspect of Phid: the times in which it is not actually better than other cards that could take its slot and the spells that could have been cast instead. To be oversimplistic: I look at it as a choice between Disk and Phid, and I’ll take Disk anyday.

Mana Base–Always important. Keep it heavy island (shackles), at or above 24 count, and not too heavily fetch based (you still need to drop lands even in mid and late game). In my mind, it is all about the utility of your extra land slots. The slots seem relatively obvious. I could easily see different MUC variations running Wasteland, Seat of the Synod, 6 fetches, 1-of Duals for splashes, and even Winding Canyons. My version keeps it fairly simple.

The card I don’t like: Chrome Mox. Not only is it terrible in multiples, dies to SO much hate (including your own board clearing), Chrome Mox is card disadvantage, so much of it that it can’t be supported by MUC’s gameplan. It does have synergy with TFK. It does give you 2-mana (bye bye Force Spike). I suggest that this could be a sideboard card in certain matches, but it is strictly awful in too many cases.

Cards I wanted to see maindeck, but instead went to sideboard:

Chalice of the Void: This is a hard card not to put in MUC. CotV at 0 and 1 are excellent (game-breaking perhaps against several decks). However, it needs a whole deck to be built around it mainboard. Brainstorm isn’t as good with it, and more importantly, Nevi’s Disk doesn’t interact well with it. CotV also takes up your all important 2-drop (@1), which can be fundamental to MUC’s success. It, unfortunately, is not a versatile card. Testing has shown it to be an amazing card against certain decks, and against others, I’d MUCh rather have a different card.

If I did run CoTV in MUC, then I’d use a mana-denial theme to create virtual card advantage by eliminating an opponent’s card relevance (uncastable is as good as useless). I’d use this deck:

1 Morphling
1 Meloku

4 ManaLeak
4 Counterspell
4 Force of Will

3 Vedalken Shackles
3 Powder keg
3 Echoing Truth

2 Back to Basics
4 CotV

4 Impulse
2 Thirst for Knowledge
4 Fact or Fiction

2 Quicksand
4 Wasteland
4 Polluted Delta
15 Island

Back to Basics: Wow. Such an amazing card. How unfortunate that so many decks can play through it. It even hurts MUC’s extra land slots. Depends on the metagame. Unlike CotV, this doesn’t need a deck built around it. It can easily go 2-3 in a deck, just make sure your mana-base does get owned by it. Again, this is just not synergistic with Disk. In the end, I find Disk to be too important to accept a mana-denial theme. All too often CoTV and B2B come down too late to be relevant, and I’ll need to clear the board anyways. Of course, B2B, if it isn’t Main, should be in the sideboard.

As for the sideboard, I’m not in a position to say how you should tailor yours…If not already maindeck, Tormod’s Crypt, LotV, Crucible, Boseiju, CoTV, B2B, Blasts, misD, and black or white splashes all seem viable in the right circumstances.

Conclusions:

Many people think MUC simply lacks good win conditions. This shows a fundamental misunderstanding of what MUC is doing. It isn’t about jumping the gap from stabilization to win condition, it is about getting to stabiliziation in the first place. You might say that MUC only has a temporary amount of stabilized turns, and that is why you want to be able to so effectively switch roles. If this is the case, I advocate Psychatog. However, I really question whether you stabilized in the first place if the stabilization is really that temporary.

MUC in Legacy, unfortunately, cannot act like a mana drain powered BBS. MUC must control the game entirely, whether it is through mana-denial/CoTV or board control. My testing has shown the latter to be more effective.

The Deck is certainly skill intensive. I don’t know of another deck that needs to think so thoroughly through the implications of both decks at the table to make decisions in the early game. It is, unfortunately, one of those decks with a high enough skill minimum (like solidarity) that it is often passed off as unviable simply because a great number of people cannot play the deck correctly.

The lovely aspect of MUC is that it can compete against nearly everything (given a skilled player). It has tools that are fairly versatile and a gameplan thatmolds around the opponent’s deck. While control decks are definitionally metagame dependant decks, as they seek be to be interactive (in virtue of a more reactive strategy), MUC has more potential to be a more universal control deck than any other control deck I’ve used. It can interact with nearly any deck, and it keeps a generally high level of card quality and advantage against most any archetype. Having relevant and higher card quality and advantage is exactly what wins games, and I’ve found MUC to be plenty viable against the current environment.
Affinity (Raffinity/Vial Affinity)

Affinity is an artifact-based aggro-combo deck. It uses fairly powerful tempo enhancing effects such as the affinity mechanic (the namesake), modular, and highly synergistic artifacts/spells to apply a great deal of early game pressure. The aggro element is powerful and versatile; it has so many combat tricks that the deck often appears to act as a combo deck in the last few turns as it can often bypass many control features presented by an opponent (removal, blocking, unmanageable disciple life loss, etc.). Some might say that affinity breaks several of the general principles of magic as it possesses the ability: to play multiple extremely undercosted spells, to dodge pin-point control too effectively, and to put more permanents in play within the first 3 turns than a normal deck should.

The pivotal strength (and what some may eventually find to be a weakness as this deck is limited in evolution) of affinity is the raw synergy and tempo that exists in the deck. Affinity rarely draws hands that it doesn’t want to keep, and nearly every card you draw in the deck will have a positive interaction with other cards in the deck. Generally, everything in the deck is relevant to your current board position, and cards often have a multiplicative effect beyond their initial perceived relevance and power (artifact + disciple + ravager + modular + affinity factor + etc.). Essentially, the whole is much greater than the sum of the parts. When played correctly, the high average card relevance, synergy, and well-abused tempo mechanics gives affinity resilience and speed that is rarely matched by other aggro decks.

This strength, however, can act as a weakness. There is a common misconception about the deck and how affinity can evolve in a format. Many people fail to realize the problem with a deck that requires every single piece in the deck to maintain synergy. The problem with affinity is that it is very difficult to change the deck without impacting the synergy of the deck itself. So, for example, to add 4x Cloud of Faeries and 4x Somber Hoverguard, while subtracting other relevant artifacts, acts as a barrier not only to a proper mana base (and the abuse of it), but it waters the deck down, eliminating the very strength of its synergy. If you cut artifacts for non-artifacts, you decrease your average card relevance in terms of the average progression of your gameplan itself (aggro-combo). Even cutting certain artifacts for others can demonstrate a decrease in synergy. Affinity exists in virtue of its synergy. Watering the deck down only prevents affinity from doing what it does best. This means that Affinity has very limited sideboard options and few evolutions available. Admittedly, this misconception is fairly widespread because it is difficult to see the web of synergy interactions that each card helps to compose.

Taking into consideration this synergy issue, affinity will fail to evolve away from a very specific type of aggro-combo. For example, affinity, unfortunately, cannot be properly built as an aggro-control deck. To add control components is to weaken its architecture as an aggro-combo deck. Even further, removing an aggro card for a control card is more than just a 1 for 1 substitution in affinity. There is more than a 1 for 1 proportional change in functional effectiveness when switching from aggro to control. The change forms a much larger loss in the aggro-combo functionality of the deck than merely 1 card (as synergy multiplies an aggro card’s relevance), while there only remains 1 control card to be gained. Some may argue that the disproportionate loss is worth it. All I can say is: you have misassigned your role as the affinity player.

To the dismay of some, this two-edged synergy means that Affinity will never be an aggro-control deck, it only has one direction to continue evolving: aggro. Now, surely, some might point me towards some AfFoWnity decks and the like, but that doesn’t mean these decks are optimal, nor as good as straight Aggro affinity.

You lose a lot more than you gain by choosing to use non-aggro cards in affinity. But, it isn’t just using aggressive cards, affinity requires a very specific type of aggro card. So, while Jitte may be a fantastically aggressive card to use (and versatile), Jitte is such a tempo sucking whore that the deck cannot afford to use it.

Affinity should continue to specialize and develop as an aggro deck if it wishes to further its competitive advantage. Developing and modifying affinity requires a great deal of justification. It isn’t as simple as, “the metagame would suggest we use X” to take care of Y. Adding and subtracting cards from affinity is innately more difficult and complex to do correctly. The opportunity cost of running one card and not another is difficult to measure in this deck. Now, that doesn’t mean there aren’t innovations to be had, but with a deck that revolves around so much synergy, the proponents of the status quo are fairly justified in denying the vast majority of “innovations and tech” that people prescribe. Just remember, it all adds up. All too often, modifications actually decrease the effectiveness of the basic shell of vial affinity.

Affinity is at a disadvantage in terms of how it can evolve. The deck structure is extremely rigid, and, unfortunately, that prevents affinity from becoming much better than what we already have. Throwing Phyrexian Dreadnought and Stifles, Fling, etc. into this deck does not make it better than what it once was, and admittedly, that is difficult for many to see. Innovations will be small for this deck. It is a deck to fine tune, not revolutionize.

As some will not fully recognize there are diminishing returns and limits to substitutions in this deck, I will clarify a fairly universal principle for those individuals who wish to innovate and evolve affinity: There is a difference between a deck that can win a game and an optimal deck. Most every build posted can win a game or two, but some builds will win more than others. Optimal builds will have the best chance of winning (not just ’some chance’). Winning some is not the same as winning the most possible, but many fail to see this fact. This makes it difficult for many people to see why their tech is suboptimal or flat out sucks. They still win games in spite of their tech, not in virtue of their tech.

Assuming that affinity is built and played correctly, this once dominating force is really hindered by only two things in Legacy: 1.) Combo, and 2.) Amazing hate available. Each of these contributes to affinity becoming strictly a metagame deck. A metagame deck is one that can never be tier 1, but given the right metagame is very viable.

Affinity does suffer from the classic aggro problem of not being able to disrupt or race Combo effectively enough. Affinity does not defeat well-played and well-built combo decks in Legacy. You can run CoTV, FoW, SoR, and Therapy, and you’ll still get owned by a competent combo player. Watering your deck’s strategy down puts you turns and turns behind on the board (on average), while your disruption simply delays the inevitable. Even if affinity can curb the losses in the combo department, it will usually require major sacrifices against other archetypes, negating the reason to play affinity at all. In environments flourishing with combo, you probably shouldn’t be playing this deck.

The other reason why Affinity could never be Tier 1 in Legacy is due to the amount of hate available — affinity simply can’t live through it. For example, Energy Flux, Shattering Spree, and Pernicious Deeds are just a few exceptionally deadly tools against Affinity. Combined with several other cards, sideboards prepared for affinity would impose insurmountable barriers.

Affinity, at best, is a metagame deck. You choose to play the deck because you know your opponents are not packing enough hate and that they can’t outrace you with combo. However, with that said, if the metagame does not anticipate the deck (and it currently doesn’t in many areas), it can be a very powerful ‘rogue’ deck. Affinity is a deck that is underestimated by many, and in part, this is why the metagame would allow for affinity to be a viable competitor. Affinity can play like a tier 1 deck, it simply can’t afford to play in a metagame that anticipates it.

As a metagame deck, affinity can be tailored somewhat. For example, in many cases Atog is brokenly good, and in other matchups it can be terrible. This goes for a few cards. Keeping in mind that the deck should be slightly tailored (even if it can never be revolutionized), here is the basic vial affinity shell:

Basic Vial Affinity Shell

24 Creatures
4x Disciple of the Vault
4x Arcbound Worker
4x Arcbound Ravager
4x Frogmite
4x Myr Enforcer
4x Ornithopter

18 Spells
4x Aether Vial
4x Thoughtcast
4x Cranial Plating
3x Shrapnel Blast
3x Chromatic Star

18 Land
4x Seat of the Synod
4x Vault of Whispers
4x Great Furnace
3x Blinkmoth Nexus
3x Glimmervoid

In a vacuum, you’d want to start with the above shell. Darksteel Citadel and Atog are also very viable components of a basic shell, but their inclusion may require more justification. Again, given a specific metagame, adjustments should be made. Cards outside the card pool I’ve mentioned have yet to be properly justified.

The basic gameplan is to drop your hand in 3 turns, laying down the beats. Use your non-creature spells wisely to force a dominant position. Usually the game is won by an unblocked creature with either modular’ed counters on it or cranial plating, the use of the Disciple/Ravager combo, and often Shrapnel to seal the deal.

Card explanations from the Basic Shell:

Disciple of the Vault—I still can’t believe this card costs 1cc. 1 for 1/1 is fair. His ability is brokenly good. His obvious synergy with Arcbound Ravager (and Shrapnel) can turn his 1 mana cost into massive amounts of damage. I am not surprised to see his 1 mana cost turn into my opponent’s 10 life loss. This card is excellent in multiples.

Opponents often forget about disciple both in the deck/hand and in play. This gives you an excellent information advantage that will often surprise the opponent as they didn’t properly anticipate the effects of Disciple. Generally, it is best to hold back on playing Disciple until mid to late game if possible. While he is a lackluster 1st turn play, his late game vial-into-play can flat out win games on the stack. Top-decking this card can turn losing-board positions into winning ones.

Additionally, mass board sweepers can become deadly with disciple on the board, and it often forces control players into pin-point removal before they can sweep the board.

Arcbound Worker—A truly underestimated card. This is a high synergy card. He enables combos, enables affinity, and greatly assists ravager-based board positions. His power level is much closer to Aether vial (the other amazing 1cc) in this deck than most would think.

At 1 for 1/1 on the table he is fair. But, his artifactness and modularity allow him to do some extraordinary things for his cheap casting cost, making this card much better than 1 for 1/1. The death of Arcbound worker is not the death of 1/1 on the table (as long as you control another artifact creature). Not only can you get disciple triggers, but the modular ability allows your 1 mana spent to continue being damage on the board. To assume his removal or sacrifice is to assume that you spent 1 mana for 2 consecutive 1/1’s with multiple synergies in between.

For example, it is common for him to be sacrificed, and for the saccer to gain the advantage of the +1/+1 counter (Ravager) or 5 damage (Shrapnel), while the Worker’s modular can enhance another creature.

Arcbound is definitely a combat tricks creature with excellent synergy.

Arcbound Ravager—A card I feel has been overhyped at the perceptual expense of the other components of affinity (don’t get me wrong, I know this card inside and out, and I love it). Ravager is good, in part, because of the rest of the deck. With that said, this card more than pulls his own weight; he is arguably the core of the deck (although, the artifact lands would be a runner-up). He is much like Psychatog, only he is an artifact-board-based tog. He converts permanents into resources that are transferable (often unblocked) damage while abusing Disciple of the vault. Ravager channels your board position into damage based tempo. Assuming you don’t need your permanents after you’ve won, ravager make the most of your board by efficiently sacrificing into stronger board positions than any normal deck has the right to boast. The card should have cost 4-5 mana for what it does.

The stack tricks with this card can be as basic as sacking to live through a bolt, to sacking out for disciple triggers and putting modular on an unblocked creature, or even much more complex tricks on the stack. He gives the deck versatility. Ravager allows you to overcome a great deal of control elements in the game, negating the effectiveness of removal and blocking, while simultaneously creating a huge threat on the board. I would compare this card to Morphling (a card which I know well in MUC) in terms of its utility and power-levels.

Frogmite—Bread’n’Butter. You never play this for 4. Usually he drops for free, but once in a while you’ll pay the 1 or 2 to put him into play. 0-2 payed cost for a 2/2 Artifact creature with a very high actual CC is excellent (CC-based removal have difficulty with him). Frogmite is to your 2nd turn as what Arcbound Worker is to your 1st turn. This is a solid play, and it is part of bricks and mortar that binds this deck together in synergy.

Myr Enforcer—He is a fattie in Legacy and an aggro-control slayer. He is a clock, and he becomes castable generally on 3rd turn. He is a threat that the opponent cannot ignore. Myr Enforcer is to the 3rd turn as what Frogmite is to the 2nd turn. Enforcer comes into play earlier than a 4/4 creature should, and this is exactly the sort of tempo advantage that an aggro deck seeks.

I am amazed at the number of people that opt not to run him. He is an awesome drop 3rd turn or 10th turn, and multiples are certainly a good thing. When you find yourself in board positions that do not seek to sac out to ravager, Enforcer is the largest and often most relevant creature on the board. Enforcer can be seen as a stabilizing aggro card in this deck, allowing affinity to reach critical mass.

Enforcer does require a high artifact count in play, but this doesn’t make him not worth running. Just look at the efficiency of this card:

7 artifacts- 0cc for 4/4 artifact creature
6 artifacts- 1cc for 4/4 artifact creature
5 artifacts- 2cc for 4/4 artifact creature
4 artifacts- 3cc for 4/4 artifact creature
3 artifacts- unplayable.

At any point you would cast this card, he is mana-efficient. A turn 2, 3, or 4 enforcer will often win games. Think of Enforcer as being similar to Arrogant Wurm in UG madness, only better.

Ornithopter—Sometimes an underestimated card. 0/2 for free not only gives you early game artifact-factor, but it gives you something even more important: evasion. Ornithopter is damage over the top, and affinity desperately needs good ways to maximally abuse modular and cranial plating. This creature will win you countless games that non-evasion non-artifact creatures could not.

Aether Vial—Probably one of the strongest 1cc cards in all of Legacy, and affinity can abuse this card better than most. I’d call this the best 1st turn play in affinity. Paradise mantle is a joke compared to this card. Aether vial is a true tempo card (as demonstrated in several decks), it offers:

Uncounterable creatures
Mana Color Smoothing (no black/red mana available? Vial doesn’t care)
Mana Acceleration (each use beyond the first is all gravy)
Playing Creatures as instants (most importantly Disciple/Ravager tricks)
It is an artifact…and a first turn play at that.
Remains relevant from start to finish.

Thoughtcast—Card advantage, straight up 2 for 1, usually for 1 mana. This is 2/3’s of an Ancestral recall at sorcery speed. It remains in the top 3 card drawers in Legacy (at its affinity-based cost) as it doubles the efficiency of the 1 mana for 1 card draw ratio. While this isn’t a cantrip, primarily because it is played after turn 1 (usually around turn 3), it is extremely undercosted card advantage. Several people do not advocate the card, and I cannot stress enough: learn to trust your card advantage. Too many people don’t see the relevance of drawing in affinity.

It is easy to see where you don’t like Thoughtcast. The color and affinity factor are definitely constraints on its playability. And, you may even say, why waste the slot when I would rather have a threat in my hand than a thoughtcast? The difference is that Thoughtcast allows you to run only the most relevant threats, increasing your average card relevance like a cantrip, while also giving you a much stronger mid-late game because of card advantage. It is both card quality and card advantage. Thoughtcast is very similar to Ringleader in Goblins.

Card advantage is not mere card advantage in affinity either. Card advantage in affinity often translates into immediate tempo advantage as well. While other decks might be tapping out or expending very important resources to even draw cards, affinity can pay one mana, and in most cases will still have resources left to play what it drew. For example, drawing an enforcer and a land off a thoughtcast and playing them that turn has immediate effects. Most other decks will not experience tempo advantage in the same turn that they gained true card advantage. Affinity gets the best of both worlds with Thoughtcast.

This card is so powerful that it alone makes blue the most relevant color to have on the table in affinity (although black comes in a close second). If I drop a first turn land (assuming I might lose it), and if I have a choice, it will never be a blue producer. Resolving thoughtcast is that important.

Cranial Plating—The “other ravager”. While it can be mana intensive, this card wins games. Like the ravager, it turns each artifact on the table into 1 damage. Unlike the ravager, you don’t have to lose your permanents to reap the benefits. This card is so central to the aggro theme that it is an auto-4-of.

Cranial plays a similar role to Atog in that the equipped creature is a definite threat, one that often functions as a bluff-card or forces your opponent into less preferred positions. You will often equip your weakest creature (Arcbound Worker/Ornithotper), forcing your opponent to pin-point control the least of your creatures, while other cards like Frogmite and Enforcer swing through. And, like Atog, a single connect from an equipped creature might be the end of your opponent.

Additionally, cranial can play as a defensive card, making your blocker of choice lethal. This is a versatile card.

The instant equip is often overlooked by an opponent. It can switch to unblocked creatures before damage is on the stack, and that gives you an upperhand. Double black can be difficult to come by, however, Chromatic Star and Glimmervoid greatly aid you in reaching this color requirement.

Shrapnel Blast—Good affinity players know that this is not card disadvantage in a relevant sense. It is mana-efficient, niche-filling, and extremely aggressive. Generally, this card is used as a late-game finisher, but it performs finely as removal (taking out damn near anything).

To understand this card better, let us look at the mana and efficiency:

1R + Permanent= 5 damage

You spend two cards to get that effect. That is equivalent to something like adding these two together:

Lightning Bolt for 3 (R + Card cost of Shrapnel itself)
1 + Permanent for 2

Lightning Bolt is already good. But let us evaluate the last factor.

1 + Permanent for 2 could be compared to Shock. You spend 1 card and 1 mana and you get 2 damage. The difference is that this is colorless mana (and that is very relevant to a deck that can barely manage double color). Otherwise, it would look like RR for Shrapnel. A colorless shock is already very good. But, I think this card is even better.

When you use shrapnel you will generally choose the least relevant artifact on the board. How much is that artifact worth to you? That 5th land might be a dead card to you, right? That creature that is taking lethal damage on the stack might be irrelevant to you, right? The 3rd Aether vial could be useless. When you choose to sacrifice irrelevant cards, you are technically not even spending a full card. Or, the better way to phrase it would be: shrapnel’s colorless cost effect increases the relevance of the least useful artifact you control to become as good as a colorless shock. This is very, very good. It increases your overall deck’s average card relevance.

Beyond the general increase to card relevance and super mana efficiency, Shrapnel is to be seen as a true finishing card. 5 damage on the stack is 1/4th of an opponent’s starting life total. This card forces through lethal damage. Often, sandbagging a Shrapnel blast or two can be very powerful. An opponent will often underestimate the value of the cards in your hands, and will misplay without realizing you hold a lethal set of damage in hand.

Chromatic Star—1cc artifact factor with mana smoothing and triggered card draw (definitely an upgrade to sphere, except against leyline) is excellent. The ability to use it as artifact-factor and sac it later without activating for draw makes it a 1 colorless for 1 card (which is excellent). Add in the ability to smooth the mana curve, and you have a very powerful artifact. It can do some tricks, including announce thoughtcast->sac for blue, and even blind digging for the spell you need. Like thoughtcast, this is a relatively efficient card drawer that fills in the niches. Glimmervoids and Chromatic Stars are aiming to do the same thing in the end (although, they have different secondary characteristics), and star is a solid choice. In affinity decks with lower colored spell counts, this is a stronger card than glimmervoid, and the opposite for affinity decks with higher colored spell counts (12+).

This card shines against things like Blood moon and LD. I also love having another 1cc artifact to play first turn. But, do not be deceived: this card is not another land. It functions as a resource transforming device and artifact factor exclusively. Running 16 lands and 4 stars is suboptimal. Affinity decks should be running both Star and Glimmervoid.

Land– The landbase is often misunderstood. The artifact lands in particular are fundamental to the deck’s construction. You can run no less than 12 artifact-type lands (preferably 15-16 including man-lands).

What is an artifact land to Affinity?

-1CC of up to 12 cards or a -0.2 shift in the average CC of the deck (this is tempo)
+1/+1 Counter
1-4 Disciple Triggers
1-4 +1/+0 Cranial Plating
A very strong late-game target for the additional cost of Shrapnel blast.

People who play affinity with the mindset of running the fewest possible lands with the most spells possible are missing the point. The artifact lands might be subtle, but they are extremely powerful in this deck. So, while you can certainly win games with only 1 or 2 land in play, you will often fail to recognize what those 1-2 lands really did for you during the game. The best part about land in this deck is that land is never a dead draw. Land can always be put to use beyond mana production. This means that affinity, just in virtue of its land, has a higher average card relevance than would be initially expected. Don’t be afraid to run 19-20 lands in this deck.

Seat of the Synod, Vault of Whispers, Great Furnace—These are the holy trinity of affinity. They make the deck work. Darksteel Citadel and activated-artifact lands (Blinkmoth Nexus) are also useful in this calculation, but only the trinity is a guaranteed in every affinity deck.

Blinkmoth Nexus—An underused card. I can’t see an affinity deck playing less than 2 of these. Like ornithopter, nexus offers us important evasion. The activated abilities offer several combat tricks as well. It is important to note that Nexus is actually fairly difficult to remove, can keep counters on it even after losing its manhood end step, and was free to play (costs only a land drop). Additionally, nexus can be activated to increase artifact-factor.

Glimmervoid—Like the nexus, an underused card in affinity. Affinity, problematically, can be color-starved. While Aether Vial curbs the mana color inconsistencies to some degree, affinity is still reliant upon other chromatic mana producers.

You don’t want to be sitting on Disciple, Atog, Shrapnel, Thoughtcast, and instant equip Cranials because you don’t have the color available. In fact, without a proper mana-base to produce the rainbow, you actually decrease average card relevance in this deck. It is absolutely essential that affinity has the ability to use every single component of its hand as soon as possible.

The arguments against Glimmervoid would be that it has a condition to keep in play, it isn’t an artifact, and wasteland eats it. However, even with these negatives, the need to smooth your mana color curve is so great that Glimmervoid is still a worthy pick.

Glimmervoid smoothes your mana color curve very effectively and it can be used several times (unlike Chromatic Star). 1/5th of your deck is going to be colored spells, and you can’t count on having a Chromatic Star everytime you need one, but you can almost always guarantee that you’ll have an artifact in play. Additionally, it costs almost nothing to put Glimmervoid into play, unlike the star, and that means you can be using that mana to cast game winning spells. This is a minimum 2 in affinity, and 3 if you run something like Naturalize in the side.

The other staples:

These remain somewhat interchangeable with other components of the basic shell.

Darksteel Citadel—Depending on the metagame, this can be a solid choice. In a vacuum, this card is subpar. It would definitely be quite possible to see 3 of these in affinity given the right metagame.

Atog—The other, other ravager. +2/+2 per artifact makes him the fastest clock available, but at a huge risk. Often times, this card is a bluff card. People are forced to block him, while your other creatures do the business. Atog becomes better and better against decks with less and less creature removal. Because of the ability to use instant removal in response to pumping, the more removal in the game, the weaker this cards becomes. It is a severe let-down to sac out 3rd or 4th turn for a lethal atog, only to eat a bounce or StP before damage goes on the stack. You need to be very careful how you use this card, and you should be careful in what metagame you run him. If you don’t mainboard him, he is definitely a strong sideboard choice. 3 is the max in this deck.

Other Card Considerations:

Fling vs. Shrapnel—Fling is an interesting card. While shrapnel blast converts your least relevant artifact on the board to deal 5 damage, Fling has the problem often doing the opposite, and usually sacrifices one of your more relevant artifacts on the board. Fling can function like ravager/disciple at the end of the game, acting as another disciple. In so many cases, Fling is forcing you to lose your aggro-advantage on the board, and is thus strictly a finishing card. Shrapnel is much more versatile.

In my experience, flingm like Berserk, has been a win-more card rather than a card that will win you games you normally wouldn’t win. Usually, when I am in positions in which I have flingable creatures, where fling is going to be much larger than shrapnel as well, I’m already winning, and I would possibly be put in a losing position to even use the card. Shrapnel can be used in much different situations and its costs are much, much lower.

This is a fun card, but it is very suboptimal.

Dark Confidant—definitely a favorite of mine, but not in affinity. The card may be overhyped to some extent, not because it isn’t amazing, but more because it requires the right deck to work. Building a deck that abuses this card correctly is difficult. Dark confidant is really not a win-now type card, it does best in a deck that can abuse a one-sided howling mine. Affinity, which is a win-now deck (aggro-combo), is not a deck that should be running Bob. Affinity does not want the game to last long enough to make a real use of this card. Confidant, in my mind, has competed with 3 different slots in this deck: Myr Enforcer, Thoughtcast, and the possible Atog.

Beyond the lifeloss from a technically high CC curve, the fundament problem with Dark Confidant is a.) he is subject to removal and b.) he takes up the fundamental turn 2 (2 mana) slot. Affinity wants to be dropping its major aggro pieces turns 1, 2, and 3, not confidant. Confidants not kept in check can certainly give affinity a better late game, however, removal is a major aspect of the metagame, and affinity could have been using that mana to have just won now instead of later.

As much as I value card advantage, confidant is a liability and usually a loss in tempo for all too often minimal card advantage. Confidant’s advantage requires 2 turns. It will be, bare minimum, turn 4 before you netted card advantage. Compare this to Thoughtcast which can play for 1 mana on turn 3 (possible turn 2). Thoughtcast refills your hand when you need to refill and keep steamrolling (as you’ll have 1 more mana to work with, which is a major concern in the first 4 turns).

Myr Enforcer is a pure aggro card that comes down nearly the same turn confidant does on average (considering the color cost). 2/3-4/4 PT difference (depending on whether confidant can even swing or whether control would knock it out) on the board at any point in the game makes enforcer a stronger choice. Again, this is an aggro deck that should be forming aggressive board positions. Affinity is an instant gratification deck, and it cannot afford to let the opponent live even a few more turns.

Confidant may also compete with atog for slots. Atog, like enforcer, fills the role of creating an immediate board threat. Deal with it or die. Confidant cannot do this.

Somber/Cloud of Faeires—Non-artifact creatures that cost mana to get into play (even cloud requires it, so you can’t always just drop it off a thoughtcast). Thopter and Nexus are free, and they are artifact. No questions here.

Paradise Mantle—What about this card is aggressive? Oh well, a free artifact is nice. You have limited slots, and Glimmervoid and Star fulfill this role much better.

Umezawa’s Jitte— Affinity has much better things to do with its mana, and the deck should be winning before Jitte becomes relevant enough to matter.

Chrome Mox—Bleh. I love fast mana and free artifacts. You’d initially think this is a shoe in for affinity. Play a few hundred games with and without this card, and you’ll see why affinity shouldn’t run it. The 1st turn tempo gain is not worth the 2nd turn (and beyond) tempo losses incurred by both card disadvantage and poor topdecks. Remember: Card advantage in this deck translates into immediate tempo advantage in most cases. Card disadvantage is essentially tempo disadvantage for this deck, and Chrome mox has a snowball effect in the losses it creates.

Essentially, affinity plays very well with very little mana. I’d argue that it is the least mana intensive deck in the format. It can accept mana losses rivaled only by Goblins. Tempo–using cards in your hand before you intially should be able to use them. If it cost 5 mana to cast something, and you cast it with only 4 land or less (or even no mana used), then you used some form of tempo-enhancement to play that spell—affinity does this sort of thing all the time. Resource trades (CA for Mana) aren’t necessary for affinity to maintain a high tempo. You don’t need tMox or Petal to accelerate your way into massive early threats, the mechanics of the deck allows you to do this already

As for sideboarding, I’m not in a position to say what each persons metagame looks like. Please consider the following:

CotV
Therapy
Engineered Plague
Tormod’s Crypt
Pithing Needle
Winter Orb
Sphere of Resistance
Atog
Mana Leak
Naturalize/Disenchant

Affinity is an odd deck. Half the magic players I know hate the deck (they remember its domination in T2). Why? Not only does it do unfair things (and it still can), but it appears that affinity can win without skill. For those who still believe this, you are correct if you are referring to how good this deck was back when it was T2 Legal. When it was originally created, a newbie or a pro could pick the deck up and destroy half the field with it. Legacy, however, is different.

The deck can be complicated to play, and the correct line of play is not as obvious as it would seem. Affinity is constantly evaluating the board position, its manabase, and card quality like a combo deck. However, instead of doing everything in one turn like many combo decks, affinity is forced to think over several turns. Good players do think several turns ahead, and combo decks, by nature, are constantly thinking: what card do I need to complete the hand to win? Affinity, however, often requires even more thought than that. Due to the decks power and versatility, there is a larger quantity of hand and board positions to be evaluated as it works over several turns. Affinity has to consider less redundant hands and board positions more often than most other decks I’ve seen in Legacy, and it is here that the pro is separated from the less experienced. When you run into new situations, being able to calculate what is best (rather than working from wrote memory) is invaluable, and affinity will often require such experience and skill. So, while you can definitely win with affinity without a great deal of skill, there are many, many circumstances in which a good deal of skill and experience is required to calculate the correct line of play. For affinity to be competitive in Legacy, it does need to be piloted a fairly skilled player.

Overall, a skilled player can feel comfortable playing this deck against any deck in the format with the exception of combo. In what is largely a creature based format, affinity is explosive, powerful, and yet versatile enough to have a way to win if you can find it.
I haven’t written anything of consequence in a while. I decided I’d make myself useful and write an update. Let’s see…/activate stream of cons…Oh wait, err../activate poorly organized non-transition-based chaotic writing created by the postmoderns…GO! Zerg! Go!

The pregnancy is a bit rougher this time. k0sh3k has been sick 24/7, but (luckily) she has not thrown-up too much. Everyone says that this is a sign/omen that we are having a boy. I don’t know. I do know that k0sh3k’s migraines have subsided for now, and this is an answer to prayer (perhaps indirectly–again, I don’t know). Additional ailments include (watch my SP?) varicose veins, a hyperextended knee (or feeling thereof), a larger set of pains due to her ligaments stretching more rapidly, spotting, heightened sensitivity (and she is even more ticklish), soreness (weight translated from one spot to another on her body, makes the back carry weight differently), lowered bladder and stomach volume (eat/go more often).

As a sidenote, the heightened sensitivity seems like something that is a human adaptation, giving mothers more information to help keep them out of danger. But, it can be overwhelming for her.

Of course, many of these are to be expected. Some of them are exhibited more intensely during this pregnancy than the last. The doctors will always say “every pregnancy is different”. And, I certainly want to be reasonable and stay away from superstition. But, I must admit, this pregnancy has been much harder on k0sh3k. I do my best to help make sure she is comfortable.

We know it will be worth it.

Additionally, we find out the gender in a few weeks (another Ultrasound, woot!). If it is a boy, then we will name him 1uxb0x M. If it is a girl, then we will name her either a.) Elia Mariah-Abigail (perhaps not hyphenated), or b.) Mariah Elia-Abigail (ditto). 1uxb0x was easy to choose (we chose it a long time ago), but the girl’s name has been a struggle. I’ll admit it is very difficult to match the oomph and dignity of j3d1h S. In any case, if it is a daughter, her name will mean: My father rejoices in a sea of bitterness because my God is Yahweh. That name owns. It reminds me that my children don’t belong to me–and that sucks. How could I possibly want my kids to live in the agony of being a true Chosen Christian? Argghh. I mean, we know we should raise them to sacrifice themselves–but why should I sacrifice my children. Blast you Abraham!@!! This is your fault. I officially am (Infinite-Splitatives ftw) angry at that man (even if *is* awesome).

Which reminds me, why do people always go for Moses and David in the OT? Abraham and Elijah were the bomb. David and St. Peter are similar characters. They are retarded, but God loves them anyway (something we all aspire to achieve). There is a natural literary Charisma in which those characters pop off the page, and people want to be them. Moses and David screwed up too much to be admired. We recognize we are closer in character to Moses and David, but we wish we were closer in character to Eli and Abram. Yeah, Hardcore–like JB (John “teh” Baptist). In the end, Eli and Abram are better and even cooler Biblical character.

Speaking of temperature, it is breaking 100 degrees out here. I’m frying. I’m not going to like that aspect of Thailand. The heat was good in a suit…for my (drum roll please) interview. It was a 2-hour interview for the position of “Strategic Communication Quality Analyst”. I doubt I got the job, but it would be awesome if I did.

We’ve been applying for jobs like crazy. I want out of this one. We need enough money to actually get to Thailand (the logistics of this sort of thing are fairly complex and expensive). For now, to use my dad’s phrase, we are “spinning our wheels” and getting nowhere. It is unfortunate that we are forced into a position in which k0sh3k will have to get a job and j3d1h will goto daycare in order for us to get to Thailand. But, we believe that it will be worth it in the end. It isn’t like we have it bad at all. My parents have given so generous to us that it has afforded us the ability to raise our child in a better fashion than others. I kinda envy my kids (only kinda–I know better than that…who would want ME to be their dad?)…going off to a foreign land, having the best education possible (homeschooling), doing stuff that people only dream of doing, and hell…doing what The Master (henceforth, I will [attempt to] refrain from using the archaic and misunderstood term: “Lord” and just call it what it is: Absolute Master) requires.

This reminds me (/rant on)…our church is insane. How do we get away with not looking at God as Master? These people want (oh. my. gosh. …it is so true) Dogma’s Buddy Jesus. This kind, nice…egalitarian guy who will allow us to justify our actions in a sea of relativism. Yes–we call this Blasphemy. Blatant Blasphemy! Here, let me break God down for you:

1.) Master of the Universe (of all Existence)
2.) ….Did you read 1.)????? What other adjectives and titles do you need to put the proper amount of fear in your mind?

Good grief.

Teacher:Student::Master:???? Take a guess what else exists if a master exists?

Slaves

Isn’t obvious that we are called to be slaves? How do we not get this? Oh, I know…slave sounds too…overpowering and overwhelming. It would be like we don’t have a right to choose our own destiny. There is no gray area. There is no middle ground. You can’t be free and be a slave at the same time. You are all in or all out. Don’t let the relativists fool you. To be a Christian is to be a slave.

We are slaves to the pursuit of that which is most valuable–We are slaves to God. Accept it. The moment you ask for your freedom back is the moment you have overstepped the bounds, you have sinned against God. You are only temporarily given the right to yourself…only so that you can give it back. The only thing I want to hear out of our mouths is: “Here I am, Master”.

(How ironic that “I am” would be used. “Here” makes us small though. Fair enough.)

But, no–Half-breed Christians have chosen to hide the truth. They blaspheme and corrupt. They teach that there is a gray area. They teach that you should pursue happiness and comfort. They teach equality and “human rights”. They teach meaningless secularized ideas that have twisted the remnants of forgotten commandments and fundamental principles of Slavery to God. Self-ownership and free will are illusions to the virtuous Christian. Yes, we have it as a gift and a miracle. But, these are mercy gifts–UNDUE gifts. The recognition of the gift requires that we give such a thing back to God. We are borrowers, caretakers, and stewards of such a gift–but we are not heirs and rightful owners. Half-breeds Christians cannot accept this fact. Their twisted theology is arrogant, self-seeking, and the end to the only correct belief-system which once existed. We are given the gift of Freedom and self-ownership only so that we may recognize that it is undue and USE this gift to give it back to God as a sacrifice. The Imago Dei is the greatest of the spiritual gifts and the second greatest is the forgiveness for our misuse of the former.

God has given us the Image, an undue gift. The gift is extraordinary. It is that which separates us from all other things in the universe. The gift obviously includes the ability to recognize it and the ability to give it back. That is our duty, and it is the greatest thing we can do. As God is the highest pursuit, as the Master TRULY is the most valuable thing to pursue, we receive the duty to volunteer ourselves back into slavery.

I think it is funny that we have been conditioned to use mild, inoffensive, and minimalist language in regards to something that is SO important. Service/Servant. Ha. Slaves and Slavery are the only mindset. All others are false. These people will die as blasphemers.

I amazed by the people who are blind to the true struggle. How could they miss this? If you don’t have something slave-worthy and death-worthy to pursue, then why do you even have a life at all?

The virtuous person will not live a fun or pleasant life. Fun and pleasure are not ‘the good’. While the virtuous person will live ‘the good life’, we must redefine our thoughts as to what ‘the good life’ means.

I tell you what, do an exercise for me. I dare you to write down the top 5 most Virtuous people in history. Seriously, Do it. What about these people are virtuous? Now, look at the lives of these people. Were they happy people? Did they live a fun, comfortable life? Here is the kicker: If you really think that these people are virtuous, then you should be leading lives like these people. If you actually lived virtuously, would your life be pleasurable? Would you pursue pleasure, happiness, or comfort? No. Joy is a very misunderstood concept in the post-modern “church”.

It has taken many years to realize it, but I am a prophet. No, not Elijah. Hell, I’m nothing compared to what is in the Bible. But, I am a truthsayer. I have been given the tools to think and the heart to say the truth. I am meant to say what must be said. I originally laughed at the idea. Who am I to know the truth or tell people it? There isn’t a question about it. Look at the tools God has given me. I could have been a prodigy in any subject, but God has led me to a very specific path. Everything has converged upon this (somewhat daunting and unpleasant) truth: I am designed to learn and teach the Will of God. Of course, I would say that EVERYONE is designed to learn and teach the Will of God in virtue of the Imago Dei. But, I mean it in a stronger sense for myself. This is a vocation and purpose to fulfill. Janitors should learn, follow, and teach the Will of God as well…but they are still Janitors.

Everyday and in everything I do, I see God in the shadows, in the systems, and in the numbers. I see where we are going and why. I am supernaturally gifted for a specific purpose. k0sh3k would say this is a messiah complex (although, she doesn’t think I have one…). Perhaps this isn’t far from the truth. Anyone with a specific purpose should act as a messiah in that specific circumstance–after all, it was the Master who sent YOU to do that specific task. No one else should be living your life and fulfilling your purpose but you (here is where I can agree with “individuality”). Essentially, I see what others do not, and I have long had the intuitive premonition that I am destined to try and use reason and minds to prepare people for becoming Slaves to the Master.

Now that I know my role, I must find my audience (1 or more people) and prepare the message. Perhaps I am called to teach a specific Janitor or maybe a group of Janitors? I am not a very good speaker. But, when the time comes, I will speak well. Although, maybe my audience will be resistant to listening or they might not even listen at all–Food for thought. Manipulation. That is the word of the day. It requires more thought. Also, What medium of communication will be used?

Speaking of Slaves, k0sh3k and I stumbled upon a Bible passage (Exo 21) that we’ve recently seen in a very different light. At first glance, if one interprets literally, there isn’t much to see. It is just a basic law for an old economic/social system. However, after researching it further, and in light of the discussion, the passage becomes so much more relevant.

I’ve pretty much already prefaced this with my respect for the term Slave. With the new concept of our purpose of existence as voluntary slavery, we should have a better look into the meaning and use of slavery found in the Bible. “Servant” is misunderstood. The role of the Slave is a calling for us all. This passage has something to say about a spiritual choice, a choice to become slaves. The interesting part of the Exodus 21 passage is that it is a slave who chooses to stay WITH his master as a matter of choice. This is profoundly parallel to the Chosen’s choice.

I am considering getting an Awl myself. Physical manifestations of your faith are both daily reminders and outward expressions of your slavery. These are good things. Nothing beats getting up in the morning to be reminded: “hey, you are a chosen voluntary slave…now get to work!” And, more importantly, revealing your slavery to the community is essential. You lack identity without others acknowledging what you are and what you’ve chosen.
I haven’t written in quite some time. I’ve enjoyed reading what other people have written, and I’ve definitely had lots to say, but I’ve not written anything of consequence for myself. I didn’t feel like writing–I have no idea why.

Updates across the board:

1.) k0sh3k is doing well. She is much, much bigger than she was at this stage in the pregnancy with j3d1h. In fact, so much of this pregnancy has come earlier than the previous that I’m inclined to think that Michael I.M. could be born earlier than the doctors suspect. k0sh3k thinks this could be true. In any case, k0sh3k is handling this pregnancy like a trooper. The acid reflux (which as been absolutely terrible), throwing up, constant nausea, awkward mobility, muscle and back soreness and spasms, and dealing with a 2-year old while running the house…I’m surprised she has such a good attitude. I know I wouldn’t be able to contain my…”joy”…if I were in her shoes. k0sh3k is amazing. Plus, she is so cute when she is pregnant–everything in you just wants to reach out touch that round belly.

2.) j3d1h is growing up fast. Bless her heart, she is just like her daddy. Strong willed, smart in surprising ways (it is fascinating to see how she develops an understanding of the world…like, how does she know that a pitbull is a dog and so is a golden retriever…they look nothing alike), the child keeps us on our toes. Her intelligence is matched only be her will–and both grow daily (I wish I could grow like that). Half of parenthood is simply a battle of wills. I keep reminding myself that good discipline now will pay off in the long run. I want to give her what she wants (it is definitely easier in the moment and more enjoyable for me), but that wouldn’t be wise. I think we’ve been good about it though. So, if she throws a fit, then she gets one of 3 reactions (in order): verbal warning, time-out in her room (she hates it), a smack on the leg and then time-out. She is never in any real pain, but she is clearly aware of our disapproval (and that hurts her feelings…as it should). The weird part is that in public, that kid is an angel. Seriously, I have no idea–I always considered a store or public place to be a tempting place to act up. Not for her though…her disobedience is only found at home.

One of our current issues is eating what we give her. She wants crackers, or something sweet…or even the food on our plate. She needs to eat her food, and so we train her to do it. If she doesn’t eat her food for lunch, she gets it for dinner, and so on and so forth, until she eats her food-there are no snacks or exceptions. But, believe me…I want to give the kid some ice cream…kids deserve stuff like that. Desert and Dessert, these children are just plain better than we are…scale what they’ve been given with what they accomplish, and in fairness, they are proportionately better people than adults. I don’t mean that we should spoil children…what I mean is: how could I possibly be the steward and model for someone that is doing better than I am? I am completely out of my league.

She isn’t an angel though. She has free will and she does wrong. She does wrong boldly. I admit, it is difficult to discipline a child when you admire some of the qualities that lead to their disobedience. Disciplining a child means dealing with the qualities that lead to that disobedience, and I rather like some of her…pizzazz. Of course, there is a difference between respectfully disagreeing and flat out disobeying. I want my child to obey, but I definitely want her to have the mind to disagree when appropriate (because, face it, I’m going to be wrong once in a while). This is a fine line to walk. In a world that is increasingly individualistic, I must create a child that knows her identity before she gets into the world. She must be independant of the world enough to condemn it and not be swallowed into secularity, but conditioned and restrained enough to know she is a sinner and a peon before God. Now, more than ever, is the time for us to stabilize our identity. She must be chained to her rationality and faith so that she can independantly influence the world to pursue God’s Will.

Going to Thailand is a good step towards helping my children to know they are different and to accept their independance from the world. There, I assume, they will be faced daily with the fact they are called to live beyond survivalism and pleasure-seeking. If we are extreme believers, then we better act like it.

All too often, I feel like the blind leading the blind.

3.) 1uxb0x is kicking. He can hear and tell the difference between light and dark. He might even have an IQ at this point. I don’t know what he looks like, but I’m sure he looks like a purple alien. Go alien, go! I am happy that he kicks.

4.) Church sucks. Seriously. We do Sunday school, volunteer work, tithe, but…skip as much Sunday morning service as possible. I can’t stand any church I walk into–they aren’t churches! The services are an even uglier reminder of it…I miss good services–alot. In fact, I miss the feeling that there were good churches where I live. Cynicism has opened my eyes to truth. It isn’t that “we all have problems”…the so called ‘churches’ aren’t even real Churches. They are half-breeds. I’ve said this for a while, I’ve considered for a long time, and I still have a hard time swallowing it. I know they are useless to God. As a PK (who is exceptionally cynical), my rule of thumb is about 1 in 100 people IN the pews are actually chosen. The rest are garbage. I feel like I’m becoming garbage just from being around them.

I don’t know how I could do this without k0sh3k. She is my spiritual partner and my accountabilibuddy. She is my best friend and she challenges me. It is such a blessing to live with another true Christian. I feel like our family is a lone-island of Chosenness in a sea of lukewarm. I’m seriously considering just holding our own services.

Finding other true believers is harder than you think. Thailand is more likely to have true believers per “Christian capita”, even though they are few and new. I am glad we are coming to convert, cultivate, and serve.

5.) Me. I’m doing good. I’m playing WoW. I’m enjoying my job. I like the flexibility and the brain-power I use. My life is never boring.

6.) Stephen Colbert is running for President in South Carolina (his homestate) as “favorite son”. I’d vote for him.
k0sh3k came and woke me up at about 5 A.M. this Monday and said that she needed help because she was passing out. This, of course, got my attention. I helped k0sh3k to the couch as she explained the problem. k0sh3k had been throwing up all night and was very dehydrated. When I saw her in the light I could see that she was struggling to stay conscious (she was going in and out), and it was then that I became fairly terrified. I’m surprised she even had the energy to come and get me in the first place. k0sh3k couldn’t see or talk straight, and so I tried feeding her a banana popsicle (she can usually keep those down) as I called her OBGYN to see if there was any immediate thing I needed to do before we went to the hospital. The OB told me to stop what I was doing and take her straight to the ER. I packed k0sh3k and j3d1h in the car as I called Flint and Kathy because I didn’t know what we’d be up against. Seeing your pregnant wife’s eye’s roll back into her head (and not just a normal roll because I’ve said something stupid) is a very scary sight.

We got k0sh3k to the hospital and in the ER in record time. It was difficult to juggle a sleepy j3d1h while walking k0sh3k inside the hospital. I went into the entrance and ask for help. k0sh3k was plopped into a wheelchair and taken straight to the ER as I explain she had been throwing up and was dehyrated to the point of a.) losing her vision, b.) confusion and babbling, and c.) going in and out of consciousness. Because she is 7 months pregnant and there weren’t too many people in the ER, they took her straight back without triage. At this point, I was asked to move my car out of the no-car/parking zone. I restrapped j3d1h back in the car, parked it, pulled her out, and ran back to see what they’ve done for my wife. Not so fast, I have to get the paper work done *sigh. I do the paperwork and Kathy arrives. We find my wife being pumped with fluids, having blood drawn, and being asked questions. I become relaxed though as I see she is fully conscious and has her vision back. We were out of the danger zone– I <3 Saline Solution.

Kathy stayed as until we felt k0sh3k had stabilized enough. Throwing up “red” bile did concern me, but other than that, k0sh3k seemed to be recovering very well. They did an EKG and hooked her up to a bunch of machines and she turned out all right. The baby was fine…still kicking too. We thanked Kathy for coming and said we didn’t need her to take j3d1h or anything else. I feel bad for calling them when everything went so well at the hospital, but I couldn’t have known how things would go.

I made the round of calls on the cell phones. A few hours later Grandma and grandpa M came, but they weren’t allowed back to see k0sh3k (according to the nurse). They took j3d1h, and I’m glad they did because I wasn’t expecting to stay in the ER for as long as we did. Generally, we are only in the actual ER for only two or so hours, but this had already been 4 hours, and we clearly had a long day ahead of us.

At about 2 P.M. I felt my exhaustion. I had been very sick all weekend too and I was just recovering. I was tired and hungry. Since k0sh3k was fine (just being pumped with fluids and monitored), I felt it was okay to get something to eat. I had brought both cells, so I gave k0sh3k her phone (so she could call me if she needed) and got a Pizza from across the street. This is usually a weird thing to do when you wife is still in the ER, but I had only eaten one meal since Friday and I needed some energy. Cell phones are great.

k0sh3k layed in nausea on that hard bed for 12 hours as the machine pumped fluid into her. Eventually, they found the right anti-nausea medicine that would actually work and k0sh3k was able to hold down a few ounces of Sprite. This was the ‘good sign’. k0sh3k and I were happy to go home.

It has been tons of Gatorade (the blue ice stuff is pretty good), prescription anti-nausea medication, and baby-steps of food for k0sh3k. I think she even had oatmeal this morning.
One of the most elusive words today is the concept of relevance. What is relevance?

A dictionary says: the relation of something to the matter at hand.

This is fairly broad, fairly odd, but you can see that the dictionary’s definition is at least getting where we want to be going. However, the existence of a relationship between two things is not enough. Relevance is not just any old relationship, relevance must be more. It must be a specific measurement or degree of a specific relation.

As usual, I like to look at the synonyms of words to get a better feeling for what it is and is not. Context becomes fairly important. And, it could be the case that synonyms shows paths of relevance of a word. (Yes, the word “relevance” gets me giddy).

Synonyms include: applicability, cogency, connectedness, connection, connexion, materiality, pertinence, pertinency, point, reference to, regard to, relation to, respect to.

Further inquiries into these synonyms results in circular definitions all pointing towards relevance and relation (whether concerned with ‘practical’ application or semantical connection). We’ll just say that the world in general “thinks” they know what is meant by relevance, even if they can’t define it.

Don’t worry, even the elite are confused.

For example, many philosophers and word scientists have suggested that it is a relation such as: q is relevant to p if q is implied by p. Logical implication still may not draw out the *ahem* relevant characteristic of relevance. There are problems with such a theory. For example, while [”Circles are round”] may be eventually logically implied by [”Cats are mammals”] in the long chain of deductions that we call the “conjunction of truths”, the logical implication, however “close” the relation, simply does not seem actually relevant. Relevance just isn’t captured by logical implication, it misses the point. The philosophers, who turn to man-made language, predicate logic, etc, to solve their problem, will not find solace in such a definition.

It was a nice try, but like the dictionary’s argument, it does not reveal the form of relevance. Perhaps, *cough, their definitions are not as relevant to the discussion of the meaning of “relevance” as these sources would hope. The missing piece to the logic puzzle is simple and elegant–maybe even too obvious.

Relevance is about importance–relevance is about value. Relevance is a value calculation. Let us see why.

First, I commend the sources of truthiness for pointing out a very relevant characteristic of relevance. The most concrete thing we can understand about relevance is that–

Relevance calculate a relations of two variables:

1.) The matter/object at hand (often misidentified and more complex that initially conceived).
2.) The relevant object (”").

There is only one specific type of relation (of the many that can exist between two objects) that we can call relevance. It is a value-linking relation, one of value-contributor and value-receiver or sum, that enables “relevance” to have any meaning at all. Relevance is a scaling term. Some things are more relevant than others to a matter/object at hand. To the degree that an object is necessary, fundamental and important to the matter or object at hand is the degree of its relevance. Explicitly:

Relevance is the value of the relevant object as related to the object at hand (not necessarily perceived by, rather actually contributed to ‘the object at hand’)

When I ask, “what is relevant?”, I am actually asking, “What things have value?” Relevance cannot be understood outside a value-system. Relevance is more than a causal relation or logical implication. Relevance is meaningless outside of value. How an object contributes value to another is the calculable relevance of the contributing object to the object at hand. Let us go through a series of relevance questions to better understand it.

What is the relevance of cats to mammals? -> What value does “cats” contribute to “mammals”? Take the sum value of “cats” and that is what it contributes to the value of mammals. Insofar as mammal increases in value because of cats’ value contribution to it, cats are relevant to mammals.

[Value of Cats]+[Value of non-cat Mammals]=[Value of Mammals]

Relevance percentile would look like:

[value of Cats]/[Value of Mammals]=Percentile relevance of Cats to Mammals.

These are basic (very basic) relevance-object and object-at-hand, with an easy to understand relation, and one of the easiest types of questions to understand relevance. The relevance-object and object-at-hand can become as complex and specific as any particular characteristic of anything. It can also be mundane and obvious. Regardless, all of them follow this formula. Relevance questions become slightly more difficult to understand when we ask more universal ones because we have to really accept the notion of universal value to make any sense of it at all (and that isn’t an easy task). Consider the question:

What is relevant about boats?

There is a hidden statement in this question, namely, while we have the relevance-object (boats), we lack an explicit object at hand. The object at hand, in general and in this question, is “the universe” (all existence, this actual world, etc.). The question should actually be read:

What is the relevance of boats to the universe?

The answer, of course, is that boats are only relevant insofar as they contribute to the sum total value of the actual world. We presume that the total value of boats is fairly small, but remember kids: it all adds up. Assuming the hidden variable’s value is the total sum value that could ever be considered, then the answer to [what is relevant about boats?] is the exact same question as [what is the value of boats?].

Notice that defining a hidden variables makes our job easy. Defining variables can become even more complex. We could, for example ask:

What is the relevance of [the value of boats] to [the answer to the question “What is the relevance of boats to the universe?”]?

Obviously, ‘the value of boats’ itself is really the key knowledge. We would say that [the value of boats] has 100% relevance to [the answer to the question “What is the relevance of boats to the universe?”].

No matter how complex or simple the two objects or relations they hold, as long as you define the variables exactly, you can calculate relevance.

Essentially, the solution of any relevance problem requires the prior identification of the relevant elements from which a solution can be constructed. If you don’t perfectly identify your relevance-object and object-at-hand variables, then you can’t even form a true relevance question. Even when we can identify, we must evaluate each variable. Here we run into our lacking capacity to properly evaluate an object and knowing whether or not our perceptions of an object’s value conform to its actual value. That, however, is not the point of this article (even if it is a relevant issue).

[Value of Relevance-Object]/[Value of Object-in-hand]=Relevance

This is the fundamental equation to calculate relevance. Whether you show a relevance-objects value-relation to a particular object-in-hand or even the Universe in general, the equation gives you the mathematical framework to make a meaningful statement about the proportional value contributes of any one thing to another.

How valuable is P to Q? P/Q=the rate of value. Again, two types of relevance questions can be asked. I’ll give an example.

How relevant was [George Washington] to [the American Revolution]?

How relevant was [George Washington] to [the universe]?

Notice how the ratios change. George Washington’s relevance goes from fairly high to fairly low depending upon the amount of value of the object-in-hand. GW might have been 20% of the Am. Rev’s value, and thus he retains 20% relevance to AR. As for the universe, GW might not have much relevance at all. Of course, he probably retains more relevance, proportionately, than some average Joe. Both types of relevance questions have their uses…that is to say, both types of questions remain relevant types of questions among the body of questions that could be asked.
I think the topic of ‘relevance’ is…highly relevant to us because it demonstrates the mathematical strategy model and mental mode from which we can understand and calculate the comparative advantage of one value pursuit over others. It is the basis of our psychological decisions. When we choose one thing instead of another, we are making relevance and value-based calculations. Knowing how we go about making decisions through a clarified definition of relevance gives us an insight into both our responsibility and, more importantly, how we can be more virtuous. We must, therefore, be exceedingly careful in our use of the term “relevant” so as not to misattribute value to objects. Basic distinctions of perceived relevance and actual relevance must be brought to the forefront of dialogue if we wish to bring the former closer to the latter. Our minds are too easily clouded with misinformation and ‘well-intentioned’, relativistic non-sense to waste time with irrelevant definitions and choice-systems of “relevence”.

In the end, it is important that we attempt to answer: “How am I relevant to the universe?”

To answer such a question we must use this definition of relevance. And, we will notice from our relevance calculations that we will also ask: “How relevant SHOULD I be to the universe?” (explicitly: “What is the relevance of [the person I should be] to [the universe]?)
These are distinctly different value calculations. The actual ME is different that what I ought to be. Thus, the first is asking what about my current value, while the second is asking what value I should make myself (through spiritual-value growth–becoming virtuous). This shows the degree of a sinnerhood. We can subtract the AM’s value from the SHOULD BE’s value, and realize how much we need God’s grace.

Anytime you look at something’s relevance, remember to do so from the perspective of a value-based paradigm. When you make relevance calculations, you must do so from the perspective of value-based morality exclusively. You will be asking: How this X relevant to God’s Will?
The word “Community” has a positive connotation. It is a warm, safe, and responsible expression. It is an object of caring complexity. Community serves as a step up, apart from the individual, to allow us to think of a group of individuals, usually in regards to needs, beliefs, and behaviors. This is a word we throw around a lot, perhaps to our injury.

Community is a word, I feel, that is slowly being twisted by post-moderns. It is a word twisted to the benefit of the post-modern, as if it lends credibility to their arguments. Community, as a meaning, is beginning to refer to a less logical construct and a more emotional one. Touchy-feely arguments are persuasive; and regardless of the lacking logical merit of the post-modern arguments, the relativists wield these words to great effect and influence. Arguments imbued with egalitarian, humanist nonsense, as found in the twisted use of the word “Community”, are dangerous and deform the proper perceptions of our purpose and identity. We must isolate and distinguish the exact meanings of weasel words, and I will start with this word: Community.

Current definitions are neither clear, nor completely tainted by the post-modern perspective. They are changing though, and they are being infected with the thoughts of the moral relativists. Our perception of the definition of community affects how we act within that context, and so we must be careful how we define it. The chosen must extract Community-ness if we wish to protect its truth-purity and disable the relativists’ attempt to convert us. If you have no idea what I mean by the post-modern undercurrent that is subverting the very nature of our understanding of community and our purpose, leading to the subversion of our communities and purpose themselves, then start with “Spheres of Justice”, with the subtitle “In defence of pluralism and equality”, a book written by Michael Walzer. Here you will be opened to a dangerous world of thought, one that denies the fundamental concept of absolute value and truth. It is here that the elite post-moderns begin their argument. This is the birthplace of the viral memes of relative-thinking that contaminate corporate and individual responsibility and value.

To arms, chosen slaves of the Word! We must win the thought-war if we are to survive and grow.

The word community is derived from the Latin communitas (meaning the same), which is in turn derived from communis, which means “common, public, shared by all or many”. Communis comes from a combination of the Latin prefix con- (which means “together”) and the word munis (which has to do with performing services).

Ironically, the original meaning is untainted and so very close to community-ness that it is scary. The modern world, even with the benefit of time which can often improve our understanding of a word or concept, has not distinguished this concept or brought us closer to the form of community; instead, the modern world has clouded the truth and even hindered us from reaching the meaning and purpose of this word. The ancient people, at least in this case, have a better handle on the meaning of the word than we do (where did progress go?…yes, we have congressed).

Generalized, a community is any number individuals or objects that share something or some set of things in common. Community-ness is the sameness found in particulars. It is the act of grouping commonality.

This seems fairly basic, as if it is too easy. However, some basic truths don’t necessarily simplify the world, they can help us to even make sense of the world in the first place. In this case, the actual number and types of communities that exist is actually very, very complex. This should remind you of Venn Diagramming.

Consider the people who live in Kentucky. This community is a sub-community/group of two sets. All that is contained in Kentucky and all people are combined to narrow and limit the meaning of both larger communities into a smaller one.

Now, consider the fat people in KY.

All Objects in Kentucky (A community itself)

All People

All Fat Objects

Narrowed into: Fat people in Kentucky.

Sadly, this is not too much different from “People in Kentucky”. Speaking of which, “People in Kentucky” and “Fat People in Kentucky” are two different communities, even if one is contained within the other.

In general, community acts as an identifier. Community gives us the logical relations between objects. Community, of course, is not bound by region or anything, but it requires at least a single commonality. Communities can be large or very, very small. They rely upon sameness in grouping, and that is the first concept to understanding community.

Community, at this point, sounds way too much like Venn Diagrams, the Forms, and just basic grouping. And, of course, it does rely upon these logic and definition systems. But, for “Community” to mean more than just “group”, and retain any useful meaning, it must be distinguished from just “group”. Community is distinguished from those logical grouping mechanisms in that it deals with a very specific type of group, a group so relevant to our discussions of purpose and value that we distinguish it and give it its own name.

The revised and more relevant definition becomes: A community is any number of morally culpable individuals that share something or some set of things in common.

‘The Community’ is comprised of all free individuals that are morally responsible for their actions and beliefs. All sub-communities are spawned from the commonalities found between members of The Community. The Community is more than just a group, it is special and set apart from all other groupings.

A community is a grouping of sameness as found in moral beings. It is here that we will find that a community becomes its own object. So, just as we can distinguish smaller communities from the larger ones by adding other commonality factors to limit the membership, we can also add up and group similar communities to form a new community obviously.

[Fat people in Kentucky] + [not-Fat people in Kentucky]=[People in Kentucky]

It is here, that Community develops its third requirement for relevant meaning. A community becomes its own object. Specifically, a community becomes its own morally culpable object or entity. A community derives a corporate moral responsibility from the morally responsible individuals that form the group. A community, at the very least, is the sum of the responsibilities of the individuals inside it. And, perhaps, moral synergy exists in a community in which even greater responsibility is required beyond the base sum. So, it may be the case that the total sum of moral responsibility of a community is greater than the sum of the individuals’ moral responsibility.

The revised and more relevant definition becomes: A community is any number of morally culpable entities that share something or some set of things in common.

Entity, of course, could be an individual or a sub-community. From this, we can logically conclude that there exists a:

Conjunction of All sub-communities that equates to “The Community”. It is the WHOLE of all possible morally culpable entities that comprise “The Community”.  The Community is an INDEX of all moral responsibilities in existence. This gets us to our final point.

Community is a measurement of moral responsibility and a required degree of value-seeking. Community-ness is relevant in distinguishing Individual and Corporate responsibility to rationally pursue value.

Community exists for the sake of rationally pursuing value, for being virtuous, and in virtue of the moral responsibility entailed with free beings and groups of free beings.

Neo-rationalists, Chosen people, Slaves of The God…you are a Community with a specific purpose and moral responsibility. Know your identity.
One of the most talked about cards in magic, but also one of the most difficult to evaluate. How should we value brainstorm? I’ve decided to breakdown the value of mechanics that form the card brainstorm. This should give us insight into why and when we use brainstorm.

I separate brainstorm’s effect into 3 components:

1.) [Cantrip]
2.) [Library Manipulation]
3.) [Hand+Library Manipulation].

1.) [Cantrip]–Guaranteed +1 Card in your hand, but more importantly, a guarenteed -1 card in your library. Brainstorm, like many cantrips, is 1 blue mana for 1 card, which is already a fair effect. This thins your deck like a street wraith or fetch land. A cantrip replaces lower quality cards in a deck, allowing you to see the highest quality cards of a specific function.

If you run 4 brainstorm in a 60 card deck, and you go through a quarter of your deck on average before the end of a game, then you are paying, on average, a single blue mana over the course of the game to have a 56 card deck. The scaling of the cost to cycle through more of your deck per average game is linear too.

Why would you want to turn 60 cards into 56? Some cards have a higher utility, value, or relevance to your deck or specific circumstance than others, and in reality, we only want to play those instead of lower quality cards if possible. Cantrips, like brainstorm, remove lower utility cards from the equation, allowing the remaining 56 cards to have a higher average utility value than the average 60 card deck. The question then becomes: was the average cost of using cantrips worth the card-quality gains?

I’ll use as straightfoward a case as I can think of to show you what a cantrip means to card quality. This case by no means showcases the brokenness that is Brainstorm that we might find in decks that abuse it best, but the case shows the principle behind cantripping.

Let’s say you were playing a deck that had 16 Volcanic Island, 40 Lightning Bolts (120 damage value), and 4 Shocks (8 damage value). Notice that shocks, on average, are 1/3rd less valuable than a bolt. We’ll say you see 11 cards per an average game, putting you at (11/60)*4 (total mana cost of cantrips in deck), or 0.733 of a U, on average, to go from a 60 card deck to a 56 card deck. What happens when we replace the lower quality cards of a deck, shock in this case, with a cantrip?

[Total value of win conditions]/[Total mana cost of win conditions]=[Average Win condition to mana ratio per card].
Shocks–   128/44=2.909
Cantrips– 120/(40+0.733)=2.946

The gain, in part, is one of mana efficiency. The otherside of the cantrip is how it affects your average “win-condition” value met per card.

[Total value of win conditions]/[Total cards in deck]=[Average Threat value per card] (Think of DPS for you MMORPGers)
Shocks– 128/60=2.133
Cantrips– 120/56=2.143

What if we made a deck with with 40 shocks and 4 ‘Flashback-less’ lava darts, how good is a cantrip then? Presume we see 13 cards per average game, or (13/60)*4=.866. Notice that Flashback-less lava darts are only 1/2 as effect as a shock, and contribute proportionately less to the total win condition value of the deck. The Shocks are more relevant to the bolt-deck than lava-darts are to the shock deck. This difference in proportion will illustrate the rising advantages on cantrips in decks and formats that have larger card quality disparities.

[Average Win condition to mana ratio per card]
Lava Darts– 84/44=1.909
Cantrips– 80/40.866=1.958

[Average Win condition value per card]
Lava Darts– 84/60=1.4
Cantrips– 80/56=1.429

The worse your cantrip-replaced cards proportionately compare to the average mana-efficiency and win condition values of the rest of your deck the better a cantrip becomes. Here are your comparisons:

Bolts’n'Cantrips/Bolts’n'Shocks Mana efficiency ratios– 2.946/2.909=1.013
Shocks’n'Cantrips/Shocks’n'Darts Mana efficiency ratios– 1.958/1.909=1.026

Bolts’n'Cantrips/Bolts’n'Shocks Win Condition density ratios–2.133/2.143=1.005
Shocks’n'Cantrips/Shocks’n'Darts Win Condition density ratios–1.429/1.4-1.021

As the win-condition value of the least valuable cards of a deck (those to be replaced with cantrips) proportionately decreases as compared to the more valuable cards in a deck, the proportionately better a cantrip becomes.

If all your spells have fairly equal win-condition value, then the effectiveness of a cantrip decreases. So, while the greater variation in the value or relevance of your cards, the better a cantrip becomes, the other side of this equation is that perfectly balanced decks with card quality equivalence would not want to use cantirps. For example, if you ran 16 Volcanic Island and 44 Bolts, would replacing 4 bolts with 4 cantrips be worth it? Let’s say you see 11 cards per game.

[Average Win condition to mana ratio per card]
Bolts–132/44=3
Bolts/Cantrips–120/40.733=2.946

[Average Win condition value per card]
Bolts–132/60=2.2
Bolts/Cantrips–120/56=2.14

Running straight bolts is simply better than having a cantrip. Why? There is too little variation in the mana-efficiency and win-condition values of the cards in a deck with nothing but bolts and land. In cases where all things in your deck are equal in value, then cantrips are not worth it. A perfectly balanced deck would not need cantrips. Building this “perfectly balanced” deck is more complicated than many would realize though. Remember the arguments against running more than 60 cards in a deck? Usually, because there is such extreme differences in the quality of cards in older formats, we seek the smallest decks possible to abuse the few cards that are just too darn good for their mana costs. Cantrips act as the glue between the broken cards of eternal formats in these cases. However, technically, there are cases where 65-card decks could be perfectly balanced, even better than 60 card decks. Perhaps you could make a 65-card deck that had a several functions, all maximal and equal quality cards for their slot and function, and any removal of a card would imbalance the deck’s card quality. Here, you would take a 65-card deck over a 60-card deck. But, how many decks do you know are this well made? The sort of perfection in balancing card value to make it such that a 65-card deck would be preferred to a 60 card deck is the same sort of calculation and balance that a deck would need in order not to consider cantrips. If there is any imbalance in the value of the cards in your deck, then cantrips are worth considering.

Since that perfection rarely exists, often due to format card pool constrainsts, we opt for cantrips. The proportionately less valuable a card is compared to the average card quality of a deck the more likely we should replace it with a cantrip.

Take a more extreme case, say 16 Volc-Islands, 40 4-damage for 1 mana burn cards (henceforth: Uber-Bolt), and 4 Flashback-less Lava darts. Say you’ll see 10 cards in an average game. (10/60)*4=.667 mana cost to goto 56 cards.

[Average Win condition to mana ratio per card]
Lava Darts– 164/44=3.727
Cantrips– 160/40.667=3.934

[Average Win condition value per card]
Lava Darts– 164/60=2.733
Cantrips– 160/56=2.857

Cantrips give proportionately larger gains when they replace cards of proportionately lower relevance. In this case, cantrips let us not run flashback-less lava darts and stick to straight uber-bolts, giving much higher mana efficiency and average card quality.

Cantrips aren’t the end-all-be-all solution though. Take a case where we ran 16 Volcanic Islands, 24 cantrips, and 20 Uber bolts vs. 16 land and 44 Uber Bolts. Say we’ll see 20 cards per game; (20/60)*24=8. Ouch, that is 8 mana, per game, spent on just lowering the count to 36. It will take too many turns to see the cards we need to see to be mana-efficient at all.

[Average Win condition to mana ratio per card]
Cantrips– 80/32=2.5
Uber Bolts– 176/44=4

[Average Win condition value per card]
Cantrips– 80/36=2.222
Uber Bolts– 160/2.667

This is an extreme example, but it shows that there is a specific number of cantrips we wish to run in any given deck. You can easily run too many or too few cantrips in a deck.

Burn, of course, can be a more straightfoward calculation than other decks. And, you’ll notice several burn decklists use bauble-cantrips to maximize and balance average card quality..for good reason. Other decks are certainly more complicated, but the principle still remains the same though:

The higher degree of disparity found between the relevance and value of the different cards in your deck, the more useful a cantrip becomes. Eventually, if you follow this path, you’ll see the extreme in silver-bullets and tool-box decks that rely upon card-quality, cantrips and tutors to consistently find the singleton card that may be the only relevant thing in your deck against an opponent.

This is why running Yawgmoth’s Will with cards that aren’t nearly as powerful would drive us to use cantrips: by running cantrips we will receive a higher average use and benefit of Yawgmoth’s Will over the course of many games. The benefit, often enough, is worth the cost of replacing weaker cards with cantrips.

Decks that have similar components are less likely to desire cantrips. An aggro deck, for example, may have few deviations from the mean value of cards in the deck. On the other hand, a combo deck may often find themself in situations where they have 2 of 3 combo pieces in hand, but need the last one. In this case, only the missing combo piece may be relevant to our situation, and cantrips increase the likelihood of finding the relevant cards.

The cantrip component of brainstorm fulfills a major glue-mechanic in which decks can more consistently run and play with higher quality cards with different functions and values in different circumstances.

Brainstorm is a cantrip, and will it will give this effect.

2.) [Library Manipulation]–This is a more straight foward effect to consider. Think of this as Sage Owl. How many cards do you have left in your library? To what degree do the individual cards in a deck deviate from the mean win-condition value of cards in a deck? The higher this deviation, and the lower your library count, the more effective library manipulation becomes. Bare in mind, the mean win-condition value and deviations vary per metagame, per deck, per matchup, and per specific game circumstance. This makes it incredibly difficult to calculate, but it highlights the variance we see in even the mean values across a spectrum of conditions. Library manipulation, like a cantrip, helps isolate and condense the average variance from the mean value of win-condtions across the spectrum of play-conditions.

Sage Owling into a 40-card library with nothing but Lightning Bolts isn’t going to net you anything. However, Sage Owling into a 40-card library that has only three or four relevant card in the deck (perhaps you MUST Wrath of God next turn or you lose) increases your likelihood of seeing relevant cards sooner. Like the cantrip, library manipulation benefits the deck that has higher variance in card value from the average card value.

Let’s take a basic example:

If you had 36 cards left in your library, 3 WoG’s in the library, and Wrath was the only relevant card, what does a 4-card Library manipulation effect do for you?

Without the library manipulation you have a 1 in 12 chance to draw Wrath of God next turn.
With a 4-card library manipulation you have a 1 in 9 chance to draw Wrath of God next turn.

Library manipulation is still very good even beyond looking for 1-of a specific card in your deck. It lines up your deck plays too. It could be as simple as counting your land drops drops for the next several turns and making sure relevant spells are on top with land being placed exactly where you would need to draw it so you could make a land drop for the next several turns.

Library manipulation allows you to order cards in their relevance to your current game position. If you need a counterspell before you need a land, then go ahead and put the land under the counterspell. The land may be relevant, but maybe it is less relevant than the counterspell. Library manipulation increases the quality of your future draws. A basic permutation grid of a 4-card library manipulation ensues.

Actual Card1 (in Slot1) — Value at Slot1=1, V@S2=6, V@S3=8, V@S4=5
Actual Card2 (in Slot2) — Value at Slot1=3, V@S2=5, V@S3=4, V@S4=6
Actual Card3 (in Slot3) — Value at Slot1=0, V@S2=5, V@S3=6, V@S4=2
Actual Card4 (in Slot4) — Value at Slot1=4, V@S2=2, V@S3=3, V@S4=3

Card1 moves to Slot3, Card2 moves to Slot4, Card3 moves to Slot2, Card 4 moves to Slot1.

Originally, we have a top 4-card value of 15. After a 4-card library manipulation we have a top 4-card value of 23.

The permutation grid is actually much more complicated than I’ve provided. For example, what if Card 3 only has a value of 5 in Slot2 if and only if Card 4 is in Slot1? Multiply this type of value calculation, and you see that identifying the value specifics cards, even in a very specific circumstances, can be quit complicated. These are the sorts of mental calculations that we make on the fly. It seems obvious, but drawing out the reason why we do what we are doing is more complex than we initially thought.

Shuffle effects has a specific effect right here too. You know the value of the top X cards of your library. Is that value below the average value of X cards in your library? If it is below, then a shuffle effect increases the value by [Average Value of X cards]-[Value of Current X cards].

Decks with higher variations of value per slot make the most use of library manipulation. Again, perfectly rounded decks with zero variance from the mean value per card would not want library manipulation. It must be noted that this perfect balance might not be found at 60 cards in a specific format and metagame, and thus a perfect deck without cantrips might not be possible in many circumstances.

Brainstorm have a 2-card library manipulation value. However, it’s 3rd effect is the game-breaking ability that twists library manipulation into relevant and immediate card advantage and quality.

3.) [Hand+Library Manipulation] This is a very odd effect in magic. This is the effect that makes brainstorm more than just a mere cantrip and library manipulation. This ability might be seen as an extension of library manipulation, but we must distinguish this component of brainstorm from a Sage Owl effect because of the influence this mechanic has upon an active hand. This effect alone can make brainstorm as good as Ancestral recall + 1/2 a Sage Owl or as bad as 1/3 an Ancestral Recall + 1/2 a Sage owl. That’s right, I said it: Brainstorm can be BETTER than Ancestral Recall. There is a two card quantity difference between the worst brainstorm and the best possible brainstorm, and most of the math behind understanding the value of a specific resolution of Brainstorm, as found between that spectrum, relies upon this mechanic.

Given the cantrip effect, the Hand+Library Manipulation effect is only a count of 2 cards. The value differences

To look at the Hand+Library Manipulation effect itself, we will neglect the cantrip and library manipulation components of Brainstorm for now.

Hand:
Card in Hand1 — Value in Hand=2, Value in Library=2 (in not particular order on library, just with X cards from the top)
Card in Hand2 — Value in Hand=3, Value in Library=0
Card in Hand3 — Value in Hand=1, Value in Library 1

Library
Card on Library1 — Value in Hand=3, Value in Library 1
Card on Library2 — Value in Hand=1, Value in Library 0

Current value of Hand+Library=7.

After a 2-card Hand+Library manipulation, where Hand1 is replaced with Library1 and Hand3 is replaced with Library2, the value of Hand+Library=10

This is rudimentary, but it shows the basic principle.

Echoing truth against a High-tide/Reset deck is a useless card. Hand-Library manipulation increases your current hand value by putting echo onto your library. This, of course, is at the expense of future draw values. However, when you add shuffle effects, it turns dead cards into average card value. Essentially, Hand-library manipulation is a 3-fold utility:

1.) Gives immediate hand value increase equal to [Cards put into hand from library] - [Cards put on top of library].
2.) Combined with shuffle effect, increases library value to [Average library card value of X cards] - [current top X card library value]
3.) Hiding valuable cards that you don’t want discarded.

Brainstorm does this effect like no other card for such a cheap cost.

Card value–

I’ve talked alot about card value. But, I haven’t given any good definition for it. Here goes:

Cantrips, Hand and Library manipulation are difficult to evaluate because it requires a system of identifying the exact of value of each card in a library average circumstance/metagame and the mean variance of value in those circumstances/metagame. This is a good starting place, and it gives us a common language to better understand where and why we use or do not use Brainstorm in a deck.

Card values vary per metagame, but are static to any one specific metagame. Yawgmoth’s Will is inherently stronger in a format that is better at getting cards into the graveyard. Basic land is inherently stronger in a format that doesn’t have better alternatives.

Universal Metagame=
Specific Metagame=

For the purposes of deckbuilding, card values are determined by their degree of influence on the offense/defense ratio of a deck. You are attempting to quantify how essential a card is to your win condition (having a higher offense/defense ratio than your opponent).

A deck or card is meaningless without an opponent or metagame to interpret its value. Against a metagame/opponent with a 60-land deck, the best deck will be the one that has the highest average win condition. It isn’t just whether you won, it is the margin by which you win or lose that helps form the value of the cards in your deck against a 60-land deck metagame. The win-condition to be met, in this metagame, is simply reaching the stage where an opponent has 20 lifeloss, has been milled and can’t draw, or loses through a straight “win-ability” (Door to Nothingness, etc.). Whichever deck has the highest average chance of reaching that win-condition is the best deck in that metagame.

What if you went against a 60-FoW deck metagame? Perhaps the deck that was the best in a 60-land deck metagame would not be the best in this specific 60-FoW deck metagame. The combo deck that probably evolved in the 60-land deck metagame was not prepared to deal with permission. You might say it wanted “speed” at all costs. But, in reality, the deck is only as good as it matches against a specific metagame.

Value of a card has those two values, value in the universal context and the specific. Do not be confused into thinking this isn’t calculable. You just need to see how to go about looking for its value in the first place.

This game is calculable and finite. Please remember that.

In conclusion:

Brainstorm is a pretty awesome card. Add in a shuffle effect, and I think it is next to broken.
Defining the World.

Relational definitions of objects through Form-Spectrum analysis.

Time to redefine the word &quot;Form&quot;

A form is one side of a spectrum. There is F-ness and Non-Fness. The Non-Fness is everything that Fness isn't, and Fness is everything that non-Fness isn't. While this semantical claim might not seem valuable, I assure you that such logical claims are the basis of all thought concerning particular objects and things. Form-spectrums are revolutionary in their ability to analyze and define a particular thing.

Plato and Aristotle may have said that something &quot;conformed&quot; or did not conform to a &quot;form&quot;. They did not properly discuss the DEGREE to which something conformed to a form. The degree to which a particular thing conforms is ESSENTIAL to defining that particular thing.

Just take the classic example of Beauty or Beauty-ness. We can say the painting is beautiful, and we mean to say that the painting partakes of the form of beauty. However, clearly the painting could be MORE beautiful, and the painting itself does not define the essence of beauty. We can draw several conclusions from this experience. Firstly, we can mathematically calculate HOW beautiful something is compared to other objects of beauty and, specifically, we can theoretically test to see HOW MUCH beauty exists in an object. How much does it partake of beautyness? This is the degree of beauty as found in something. The second important fact to understand is that: insofar as an object is NOT beautiful or fails to partake of beauty that object is partaking of the opposite of beauty. This, of course, presupposes that for one thing to exist, an opposite of some sort must exist. What is the opposite of beauty? Is it ugliness?...maybe. The easiest way to consider it is:

B
~B

B=Beauty-ness or Form of Beauty

All that is Beatyness is B.
All that is not Beautyness is ~B.

To say somethin is 20% beautiful is to say that it replicates, duplicates, mirrors, and exhibits Beauty-ness by a degree of 20%. What is the rest of the 80%? Well...we know for a fact it isn't beautiful. But, that doesn't mean it is 20% beautiful and 80% ugly (although, this form DOES exist in concept). All we know is that it is non-beauty-ness. This is very broad. Perhaps it is 10% wooden-ness, 5% redness, etc.  The 80% is a composition of whatever other forms from which this particular something partakes. The important thing to realize is that the end result composition will add up to 100% of some proportion of form-partaking. I call this the form-spectrum of particulars.

A baseball bat may APPEAR to be composed entirely of wood, but we would be stupid to think that a baseball bat and Wooden-ness are the same things though. The baseball bat has a particular structure and function. Perhaps it has engravings. Perhaps the bat has sentimental value beyond any old woodenness. Perhaps the baseball bat isn't eternal and timeless and exists in a temporal state. These particular characteristics are measurements of other forms from which the baseball bat partakes.

Takes cats form-spectrums:

Non-Mammal-------------------------------Perfect Mammal-ness
Non-Cat----------------------------------Cat-ness
Non-Blackness----------------------------Blackness
etc.

Cat is defined by where it exists on the form-spectrums across all possibly cat-relating forms. I can take Yoda and say he has X degree of Blackness, X degree of friendliness, X degree of Catness, X degree of big-ear-edness.

How Mammally are cats? If Mammalness (the form of mammal) is the object at hand, and we measure the mammality of cats, then we can know the degree to mammalness is composed of catness.

Forms ARE particulars. They do all partake of FORMness right? The degree to which other forms/particulars partake of the form of something else is the degree to which that thing is a form.

The only perfect form is form-ness. All others exist upon form-ness. They are dependant. They can be different, but they still must partake of some other forms to exist.

Existing, truth, actual, and real are all synonyms of FORMness. If it is under the umbrella of Form, then it doesn't exist. Form is the only thing that has no REAL opposite. I can't point or consider anything that isn't under Formness. All truths, definitionally, partake of Form.

Formness-&gt;(nearly) Independant Form concepts (no particulars exist)-&gt;Forms of Particulars

Indy forms would include &quot;beauty&quot;. There isn't some particular thing we call beautyness. And, there isn't some heavenly ethereal body we call beautyness. Beautyness is a pure concept, independant of all particulars and nearly all other concepts. You can describe beauty only by itself (and its foundational forms). Beauty exists upon the foundation of few forms, for example: Formness and valueness (which could be the same thing, I need to give it more thought).

This is a heirarchy of foundational truths by which we can deduce the meaning and interrelation complexities of other truths in the form of form-spectrum analysis.

We need to ask what is Godness (which isn't the same as Godliness)? Godness relies upon Formness and Valueness (co-existing?).

This-scissor-ness. That-scissor-ness.

Subforms are dependant upon other forms. This-scissor-ness relies upon many other forms, thus it qualifies as a subform.

A specific purpose or meaning of an object is yet another borrowing or partaking of a form.

Let us dissect this particular scissor we have in mind (pretend it is in your hand). It is a 30 year-old scissor that has red, low quality plastic handles, the sheers are steel, the cutting blade can cut through 2 inches of paper when 50ppsi is applied at the middle of the handles, but not 2.1 inches at the same pressure, it has a blue dolphin sticker on the outside of the left blade, the joint squeeks at 300mhz, and we bought it for 500$ from a celebrity office-supply memorabilia store because Jimmie Hendrix once owned it, etc. This scissor has many properties and characteristics, perhaps an infinite set of them even. This particular scissor has it's own form. For the sake of the argument, we will call it This-Scissor-ness. If I tried to replicate or comprehend it absolutely and fully, then I'll need to refer to the particular form of this particular scissor. Each new object has its own &quot;this-object-ness&quot;. We cannot understand or know all of this particular scissor without referring this This-Scissor-ness.

However, This-Scissor-ness is not independant of other concepts and forms. In fact, This-Scissor-ness is heavily dependant upon other forms, and we cannot under This-Scissor-ness without considering the many, many forms from which it partakes. The forms of &quot;handles&quot;, &quot;cutting&quot;, &quot;blades&quot;, &quot;red&quot;, &quot;sound&quot;, etc. and every single detail and every interrelated characteristic of this particular object must be considered when identifying the meaning of This-Scissor-ness in its entirety. Perhaps This-Scissor-Ness is comprised of 15% steelness. Perhaps steelness comprises 5% of metalness. Then, This-Scissor-ness partakes of metalness as well...We move from very, very particular forms to less particular forms. We move towards higher forms which are less dependant upon other forms. This web of definitional relations spreads far and wide.

Scissor-&gt;steel-&gt;metal-&gt;material-&gt;existing (FormNess)

There are probably millions of tiny gaps to consider in between each of these dependancies. Comprehending the the scissor is a much more complicated process than many would have initially thought.
Forms with EXISTING particulars
Forms without Exant particulars

 

Formness-&gt;(nearly) Independant Form concepts (no particulars exist)-&gt;Forms of Particulars

Some forms are abstract, but are built upon the foundation of other forms. The form itself, however, is a particular thing (even if it isn't concrete). Particular objects that partake of other forms act as their own form. We can't divide abstract and concrete as if only one exists in reality and the other doesn't. Particular objects are

Generally, the ancients looked at the 'forms' as abstract definitions which were used to describe concrete objects in reality. They treated concrete objects as particulars. These particular objects were not forms, they merely partook of other forms to be defined. Unfortunately, concrete matter was never taken into consideration as defining other concrete matter. This system has a lowest common denominator, but it fails to appreciate a world of value. It does not let us perfectly define a thing.

What is Concreteness?

Notice the difference between the two statements.

All matter is concrete.
All matter partakes of Concreteness.

There is more to matter than just being concrete. The concreteness of matter is merely one aspect of matter. Matter can have value, color, speed, etc.

Cat are Mammals.
Mammals aren't necessarily Cats.

Mammal does not describe the fullness of Cat. Cat has more characteristics to define. Cat is specific. Cat has more definition than just.
28 Mana

* 4 Mishra’s Workshop
* 2 Mishra’s Factory
* 1 Tolarian Academy
* 4 Wasteland
* 1 Strip Mine
* 3 Mountain
* 4 B-Ring
* 5 Moxes
* 1 Black Lotus
* 1 Sol Ring
* 1 Mana Vault
* 1 Mana Crypt

24 Disruption

* 1 Trinisphere
* 4 Sphere of Resistance
* 4 Thorn of Amethyst
* 4 Tangle Wire
* 4 CoTV
* 4 Smokestack
* 3 Crucible of Worlds

8 Creatures

* 4 Goblin Welder
* 2 Trike
* 2 Mox Monkey

Sideboard

* SB: 4 Jester’s Cap
* SB: 4 Leyline of the Void
* SB: 3 Rack and Ruin
* SB: 4 Juggernauts

Control.

This pile drops lockpiece after lockpiece. Look at it: 9-sphere effects, wire, Cotv, stacks, and LD recursion a la CoWorlds all of which are accelerated by a souped up mana accel engine. This thing locks games down.

The purpose of this article is for us to better understand the meaning and value of resilience as it relates to your average PvP circumstances. I will give the equations context.

What is resilience?

Resilience is a 3-part stat.

A.) x% reduction in an opponent’s critical strike rate (henceforth variable resA)
B.) 2x% reduction in an opponent’s critical strike damage (resB)
C.) x% reduction in an opponent’s DoT damage (resC)

X = [Resilience rating * 0.025]

e.g. 100 resilience rating = 2.5% reduction in an opponent’s critical strike rate
5% reduction in an opponent’s critical strike damage
2.5% reduction in an opponet’s DoT damage

What is the purpose of resilience?

Resilience is a survivability stat which exists to mitigate the effectiveness of burst damage and randomness in the game. Unlike armor, it does not strictly mitigate all incoming damage like a blanket protection, however, it does serve to mitigate the random crit streaks and intensity of crits in the game while blanket-mitigating all DoT damage. Resilience eliminates variance in damage taken. Resilience, essentially, exists to make a more fair and predictable fight in PvP through increased consistency in survivability gains.

Beautifully, resilience mitigates nearly all sources of damage to some extent.

How valuable is this stat?

The best way to measure the effects of resilience is to understand its equivalence in HP. How much survivability does resilience add per itemization cost-unit as compared to the survivability gains of HP/Stamina of equivalent itemization costs? The truth of the matter is that several PvP circumstances exist in which resilience is the wrong stat in which to invest. Most players fail to recognize this fact.

HP, like AP is to melee damage, is a static and linear gain in survivability. Resilience, like most forms of damage reduction, functions exponentially, with geometric gains in survivability. Specifically, against targets that resilience can effect (assuming they have crit rating or use DoTs), resilience increases the value of each point of health.

To give a workable example, consider personA with 10k hp who faces a melee opponent with a 30% crit rate. If personA has one open gemslot, should he use a 12 stamina gem, 8 resilience gem, or 4 resilience/6 stamina to maximize his survivability against said opponent? 120hp vs. 0.2%/0.4% reduction vs. 0.1%/0.2%/60hp.

Without even looking too closely at the math, it is easy to see that the highest initial survivability (time to live) gains come from investment in HP/stamina. But, at some point, in cases where a person has enough [virtual HP] (actual HP + actual Healing received), exponential survivability stats overcome the utility of straight HP/Stamina investment in itemization costs. Where is the point of inflection? Where does resilience become greater in value, per itemization cost, than HP/stamina?

This is a somewhat complicated question to answer. It depends on several variables. Resilience rating, total virtual health, proportion of DD and DoT damage types, crit bonus, and crit rate are the fundamental variables you need to know. As each of these variables scale up or down, we’ll see shifts in the comparative values of resilience and stamina. In our case, we want to ask ourselves what the average quantity will be for each of these variables.

What calculations must be made?

We need to take a look at the very meaning of critical strike chance and how it effects survivability and opponent’s damage in order to fully understand what resilience is doing for us.

Take personA:

It takes 10,000 1-damage non-crit strikes to consume personA’s survivability.
If personA’s opponent (personB) has a 30% crit rate (and 100% crit damage bonus), then it will take ~7,692 strikes, or ~2307 2-damage crit strikes and ~5384 1-damage non-crit strikes, to consume personA’s survivability.

Moving from 0% to 30% crit chance on personB’s 1-damage strikes has a dramatic effect on personA’s time to live. 23.1% less effort is required of personB to get the same effect as striking without crits, and essentially, personA loses 23.1% survivability because of personB’s gain in crit chance.

+30% crit chance buff for personB is the same as a -23.1% debuff of personA’s HP.

10,000 * (1 - 23.1%) = 7,692 HP
7,692 1-damage non-crit strikes

Your opponent’s offense and your defense are mathematically translatable concepts. Because of this, you may even think of this situation as each point of personA’s 10,000 health is worth 23.1% LESS because of an increase in personB’s crit chance. Time to live ratio’s remain the same, regardless of how you look at the problem.

Damage enhancement is not directly the same loss in survivability for an opponent.

([HP] / (1 + [Damage Modifier])) = [Surivability Post Damage Modifier]
10,000 / (1 + .1) = 9,090
10,000 / (1 + .3) = 7,692
10,000 / (1 + .6) = 6,250
10,000 / (1 + 1.0) = 5,000
10,000 / (1 + 2.0) = 3,333

You’ll also notice that there is diminishing returns to increases in [Damage Modifer], but an exponential returns in mitigating [Damage Modifier]. Moving from 200% [DM] to 100% [DM], a 100% difference, is merely a 1,666 gain in survivability, while moving from 10% [DM] to 0% [DM], a 10% difference, is a whopping 910 survivability. The less crit your opponent has, the better resA’s effect will become.

Resilience effect A (resA) becomes better and better with each point (I’m not going to deal with the other two effects just yet), assuming that each percentage point of resilience has a corresonding degree of crit rating. If an opponent doesn’t have a great deal of crit rate, then resilience is obviously the stat to stack. Taking crit chance to near zero is preferred. Unfortunately, a character can only get so much resilience (capped in itemization), while crit rates are much easier to maximize. If high enough (beyond resilience correspondence cap), the higher your opponent’s crit rating, the less valuable resilience becomes in this respect. In some cases, crit ratings may soar so high that stamina provides greater benefit in survivability itemization.

Think about it: it takes 400 resilience to lower just 10% crit rate (and 400 resilience is a fairly large chunk). If an opponent has only 10% to begin with, then you are gaining 910 survivability. But, if the opponent had 35% crit rate (definitely possible), then you only move from 7407 to 8000 survivability, a 593 survivabilty gain. You would need a currently unreachable amount of resilience to cover that amount of crit rate. As such, you start at the low end of the curve when calculating how resilience negates crit rate, and you receive fewer actual time-to-live benefits. While resB attempts to curb this effect, it does not negate the strength of crit stacking beyond the reach of resilience itemization possibilities. In any case, the scaling needs of resilience promotes an all-or-nothing mentality (admittedly, itemization is limited, and you’re going to definitely have some degree of resilience in your gear if you PvP; however, a good portion of enchants/gems/trinkets have more variance to choose from).

The problem for the case for resilience may be worse. We need to convert the survivability gains of resilience to the flat survivability gains of stamina/HP in equivalent itemization costs.

Even if you used 400 resilience against an opponent with 10% crit rate, gaining 910 survivability, a 10% (9,090/910) increase in the value of your HP, you could do the same thing by just adding (10,000*10%) 1,000 HP.

10,000 * 10 = 11,000 / (1 + .1) = 10,000
10,000 / (1 + .1 - [400 resA or .1]) = 10,000

In this case, where playerA has 10,000 HP, a 1,000 HP gain, or 100 stamina, is the equivalent of the survivability gains of 400 resilience against an opponent with 10% crit chance. But, which is easier to reach in itemization costs, 100 stamina or 400 resilience?

Looking at gems, 100 stamina = 66.67 Resilience rating. For the itemization cost of 400 resilience, you would gain 600 stamina or 6,000 HP. It is simply obvious that 16k hp is going to have more survivability than 10k hp with 400 resilience against an opponent with a 10% crit rate.

10,000 / (1 + .1) = 9,090
16,000 / (1 + .1) = 14,545
10,000 / (1 + .1 - [400 resA or .1]) = 10,000

Using stamina in your itemization instead of resilience will net a player 5,455 survivability, while the equivalent itemization costs in resilience (400) only nets a player 910 survivability. Stamina is 500% better than resilience at 10,000 HP with an opponent at 10% crit rate. Stamina, as well, never capped, and resilience’s effect A capped because you can’t lower crit rate beyond 0%. This could exist if people were stacking enough resil and dropping every bit of crit rating possible for linear damage gains like AP/+spell/etc.

Again, as we saw before, resilience becomes even worse against targets with higher crit rates where our exponential gains of resilience are set back in the curve.

10,000 / (1 + .35) = 7,407
16,000 / (1 + .35) = 11,851
10,000 / (1 + .35 - [400 resA or .1]) = 8,000

Stamina = 11,851 - 7,407 = 4,444 survivability gain
Resilience = 593 survivability gain.

It would seem that Stamina is 649% better than resilience in this case. Ah, but now we have a crit rating that is not matched by resA, and we have not included the second effect of resilience, resB, in our calculation. Here, resB will curb the effects of rising crit rates that resA cannot negate. In this case, there is 25% crit chance left to be affected by resB’s effect. Essentially, the effects of any crit chance left over is reduced by resB.

[HP] / (1 + (([Crit rate] - [resA rate]) * (1 - [resB rate]))) = [Survivability Post Resilience] (resA and B’s effect)
10,000 / (1 + ((.35 - [.1]) * (1 - [.2]))) = 10,000 / (1 + (.25 * .8)) = 10,000 / (1 + .2) = 8,333

Notice a 333 survivability gain because of resB against an opponent with 35% crit rate.

ResA=593 survivability gain
ResB=333 survivability gain
Resilence nets 926 survivability
Stamina nets 4,444 survivability

Stamina is 380% better than resilience when including ResB’s effect with 10k hp and a 35% crit rate opponent.

There are several forces at work. The higher initial crit rate, the less we benefit from lowering it. However, the higher the crit rate, the better resilience becomes, proportionately, as compared to stamina.

We do not play in a world where everone has exactly 10k initial HP. In some cases, for example, heavy-healing based arena circumstances, whereby a person might recieve 50k healing throughout the game in addition to their natural 10k (we might say they have 60k virtual HP), resilience is extremely valuable stat. Resilience scales with your HP. It makes each health point worth MORE; stamina cannot do this.

So, taking our example at a 35% crit rate:

60,000 / (1 + .35) = 44,444
66,000 / (1 + .35) = 48,889
60,000 / (1 + (([.35] - [.1]) * (1 - [.2]))) = 50,000

Hello, resilience.

Stamina: 48,889 - 44,444 = 4,445 survivability
Resilience: 50,000 - 44,444 = 5,556 survivability

Resilience is 25% better than stamina here. Make it 590,000 Healing + 10,000 starting HP.

600,000 / (1 + .35) = 444,444
606,000 / (1 + .35) = 448,889
600,000 / (1 + (([.35] - [.1]) * (1 - [.2]))) = 500,000

Stamina: 448,889 - 444,444 = 4,445 survivability (hrmm…I swear i’ve seen this number before…linear gains look small with enough virtual HP)
Resilience: 500,000 - 444,444 = 55,556 survivability

400 Resilience is 1,149% greater than 600 Stamina with 600k virtual hp against a target with 35% crit rate.

Stamina, a linear survivability stat, becomes outclassed quickly in fights where there are high crit rates and a lot of healing.

Where is the point of inflection, whereby stamina=resilience in itemization costs?

As stated, it depends on several variables: resilience rating (converted to resA,B, and C rates), total virtual health, ratio of DoT and Direct Damage, crit bonus, and crit chance. We need to define these variables more to understand the process.

[Initial HP] + [Actual Healing received] = [Virtual HP] (or [VHP] for short)

This cannot include overhealing. It must include all buffs to your HP that are not dispelled.

Crit bonus is an important factor. Some classes have higher damage bonuses than others with a critical strike. This influences the value of resB. The higher the bonus, the more effect from resB. This show how crit bonus and resB operates inside a resilience calculation:

[Damage] + ((([Damage] * ([Crit chance] - [ResA])) * [Crit Bonus]) * (1 - [resB])) = [Damage Post Crit and Res]

Take: 1000 1-damage swings, 30% crit chance, 0% crit bonus, 10% resA and 20% resb

1000 + (((1000 * (30%-10%)) * 0%) * (1 - 20%)) =
1000 + (((1000 * 20%) * 0%) * 80%) =
1000 + ((200 * 0%) * 80%) =
1000 + (0 * 80%) = 1000

Take: 1000 1-damage swings, 30% crit chance, 50% crit bonus, 10% resA and 20% resb

1000 + (((1000 * (30%-10%)) * 50%) * (1 - 20%)) =
1000 + (((1000 * 20%) * 50%) * 80%) =
1000 + ((200 * 50%) * 80%) =
1000 + (100 * 80%) = 1080, would have been 1100 without resB. 20 damage reduction from resB

Take: 1000 1-damage swings, 30% crit chance, 100% crit bonus, 10% resA and 20% resb

1000 + (((1000 * (30%-10%)) * 100%) * (1 - 20%)) =
1000 + (((1000 * 20%) * 100%) * 80%) =
1000 + ((200 * 100%) * 80%) =
1000 + (200 * 80%) = 1160, would have been 1200 without resB. 40 damage reducton from resB

ResB’s effect scales with crit bonus. This also means that resB affect melee classes much worse, in general, than casters. With crit bonus in mind, we have to rewrite the [Survivability Post Resilience] formula:

[HP] / (1 + ((([Crit rate] - [resA rate]) * [Crit Bonus]) * (1 - [resB rate]))) = [Survivability Post Resilience] ([SPR])

ResC’s effect has yet to be discussed. This is very straightfoward. It has the same value as resA against DoTs, and it is a strict mitigation of all DoT damage (no randomness involved). The problem with calculating ResC’s effect is that we need to know the proportion of damage that is DoT and DD over an average fight. Resilience will have a more profound effect upon DD, and thus, including this ratio of DD and DoT in our equation will bring our numbers more in line with the actual average value of resilience. Unfortunately, this gives us yet another factor of variance. Some circumstances will have heavy DoT damage and others none.

At 400 resilience you will reduce all DoT damage by 10% (just as you would reduce all crit chances against you by 10%). Assuming you were taking 100% DoT damage, the survivability value of resC is exactly 10%.

It takes 10,000 1-point DoT ticks to consume the survivability of someone with 10k HP. Let’s look at what adding 400 resilience, or 10% damage reduction of DoT’s can do:

What happens in the reduction, where X is the end survivability:

X * (1 + (-10%)) = 10,000.

11,111 * (1 + (-10%)) = 10,000

so:

[HP] / (1 + ([Damage modifier]) = [Survivability]

10,000 / (1 + (-10%)) = 11,111 survivability, or a 1,111 gain in survivability.

So, to include ResC, just see it as a negative Damage modifier on DoT damage.

[HP] / (1 - [ResC]) = [Survivability Post ResC]
10,000 / (1 - 10%) = 11,111

The total equation becomes uglier by including resC’s effect. We have to include the ratio of DD and DoT damage. They will serve as two different halves of survivability.

Proportion of damage that is Direct (critable) = [PDD]
Proportion of damage that is damage over time (affected by resC) = [PDOT]

[PDD] + [PDOT] = 100% — always.

(([PDD] * [HP]) / (1 + ((([Crit rate] - [resA rate]) * [Crit Bonus]) * (1 - [resB rate])))) + ([PDOT] * [HP] / (1 - [ResC rate])) = [Survivability Post Resilience] (Res A, B, and C)

Solving the point of inflection problem:

The base inflection problem is already in front of us. We’ve dissected how this equation works and how variables impact our outcome. We need to calculate our current survivability and then consider the value of additional stamina or resilience. This means that resA, B, and C’s rates will need to be shown as conversions. Resilience points or rating (as seen in itemization), rather than percentage or rate = [Res].

(([PDD] * [HP]) / (1 + ((([Crit rate] - ([Res] * 0.00025)) * [Crit Bonus]) * (1 - ([Res] * .0005))))) + ([PDOT] * [HP] / (1 - ([Res] * 0.00025))) = [Survivability]

1 Resilience = 1.5 Stamina

We have to solve the problem from the perspective that we have a certain amount of itemization cost available to spend.

X = itemization cost spent on resilience

(([PDD] * ([HP] + (X * 15))) / (1 + ((([Crit rate] - ([Res] * 0.00025)) * [Crit Bonus]) * (1 - ([Res] * .0005))))) + ([PDOT] * ([HP] + (X * 15)) / (1 - ([Res] * 0.00025))) = [Additional HP Survivability]

(([PDD] * [HP]) / (1 + ((([Crit rate] - (([Res] + X) * 0.00025)) * [Crit Bonus]) * (1 - (([Res] + X) * .0005))))) + ([PDOT] * [HP] / (1 - (([Res] + X) * 0.00025))) = [Additonal Resilience Survivability]

(([PDD] * ([HP] + (X * 15))) / (1 + ((([Crit rate] - ([Res] * 0.00025)) * [Crit Bonus]) * (1 - ([Res] * .0005))))) + ([PDOT] * ([HP] + (X * 15)) / (1 - ([Res] * 0.00025))) = (([PDD] * [HP]) / (1 + ((([Crit rate] - (([Res] + X) * 0.00025)) * [Crit Bonus]) * (1 - (([Res] + X) * .0005))))) + ([PDOT] * [HP] / (1 - (([Res] + X) * 0.00025)))

Solve for X.

If you don’t feel like doing it, I have an excellent spreadsheet available. Put in your stats, how much itemization you have available, and it will show you what you can gain in your specific circumstance.

Conclusions:

Resilience extends your survivability in long-term, healing intensive and high crit rate battles. The shorter the battle, the less effective resilience will be.

Melee classes are affected the most by this stat.

Healers that are self-healing will draw the greatest gains from resilience. You need only enough HP to get the next heal off. For a common Focus Fire target, with a full-time heal bot, and a very high virtual HP, resilience is a bomb stat.

For classes that aren’t focus fired as often, HP DOES offer higher initial survivability. But, why stack HP at all if you aren’t even being focus fired? We can pour our itemization into damage, because we know we aren’t going to be focus fired. This, of course, makes us better targets to hit, because we are easier to kill than everyone else.

It stands that resilience acts as a bluff stat on a non-focus fired target in a team with a healer. It basically allows you to pour most of your points into damage, enough resilience to act as a deterent to being FFed, and almost no HP/stamina.

For classes with low or no-healing circumstances, as found in 1v1, 2v2, and several 3v3 groups, HP/stamina is strictly a better survivability stat. The question becomes: is survivability important for those circumstances? Perhaps, due to your class matrix or circumstance, you find yourself never being FF’d until you’ve already lost the battle. Maybe it is rogue/priest and the priest is FF’d every single game. Would the rogue really care about his survivability? If FFing the rogue from the beginning of a fight is an autoloss for a team (because tactically it would enable the priest to do his thing), then the priest will be the FF target. Therefore, the rogue is free, in itemization to stray away from survivability in favor of damage. You want to create teams where every target is a bad target to focus. But, you want to know who they will focus and bluff in your itemization.

Several teams don’t even heal (2 or 3 DPS matrices) enough for resilience to matter enough. Stack stamina.
Dear Rev. Kim,

I am engaging in the enrollment process at Trinity Theological College. My wife and I both wish to attend this seminary. I am writing this letter to tell you about my history, my ministry and calling, and to ask for your support.

Both of my parents have been pastors all my life. Their ministry has given me many opportunities to serve the Lord and witness the power and necessity of the gospel. I’ve been an active member in all of the churches in which I grew up, and I have had the opportunity to work many of the background projects that were available to pastors’ kids.  I’ve worked in soup kitchens, taught bible classes, played piano accompaniment, performed church building maintenance, set up stages, built computer networks, and worked as a counselor at youth camps. Since coming to Thailand, I’ve been a Christian witness to my students and to staff of the Thai public school system.

There are many roles that need to be filled in the Body of Christ, and God has led me to my role: I am to do both academic work and hands-on evangelical ministry, to defend and spread the faith in a secular world, and to help train and create mature and passionate Christians.

Growing up, I’ve been surrounded by a strong sense of a rational God and the belief that having faith was a reasonable objective. I have found that critical thinking about the Bible gives us important practical applications as to how we are expected to live our lives. I want to share that knowledge with others. Trinity Theological College is a place where I can continue to grow and learn so that I can more effectively minister to the hungry minds and souls of others.

To whom much is given, much is required - God has given me so much and provided reason to believe and have faith, and I am called to share my resources. Academic ministry is also a ministry of hospitality, and I must welcome others to share in the pursuit of God in all realms. 

I intend to acquire a Masters in Theological Studies and continue into post-graduate studies so that I will be qualified to teach in a seminary or bible college or wherever God would have me teach. I am grateful for your consideration, and I hope that you can enable me to fulfill God’s plan for me and my family.

								Sincerely,

										
								h0p3
//My best guess is this is from mid 2008. I've not taken the time to carefully parse the encoded backup file (all I have left of the blog).//

INTJ

Apparently, I have changed from an ENTJ to INTJ. Well, congratulations moderate intravert! I can't help but wonder if the shift or the test is false or misleading. The test fails to capture what happened. The test explains that I no longer acquire energy from others, but rather from myself. This is vague and misleading. The hilarious part: I really enjoy being around people I like (&lt;--a huge qualifier)...seriously. I'd much rather be with people (that I respect) than be solo. Why else would someone get married or be a part of a community at all? How do you expect to grow if you aren't interacting with peer-like or higher beings (including yourself as a peer)?

While we are taught to think of &quot;Intravertedness&quot; as &quot;getting your energy&quot; from yourself rather than other people (the latter, and opposite of the former, being extravertedness), I think we are misled. Most people have no clue why people act &quot;intraverted&quot;. &quot;Where you get your energy&quot; is really a poor way of saying &quot;where do you find authority and peerdom&quot;. Basically, if you lived with a bunch of goats or cavemen, you wouldn't have nearly the same meaningful interactions, or degree of meaning, as someone who lived in a more civilized society (not that I call modern industrial/digitized worlds &quot;civil&quot; by any stretch). You too would be intraverted if you lived with goats and cavemen (unless you really are on of them)!

The problem, in my mind, is that the size of the pool of actual people I can reliably interact with in a meaningful way has shrunk. Essentially, my &quot;J-ness&quot; (alongside my N&amp;T) is distorting my E-ness (and it should!). Given the right population, I'm sure I would be a flowering Extravert. Imagine a world of people fairly similar in intelligence to yourself, or even beyond...wouldn't you find that to be more worthy of peer-type interaction? I posit that all people are extraverts, some just have a harder time finding real people and real communities to join in interaction. Essentially, the world's lack of peers (and their refusal to grow to become my peers) has forced me into intraversion.

Intraverts still do basic interaction with others. You have to do tasks, etc. Even finding others who you can actually interact with requires some base level of initial communication. Intraverts may even interact with people they consider lower than peers (or even lower than students usually), and they may do so in some positive fashion. These intraverted people still don't have meaningful growth from direct interaction those that are lower than peers. (Perhaps, indirectly, interacting with lower-than-peers can be worthwhile...for example: teaching).

Intraverts remain in guard until they find peers or higher. Don't get me wrong. Introverts desperately want to interact with peers and mentors. Introverts look to themselves for emotional energy because there is nobody else to support them.

What is an extravert then?

An extravert is someone blinded in an experience machine. They do not recognize reality or the truth about the people around them. They lack cynicism. A child, naturally, should be extraverted (and there is nothing wrong with being extraverted as a child). But, as we see the world for what it really is...and people for what they really are...if we actually differentiate ourselves from them in a meaningful, in hopes of being better, we become separate and introverted. We become so separate that we can no longer interact with the outside in the same way. The chosen must walk in the outside world with armor. It is 'us' and 'them'. Introversion is the denial of equality between you and someone else (to some degree).

Essentially, extraverts are tolerant and introverts are intolerant. An &quot;average&quot; extravert is someone whose tolerance level is above 50% of the population around them. Introverts are below the 50% mark. Tolerance is saying &quot;[what you do and believe and what you are] is okay with me&quot;.

I don't believe others can help me pursue value more effectively.
* h0p3
* 20/162 Moo 5, Mooban Country Park          
* Huay Grabi, Muang, Chonburi, Thailand;                                                                                   
* Phone: 0805658058      
     
WORK EXPERIENCE

English and Conversation Teacher, ESL Instructor
3/2008 – Present

Anubonchonburi, Chonburi, Thailand

Taught English as a Second Language to 5th and 6th grade Thai students.
Developed curriculum and lessons fitting multiple specifications from Thai government organizations.
Maintained detailed records, and helped digitize an older records system. 
Organized events and helped plan activities for the school.

Strategic Communications Quality Analyst
9/2007 – 3/2008

Humana Health Care Plans, Louisville, KY

Analyzed and tested data, design and mechanics of multiple dynamic documents used by millions of people.
Engineered Quality processes.
Formed interdepartmental relations synergy through collaborative information tools and databases which promoted consensus and collective understanding of knowledge for uniform product development. 
Leveraged our team’s technology by migrating best-practice processes to other business areas in the company in addition to customized manufacturing of context specific data tools.

Medicare Billing Specialist
9/2006 – 8/2007

Humana Health Care Plans, Louisville, KY

Maintained detailed records of accounts, products, and member information. 
Retained membership and assisted members in making payments for past due balances through electronic and phone correspondence.
Used several databases and programs simultaneously to research and correct administrative and/or service problems.
Communicated trends and problems between Medicare, Humana, and the members; often worked one-on-one with members over a long period of time to solve complex problems.

English Teacher and Arts & Humanities Teacher
7/2005 – 8/2006

John Hardin High School, Elizabethtown, KY

Taught the subjects of English and Arts & Humanities, grades 9-12. 
Managed and evaluated students both individually and corporately, provided due rewards and disciplines, created incentive for students to put forth their maximum effort, and fashioned future course-plan structures fitting for what each student hoped to accomplish post-graduation.

Maintained detailed records, keeping in constant contact with parents/guardians of 90 students at a time.
Worked with multiple teachers and departments to develop course curriculum, prepared goals and direction for our school and departments, and formed action plans fit for the individual student’s needs.

ACADEMIC RECORD

Bachelor of Arts, Philosophy, Berea College
2005

Berea GPA: 3.31
National Honors Society Member
Two Presidential Academic Excellence Awards 
Dean's list at Berea and Elizabethtown Community College
TEFL and ESL training

ADDITIONAL SKILLS AND EXPERIENCE PROFILE

Piano Accompaniment and Piano Lessons
Website design, Forum moderation, Computer network administration
Counseling and Environmental work at Aldersgate and Loucon youth camps
Intern, Law office of Miller & Durham
''[1a]''

	Hursthouse incorrectly claims that the proverbial ‘lesser of two evils’, assuming those are the only possible choices which need be considered, is actually evil in some way [Criticism #1]. The preliminary mistake which leads to this false conclusion is her severance of ‘moral decision’ and ‘moral action’ [Criticism #2]. The connective argument is that if a moral decision does not entail a moral act, then it is possible to morally choose the ‘lesser of the two evils’, but consider the corresponding act to be morally wrong. I think she argues for both the claims I am criticizing through the course of several examples and arguments, each with their own fallacies. 

	She initiates these claims by pointing out the (supposed) possibility of the options in a resolvable dilemma as not necessarily being absolutely morally right or morally wrong with respect to the other option. 

<<<
The writers (frequently unconsciously) take the dilemma to be ‘either x is the morally right act to do here (without qualification) and y is the one that’s morally wrong or y is the morally right act (without qualification), etc.’ They simply overlook the third possibility of, for example, ‘Well, they are both pretty awful, but (supposing the dilemma is resolvable) x isn’t quite as a bad as y’.<<ref "1">>  
<<<

	Here she begins to carefully sever ‘decision’ from ‘act’, as x and y are spoken of as actions but not decisions. She goes on to suggest that both x and y are “awful,” as if we should understand both of them to be evil and immoral acts. In the case of this resolvable dilemma, which can be understood to mean there is a morally correct decision, x-act is somehow less morally wrong than y-act, and in contrast to the position she opposes, she is implying that x-act is not necessarily ‘right’ despite it being the best of the acts available. Crucially, she explains: 

<<<
Suppose [a morally right act] does not come off, well, that is a pity, but still, we say, [the virtuous agents] made the ‘morally right decision’, the ‘right moral decision’; good for them.<<ref "2'>>
<<<

	Here she claims that the intention/decision is good (we can all agree to that), the act, however, has failed. We must ask: what is the moral status of the failed action? If the action succeeded, Hursthouse has no problem calling it ‘morally right action’, but Hursthouse is not inclined to praise the ‘failed’ action. I suspect that Hursthouse is implying that with the same intentions, the ‘failed action’ is less morally right than (or morally wrong compared to) the ‘successful action’. I see this as one of three ways in which she attempts to sever to the decision from the act and show how the moral status of the decision does not demonstrate the moral status of the action.

	My problem with claiming ‘the decision was right while the act may not have been to the same degree’ boils down to how I see moral decision and moral action as being two sides of the same coin for which the agent is responsible. In the above case, why and how the act ‘did not come off’ seems to me an important issue. I believe that Hursthouse must argue that the reason the act didn’t come off wasn’t for any lacking of intention to perform at the highest quality/effort on the part of the virtuous agent. If she didn’t claim this, then we could argue that the agent isn’t truly virtuous because that agent had intended to put forth less than the proper effort. So, we must assume that in this case, the virtuous agent chose to perform the act with the correct amount of effort, but the circumstances were such that the act, unfortunately, didn’t succeed. Here she would correctly claim the decision is morally right.  I disagree, however, with the idea that the morally right decision doesn’t automatically entail the morally right act. I think there is ‘successful morally right action’ and ‘failed morally right action’, but Hursthouse does not seem to agree.

	Hursthouse does not flesh out what it means for an action to ‘fail’, but she should, because understanding our psychology is vital to the virtue ethicist. I think there is much to be said about the potential of an action and what actually occurs, particularly as it is involved in how we understand an agent’s responsibility to intention and action. While Hursthouse did not explicitly state it, we must argue that the virtuous person was wise enough to have considered the probability of an action succeeding, and yet still chose the option, despite the possibility of failing.

	Perhaps I am not a skilled baker, and I have a very high chance to fail a baking assignment. Perhaps virtue ethics may require that I make my best attempt at baking a cake in some instance, even though I know I am unlikely to succeed in actually arriving at a delicious cake. If I were virtuous (obviously hypothetical), I would virtuously attempt to bake a cake with my low-baking skill, putting forth every bit of effort required, and while the actual resulting cake will likely be a failure, I still performed the virtuous action of attempting to bake a cake as best I could. We can see the difference between excellence of a practice and moral virtue in this example. I can fail because I lack excellence in the practice of baking, but I would not fail in doing what was right, namely attempting to bake as best as I could. Differently, imagine my brother, a skilled chef, was put in the same circumstance and also happened to be virtuous (again, obviously hypothetical). Perhaps he would succeed in baking a cake where I failed; however, his action isn’t morally better than mine. It is only incidental that his high-baking skill (contrasted to my awful skill) will modify the circumstances such that his morally right action of attempting to bake a cake will succeed where my morally right action inevitably failed. Now, it is also possible that even a skilled chef may fail to bake a cake not of any fault of their own either, but simply because circumstances outside the chef’s control (e.g. the gas/electricity unexpectedly went off) dictated that the resulting cake would fail. Even here the attempt is what has moral worth, not the incidental success or failure of that attempt.

	As evident from Hursthouse’s example, perhaps there is a failure rate for at least some of the actions available to an agent; appropriate judgment seems to require that the agent weighs the probabilities of outcomes to each decision in order to understand which is most virtuous. If we can’t hold that the virtuous agent was required to weigh the probabilistic consequences of decisions, then the agent doesn’t seem to really have a meaningful and morally culpable causal link between his intention and the corresponding consequences in those circumstances which do not have guaranteed outcomes. 

	If an agent is faced with absolutely known outcomes for decisions, then there is a strong sense of moral responsibility derived from the causal link from the intention to its resulting consequences. If, however, a virtuous agent finds herself in a probabilistic scenario; and if moral wisdom doesn’t include knowledge of the success/failure rates of actions; and the agent therefore is not held responsible for learning, knowing, and consulting these probability calculations - then the agent can’t be responsible for even making proper decisions in these cases, as the decisions have no meaningful connection to possible results for the agent. 

	Surely we cannot hold people responsible for choosing that which they aren’t responsible for comprehending or considering in the first place. Thus, I think we must say that the virtuous agent is morally responsible to (and, in virtue of being virtuous, does in fact) possess some degree of knowledge about the failure/success rates of possible future actions. If the agent is held responsible for this knowledge, then we can show moral culpability to the sorts of actions (attempted actions) which have probabilistic outcomes (i.e. those which an agent can ‘fail’).

	Hursthouse must claim the virtuous agent understood the probability of consequences which would result from making the morally right decision. Oddly, it seems as if she holds the agent fully responsible for all the consequences of a decision in probabilistic circumstances with failure/success rates. But why should we think the consequences of probabilistic circumstances which result from this decision and attempted action are things for which the agent can be morally responsible? I believe they simply aren’t. I agree that the agent is responsible for the probability calculation, the decision, and the attempted action which is filled with potential to either succeed or fail, but not the resulting probabilistic success or failure of the action itself. 

	I do not see how we can hold the virtuous agent (who had chosen wisely and acted as virtuously as possible) somehow responsible for these consequence of the act failing. If a virtuous act fails, I blame the probabilistic circumstance - not the virtuous agent who had chosen and acted as well as possible. To require the virtuous agent to succeed in the act which inevitably failed due to no fault of the agent is tantamount to requiring the impossible. Hursthouse has artificially inflated an agent’s moral responsibility to include those things over which their will has no power. We cannot hold persons responsible for that which is outside their control, which includes circumstances which have the final say in whether or not an action will fail or succeed. Insofar as an action is within an agent’s control and power, she is responsible for it; but insofar as the circumstances have control and power over the success and failure of the action, the agent is not responsible, and, therefore, we cannot assess it as right or wrong on the part of the agent. 

	In probabilistic scenarios, I separate the actual results (circumstantial) from the potential-filled attempted action (within the agent’s realm of moral responsibility); and while I think Hursthouse must do that, I don’t think she has. I think Hursthouse has conflated the actual resulting consequences of a probabilistic circumstance with the causing action, which merely contains potential consequences. The former we cannot be responsible for; the latter we must be responsible for. Here you can see how Hursthouse incorrectly extends an agent’s moral responsibility to include something over which he has no power. It would make sense here for her to claim that a virtuous person could make a morally correct decision, while holding that the ‘failed’ action may not have been morally correct in the same way as the ‘successful’ action. If I held her position, I would also attempt to separate decision and action. As I believe we should only be interested in the probability of failure/success rates of actions insofar as they are required in making proper moral decisions and I do not conflate the actual consequences of probabilistic circumstances with my potential-filled actions, however, I see no separation between decision and action such that one can be morally right and the other be wrong.

Hursthouse goes on to describe the case of a man who has previously created an awful resolvable circumstance whereby he must choose to break his promise to one of two women and marry the other.<<ref "3">>  Hursthouse claims that even if the man “makes, ‘the morally right decision’….He merits not praise, but blame, for having created the circumstances.”<<ref "4">> Notice how Hursthouse seems to punish the man twice for his historical wrongdoing. Here Hursthouse doesn’t directly employ the ‘failed’ action fallacy, but instead a different one which she thinks allows her to separate decision from action such that the moral status of one is not conferred to the other. Crucial to this sub-argument is Hursthouse’s temporal scope; she sums the initial choices to promise marriage to both women together with the current resolvable dilemma. 

Hursthouse runs the risk of conflating the moral status of historical choices with the moral status of future choices in terms of being one single unit of moral experience with a single moral status. I think it is vital to assess moral experience within the smallest possible units of moral judgment. If we are forced to use a broad temporal scope and provide assessment on a range of choices over time as a single unit of moral experience then we fail to exhibit how any particular choice in that range is a morally relevant choice in itself. This doesn’t mean that previous moral obligations have no impact on future moral obligations; rather, each instance of choice should be assessed on its own. The only exception would be the appearance of simultaneous choices which entail each other, such as the case where the man is fulfilling his promise to one woman and simultaneously reneging his promise to another; as both of these entail each other by the very meanings of ‘promise’ and ‘marriage’, this instance can be construed as a single unit of moral experience or judgment.

It is possible that Hursthouse is tempted to claim the decision to renege is morally wrong in itself and that the simultaneous choice to renege and fulfill promises to two different women is wrong. And, if the man were considering reneging both promises, I would agree, but he is clearly looking to do what is right here, even if, as a consequence of choosing what is right, he ends up hurting another woman. There is a logically entailed relationship between these promises and the monogamous nature of marriage, as the two marital promises are mutually exclusive in both the choices available in the resolvable dilemma, so no matter which fulfillment option is taken, to fulfill one promise is to renege the other by logical consequence (if the man could break laws of logic, he would!). Virtue ethics is already equipped to answer this sort of question though -- the Thomistic principle of double effect handily addresses this (and I’m somewhat inclined to agree with it). 

Hursthouse already claims that the decision to fulfill one promise is morally right (although the action is not considered morally right). So despite any temptation one might have to label the decision to renege as wrong, if the man is intending to fulfill a promise and merely as a the logical consequence of fulfilling a promise happens to renege on a promise to another woman, he can still be said to be making the morally correct decision. If one does not employ the principle of double effect, I’m not sure it would be reasonable to claim that the man is making a morally right decision (as Hursthouse claims he does). So, as I am almost certain she is employing some variant of the principle of double effect, we need not worry that she would claim that the man is simultaneously making the morally right decision and also the morally wrong decision; clearly Hursthouse believes the man is strictly making the morally right decision. 

I believe Hursthouse has conflated some number of independent units of moral experience into a single large one. In this example, the man’s choice to make multiple marital promises should be assessed independently of his future choice to fulfill one of these promises. My guess is that she has mistakenly carried the assessment of the man’s previous choice to promise both women (particularly the morally wrong one) over to his future choice, automatically deeming the entire set as wrong when (in reality) not all the choice-members of that (falsely conflated) set were actually wrong. 

I will agree to the fact that the man did something morally wrong when he made his promise to the second woman, but I cannot agree he is doing something wrong when he correctly fulfills one promise and logically reneges his other with these women. Hursthouse seems to think that she can separate moral choice from moral action in this instance because of how she employs a varying temporal scope. With a narrow temporal scope she points out that the man has made a morally right decision in fulfilling his promise, but then widens her scope to include the previous morally wrong decision of promising the second woman in order to say that the action in the resolvable dilemma, which is derived from the morally right choice, is somehow morally wrong because of a past moral error. This is a mistake – she must employ the same temporal scope in assessing the decision and the action. If she properly employed the temporal scope to validly explicate the moral units of experience in her example, she would see that morally correct decision does in fact cause a morally correct act. The morally wrong action the man made happened in the past, and while his past choices generated his resolvable circumstance, that past moral error does not infect the future resolvable dilemma’s morally right decision to cause a morally wrong action.

Please note that - given how Hursthouse sets up the resolvable dilemma - the man only has two options. I think this is important in the discussion of the ‘lesser of two evils’ because we must realize that this unit of moral experience/judgment is a severely limited circumstance, and that has everything to do with his moral responsibility and the appropriate territory for an ethics theory. 

If this man were to ask a virtuous agent what to do and how to be and so on, even the virtuous agent is confined to only the options of the dilemma when providing the man an answer. This is extremely important because while we want to claim that the man is responsible for the eventual dilemma coming about, he cannot be held responsible in the particular unit of moral experience for acting in a ‘good’ or ‘right’ way that isn’t possible for him to perform. 

We can’t on one hand say the dilemma has only ‘wrong’ actions and still hold him responsible for doing what is right. If there are only ‘wrong actions’ here (as Hursthouse claims), a ‘right’ action is definitionally (from the constraints of the dilemma) impossible to achieve – and for this, we cannot hold the man responsible for not performing a right action. In this sense, for Hursthouse to be willing to claim that the man does a ‘right’ action, he must do something that isn’t possible for him to do (e.g. not one of the dilemmic options: perhaps making a time machine, going back in time, and stopping himself from making the initial mistake, etc). I believe we cannot hold the man responsible for the impossible.

When we judge this unit of moral experience, it must be done specifically within the confines of the possible choices, as this would actually maintain the man’s moral culpability. To expect more than what is possible, as Hursthouse clearly does, is to extend his moral responsibility beyond the realm of possibility within the dilemma. I don’t think the realm of impossibility (even within a resolvable dilemma such as this) is something for which one can be morally culpable, and thus it is outside the realm of both moral guidance and assessment altogether. Even the virtuous agent’s choice/action is strictly within the realm of possibility and remains virtuous because the moral standard (in this case, the virtuous person himself) cannot do anything but what is possible for him to do (Hursthouse will disagree, but she shouldn’t). The unvirtuous person, likewise, must be held to a standard which is possible to achieve in order to preserve both moral responsibility, morality, and any domain whatsoever for normative ethics.

If we assume that if a decision has a moral status, the resulting action will also have a moral status (not necessarily the same one, even though I think they will); and, as Hursthouse claims, the man makes a morally right decision in the resolvable dilemma; then we know for a fact that the action will also have a moral status. If we deny that a man can be responsible for doing what is impossible, and thus explain right action and wrong action will both be explained only in terms of what it is possible for him to do, then it becomes very reasonable to claim that the morally right decision will result in the morally right action (otherwise, some ‘morally wrong decision’ would be the antecedent to the ‘morally right decision’). It does not seem that decision can be separated from action, and it does not seem as though the ‘lesser of two evils’ is really evil at all but, rather, is morally right.

Hursthouse continues her argument:

<<<
[Even] when the agent is faced with a resolvable moral dilemma through no fault of her own, the lesser of the two great evils that she decides to opt for will still not be a morally right or good act, not one that leaves her with those ‘circumstances [so] requisite to happiness’, namely ‘inward peace of mind, consciousness of integrity, [and] a satisfactory review of [her] own conduct’….On the contrary, it will, or should, leave her with some sort of ‘remainder’.<<ref "5">> 
<<<

This is a different approach to severing moral decision from moral action. The idea is that the virtuous agent opts for the right decision, but because the circumstances are especially sad (and arguably do not promote //eudaimonia//) the agent is therefore not committing a morally right act or ‘good act’. Here she introduces ‘remainder’ to show a difference between the morally wrong act of the vicious person (who would lack remainder) and the (so-called) morally wrong act of the virtuous person, particularly because she feels the virtuous person made the morally right decision (in the right, characteristic way, etc.) where the vicious did not. I see two problems in this example. Let me first address the remainder.

Oddly, she seems to think that actions which should also include a ‘remainder’ are mutually exclusive from the morally right act. I do not see why this is necessary. To posit a remainder in a ‘lesser of two evils’ dilemma is to posit not decision/act x and y, but rather x1 and x2, and y1 and y2, whereby x1 and y1 are without remainder (obviously vicious options) and x2 and y2 are with remainder. The dilemma for the virtuous agent is not whether or not she will have a remainder (as that is guaranteed) but which decision/action, x2 or y2, is morally correct, including remainder. Remainders, therefore, don’t have to be mutually exclusive from morally right action, as they are directly a part of what makes the action right and separate from what the vicious person (without remainder) might choose. Remainder is not the regret of virtuous choice and action, but rather a very strong sense of regret or sorrow for the state of circumstances over which the agent has no control. 

An agent’s psyche will be disfigured with remainder, constantly reminding her of the terrible aspect of the world which she had encountered. She is not in a position to assess what she chose and did as ‘wrong’, even if she doesn’t like the results compared to what might be possible in other circumstances – she is, however, in a position to assess the state of the world in which she lived, and that will result in great sadness, despite her virtue. I see no reason why the state of the world within a terrible resolvable dilemma, which a virtuous agent mourns deeply, should overwrite an agent’s action as being ‘wrong’. 

Besides the differentiation of the virtuous from the vicious, part of the justification for the ‘remainder’ is that the virtuous agent comes out of the ‘lesser of the evils’ dilemma extremely unhappy in such a way that it detracts from the agent’s pursuit of eudaimonia, the ‘good life’. Worth noting is that her distinction between ‘right’ and ‘good’ begins here, although she doesn’t expound on it until later. Why should we think that the virtuous decision/act should make us eudaimonically ‘happy’ outside of our contentment with having chosen/done/been as we ought for the sake of Virtue? Hursthouse is claiming that the ‘right’ action must promote eudaimonia. Let us not underestimate the magnitude of Hursthouse’s claim here because it is the very crux of her virtue ethics theory. Essentially, if an act should make us eudaimonically happy outside of having done what is right according to virtue, then it seems as if eudaimonia, rather than virtue alone (as defined by the virtuous person), is the end objective standard by which we can understand whether or not an action is right or wrong. It seems as if Hursthouse is claiming that a virtuous agent has made the correct moral decision; but because the consequences of the action make the virtuous agent eudaimonically unhappy (outside of being content with having chosen the right moral decision) the resulting action is not ‘good’ (although, oddly, somehow not ‘bad’) and therefore not ‘right’. 

Hursthouse wants to claim that ‘right action’ is a defining ingredient to ‘good action’. It seems here, in her initial explanation of the divide between ‘right’ and ‘good’, that what makes an action ‘wrong’ is that it wasn’t ‘good’. I can see how ‘wrong action’ makes for ‘failed pursuit of eudaimonia’. I do not see how ‘failed pursuit of eudaimonia’ makes for ‘wrong action’, though.  The pursuit of eudaimonia can fail for non-moral reasons and due to things which are outside the moral responsibility of agent. It seems as if ‘wrong’ should be defined by exclusively what the virtuous agent actually does, regardless of its implications to eudaimonia.

Thus, given Hursthouse’s passage above, I think it is inappropriate to judge the decision as morally right on the standard of virtue, but the action as morally wrong on the standard of eudaimonia. She needs to stick with one ethical standard of measurement or the other. In order to keep this a discussion about Virtue ethics (and  not Eudaimonic ethics), Hursthouse needs to claim that virtue ethics is the sole standard by which one judges the moral worth of decisions and actions. This, however, would require her to say that the moral status of decision entails the moral status of action. If this were the case, she would say that the virtuous decision is also the virtuous action, even in the case of the ‘lesser of two evils’.

These arguments should be a strong rebuttal to her claim:

<<<
The question, ‘Which is the morally right decision, to do x or to do y?’, is confounded with the very different question, ‘Which is the morally right action (with no qualification about remainder, the good action about which the agent need feel no regret), x or y?’ If there are no irresolvable dilemmas, the first question does not pose a false dilemma, but even if every moral dilemma is resolvable, the second certainly does, for the correct answer may well be ‘Neither’.<<ref "6">>
<<<

Clearly, I am rebutting the very notion that decision and action have independent moral statuses. Even within ‘lesser of two evils’ resolvable dilemmas, it is invalid to suggest that it is possible to have a morally correct decision but simultaneously impossible to have a morally correct action (this brings us back to the moral responsibility issue I’ve raised before). Any circumstance in which you can choose virtuously, you can subsequently act virtuously. 

Decision and action are strongly, causally entwined such that both maintain the same moral status, even if it is a decision/action which requires that the virtuous agent possess a remainder, regretting the circumstance but not the decision/action, and perhaps detracting from the agents path to eudaimonia, which I believe must be secondary to virtue if we are to maintain a virtue ethics theory. 

'' [1b]''

Let me preface this section by saying that I think the two major critiques I’ve offered are related, and I think rebuttals to one have serious implications for the other. I will offer some of the ways I think Hursthouse might rebut my second major criticism, namely the severing of action and decision.

Hursthouse may rebut part of my argument when she says:

<<<
And since one cannot decide to feel regret, and feeling regret is not an act in the required sense, [the vast majority of those who ask, ‘Which is the right act, x or y?’] thereby cut themselves off from thinking of bringing in that sort of ‘sort of remainder’.<<ref "7">>  
<<<
<<<
We seem driven to saying that when the dilemma is resolvable (and the agent is in it through no fault of her own), the only feasible emotional remainder is that the agent deeply regret the circumstances that made doing x necessary” is different from “the agent deeply regrets the circumstances that made her doing x necessary.<<ref "8">>
<<<

If remainder is not really an ‘act’ or ‘choice’, and remainder is a required result in ‘lesser of two evils’ resolvable dilemmas, she might be able to construe ‘action’ alone (without remainder) as not being ‘good enough’ and somehow wrong while the decision is right. 

Hursthouse might dogmatically and axiomatically claim that actions in themselves, outside of the contextual, possibility, and moral responsibility objections I’ve raised, are strictly right or wrong and strictly independent of choice. I can say I’m slightly tempted by this argument. It seems natural to decry the action of a ‘lesser of two evils” as being not as good as throwing my son a birthday party or having dinner with my wife. Again, this assessment must be decontextualized and ignore (what I consider to be important) aspects of moral responsibility. 

Another interesting, possible rebuttal stems from this quote:

<<<
Consider again the distinctly non-virtuous man who has induced two women to bear a child of his by convincing each that he intends to marry her, under the assumption that it would be worse to abandon A than B[…]The virtue ethics account refuses to assure him that in marrying A he would be doing ‘a morally right act—a good deed’. He will not, in marrying A, be ‘doing what a virtuous agent would, characteristically, do in the circumstances’, because no virtuous agent would have got himself into these circumstances in the first place.<<ref "9">>
<<<

If we discount the possibility of a virtuous person ever actually finding themselves in a ‘lesser of two evils’ resolvable dilemma, and essentially we claim that truly virtuous agents (from the beginning of their moral lives, continuing on) are// cosmically destined// to never be in a circumstance which might result in ‘wrong’ action (with ‘right’ decision), then we could avoid a contradiction in saying that a virtuous agent can ‘do what is wrong’ but still maintain that action and decision can be severed in cases of the unvirtuous. This, though, likely has powerful implications for anyone who has ever been unvirtuous. Of course, the virtuous agent could not give anything like meaningful ethical advice to the unvirtuous man, but that might be acceptable to Hursthouse. Here it makes slightly more sense to be able to say that, with respect to the virtuous person, right decision and action are the same thing, and there is only separation in the case of the unvirtuous. (This would, however, definitely contradict her tragic dilemmas.)
  
Hursthouse does claim the following:

<<<
[A] resolvable dilemma which arises in circumstances in which a virtuous agent might well find herself will be resolvable by a morally right decision, and what is done, such as ‘x, after much painful thought, feeling deep regret, and doing such-and-such by way of restitution’ will be assessed as morally right. Resolvable dilemmas which no virtuous agent would ever be faced with will also be resolvable by a morally right decision, but what is done will not be assessed as morally right.<<ref "10">>
<<<

This differs with any cosmic destiny argument because the virtuous agent does face supposed ‘lesser of two evils’ resolvable dilemmas. We might say that the virtuous agent simply never faces the same type of ‘lesser of two evils’ dilemmas as the unvirtuous person. This passage protects the virtuous agent from ever moving from ‘right decision’ to ‘wrong action’ in resolvable dilemmas. The distinction here is that only the unvirtuous can have ‘right decision’ lead to ‘wrong action’ in resolvable dilemmas. In this, a rightness-preserving relationship between decision and action can only belong to the virtuous.

The passage seems to indicate that ‘the way’ in which the virtuous person considers and responds to a dilemma is different from how the non-virtuous person is capable of considering and responding. Perhaps, for example, the virtuous agent’s characteristic approach is simply impossible to achieve for the unvirtuous in any particular dilemma like this. If Hursthouse is willing to throw my conception of moral responsibility out the window, and truly expects the unvirtuous agent to perform in such a way that is impossible (the exact way in which the virtuous agent does), then her theory has merit.

Perhaps the above passage is definitional in nature. In the same way that some argue that whatever God does is definitionally right (regardless of what He does), we can argue that the virtuous agent carries the same rightness-making torch. On whatever path virtuous persons may find themselves, they are automatically on the right path by definition such that even in ‘lesser of two evils’ resolvable dilemmas, the virtuous path simply cannot be wrong. This argument might amount to expanding temporal scope such that the smallest unit of moral experience would actually encompass an entire lifetime, and in this way virtuous agent can only do what is right, and the unvirtuous, despite some morally right decisions, is performing wrong action.

While I can’t find a citation for this rebuttal, if Hursthouse were to admit compatibilism (her teacher certainly did) or deny my libertarian notion of moral responsibility, it would sweep away my argument. It would be a forceful argument to claim that moral responsible has nothing to do with what is possible. In my view, if she were to admit this, it would be just as reasonable to sever decision and action, as we need no strong causal, morally responsible link between these two things. 

She might argue that an action is both wrong and right. Take the unvirtuous man with marital promises to two woman as an example - perhaps he would be ‘callous to abandon’<<ref "11">>  either one, but ‘virtuous’ to some degree in fulfilling his promise to one. I suppose degrees of virtue could make sense of this. We’d say he’s 40% right or something? I’m not convinced by such an account, but it might allow Hursthouse to separate moral decision from moral action and for even the ‘lesser of two evils’ to really be evil to some degree.

''[2a]''

According to Hursthouse, a tragic dilemma is a “situation in which the agent’s moral choice lies between x and y and there are no moral grounds for favouring doing x over doing y”<<ref "12">>  and in which “it is impossible to emerge with clean hands”<<ref "13">>  (or virtuously die<<ref "14">>) because both x and y are neither ‘acting well’ nor ‘acting badly’<<ref "15">>  but instead both x and y are characteristically vicious actions in themselves and contradictory to the nature of the virtuous person, resulting in the virtuous agent’s life being left forever ‘marred’ after performing either x or y.

''[Substantial Aspect #1]''

An extremely interesting aspect of her theory is the notion that two different virtuous agents may choose to act differently in a tragic dilemma. This is a result of tragic dilemmas being a type of irresolvable dilemma. Nonetheless, we must ask what ‘a’ (not ‘the’) virtuous agent would do in a tragic dilemma. Hursthouse explains:

<<<
Virtuous agents themselves recognize the dilemma as irresolvable, as one in which, even given their particular standards or ideals or whatever, there is no moral ground for favouring one action rather the other […Both virtuous agents] thought about [the irresolvable dilemma] carefully, conscientiously, and wisely, arriving, after much agonized thought, at the conclusion that neither decision here was the correct one.<<ref "16">>
<<<
 
Importantly, all virtuous agents recognize that there is no one correct decision. What this means is that virtuous agents are limited (Hursthouse says ‘no moral guidance’, but depending on the type of tragic irresolvable dilemma, she may be slightly overstating) in their ability to provide moral guidance in tragic dilemmas. This is different from resolvable dilemmas in which all virtuous agents actually can (and do) provide (the same) moral guidance.

This is likely one of the ‘sticking points’ for Hursthouse’s audience. She seems aware of how awkward it might seem to others to say that virtuous agents can actually perform different acts under the exact same circumstances. This is not usually how we think of the virtuous agent. I, however, think she’s right! 

While Hursthouse may find my defense/explanation of her claim too mechanistic (perhaps too close to theoretical codification to her liking), I believe it more formally captures why this substantial claim of hers is reasonable. I wish to do her claim justice, and if we might disagree on small aspects of it, I’ll explain where and why. Here is how I have tried to make sense of her claim within virtue theory.

Suppose I create an abstraction of a conversation (seeking moral guidance) with a virtuous person as the function P(Q), whereby I can ask (‘input’) a virtuous agent what I should do given an exact specification of my circumstances (or if we want to say the virtuous agent is ‘in my shoes’, that’s fine as well) such that Q-circumstance is the input to virtuous agent P in function P(Q). The virtuous agent can provide me, after characteristic contemplation and application of her moral wisdom, what single option a virtuous person would choose or, as in the case of irresolvable dilemmas, from what range of equally valued options a virtuous person must choose in my particular circumstance.

Q must include all relevant truths required by the virtuous person to make a virtuous decision, and among these circumstantial facts are the possible actions available in this particular unit of moral experience. When I write out examples of Q, I am only going to represent the list of possible decision/actions (we need not separate them as Hursthouse thinks) -- we’re simply going to assume the other facts which describe the circumstance are also contained in that list, but I won’t be writing them all out because they aren’t necessary to represent for the rest of the discussion. So Q = [a1, a2, a3, a4, a5] means that within a particular world or circumstance Q, I have 5 mutually exclusive options/actions available (presumably, 5 is a severe underestimation in most cases).

If we input Q into function P(Q), and P([a1, a2, a3, a4, a5]) = a2, where a2 is the resulting output of the input Q into that function P, then we are saying that if I asked a virtuous agent (P) what one ought to do in a given circumstance (Q), which we both understand to have only 5 possible options, [a1, a2, a3, a4, a5], that the agent is telling me to do a2 because it is the virtuous option. It is the case that a2 is the morally right option in this particular world Q. Note that I could have this particular conversation with any number of virtuous agents, and a2 would always be the answer I receive, and, it would also be the option that any virtuous agent would choose/be/act in Q.

What it means to be in an irresolvable moral dilemma is to have something more complex than an atomic answer like a2; instead, a virtuous agent’s answer must be a range of options which the virtuous agent believes to be equally valued given world Q. When this happens, the virtuous function/agent can provide no moral grounds to choose between members of the dilemmic set. So, P([a1, a2, a3, a4, a5]) = [a2, a3] is the equivalent of the virtuous agent coming to realize (and expressing to me) that given world Q with options [a1, a2, a3, a4, a5], there is an irresolvable dilemma between a2 and a3. Any selection from the dilemmic set [a2, a3] is morally ‘better’ (I prefer ‘right’, but because the word is controversial in Hursthouse’s theory, I’ll use the weaker word ‘better’ here) compared to the other options in Q, namely [a1, a4, a5]. However, a2 with respect to a3 (and vice versa) is //amoral//; [a2, a3] forms the dilemma, and its members are equally valued by the virtuous agent.  There is no moral guidance as to whether one should choose either a2 or a3, but there is still moral guidance when the virtuous agent tells me I should either choose a2 or a3 //instead //of a1, a4, or a5.

The dilemmic set [a2, a3] is therefore morally right with respect to Q,[a1, a2, a3, a4, a5], but the members of [a2, a3] are amoral with respect to each other. We know this because if we ask the virtuous agent, after she has told us that we ought to perform either a2 or a3 from Q, which we should do - a2 or a3 - she cannot provide a different answer. This is equivalent to removing [a1, a4, a5] from Q, such that Q’ = [a2, a3], resulting in P([a2, a3]) = [a2, a3]. This equation describes us asking the virtuous agent whether to do a2 or a3 given our circumstance Q’ (a reduced and hypothetical form of Q) and the virtuous agent is saying she doesn’t know which one to choose. To say a moral function provides no answer (or no different answer than the input), or to say that the virtuous person has no moral grounds on which to choose either a2 or a3 in Q’, is the same thing as saying this is an amoral question. 

Now, clearly, the virtuous agent’s narrowing down of [a1, a2, a3, a4, a5] to either an atomic (a2) or a dilemmic set ([a2, a3]) shows that virtue ethics has something to say about world Q, and thus, in this respect, it is real question in the realm of morality. But, if one receives a dilemmic set answer from a virtuous agent, to go on and ask a second question, namely should we choose a2 or a3 from dilemmic set [a2, a3], we would receive either the same answer, [a2, a3], or a simple ‘I do not know which one to choose’ from the virtuous agent, showing this is an amoral question, one in which virtue ethics can offer no moral guidance. 

So, there is moral guidance and moral assessment in P([a1, a2, a3, a4, a5])=[a2, a3]; but there is no moral guidance (although there is indirect moral assessment) when we ask our second question, inputting Q’, P([a2, a3]) = [a2, a3]. The second question is amoral, but since the dilemmic set has been selected by the virtuous agent from a larger set of options in question one, namely Q, and our second is a reduced, hypothetical version of Q, namely Q’; we can say that choosing either a2 or a3 (and not a1, a4, or a5) will be the virtuous thing to do, we just can’t say there are any moral reasons to choose a2 with respect to a3, or vice versa. Here we can awkwardly (but rightly) claim that the secondary amoral question has no action guidance, but in light of the moral guidance that narrowed Q to a dilemmic set in the first question, there is action assessment (something Hursthouse should agree to).

We should also point out that while the word ‘dilemma’ suggests only two equal options, we can account for more than 2 equal options in this approach (e.g. P([a1, a2, a3, a4, a5])=[a1, a3, a4]).

Now, we might ask what it means if we weren’t reducing Q in the form of a second moral guidance question (Q’) and, in fact, our only options in an actual Q were truly dilemmic. E.g. P([a1, a2, a3] = [a1, a2, a3]. This, then, definitionally, is an amoral question. I’m not positing such a thing actually exists, but we can account for it. Similarly, we need not believe that irresolvable dilemmas actually exist (and I personally think a truly irresolvable dilemma, tragic or pleasant, is extraordinarily difficult to construct), such that a virtuous function would ever tell us that a circumstance had more than one right answer; but this explanation can account for them if they do exist. 

I personally don’t believe there actually exists any such class of Q which is innately amoral (where the options in an actual Q are the same as the output of P) because I ideally think that an initial libertarian choice automatically entails a moral question (that is the point of freewill). I suggest that innately amoral dilemmas have no action guidance or assessment at all (unlike the secondary class derived from astarting moral question). Even if I’m right, this will not contradict the possibility of amoral questions being asked within the dilemmic set which has been selected from a larger body of options because the selection of the dilemmic set from the larger initial set in Q is itself the moral choice.

Hursthouse may disagree with my perspective here, though. She may believe her example irresolvable dilemmas to be this sort of innately dilemmic Q’s, but somehow not actually amoral. I’m not sure how we can talk about these as moral questions, if that is the case. Unfortunately, it appears as though Hursthouse could be saying in her tragic irresolvable dilemmas argument that virtuous agents would label what I deem innately amoral dilemmas as moral dilemmas such that P(Q) is not the real definition of whether or not a question is moral or amoral. Even though there is no moral choice to make here, she might be tempted to say it is still a moral question. Thus, we may differ on whether or not it is reasonable to think that there is moral assessment outside of what is possible – particularly that in tragic dilemmas, what is ‘right’ is strictly impossible, and I’m unwilling to label the impossible as being ‘moral’ or something for which we can be morally responsible. I cannot her defend her there (if she would make that argument), but I can defend the possibility of two virtuous agents selecting different options.

For example, I might ask a virtuous person whether or not I should buy a car from a particular car dealer’s lot containing several of the exact same vehicles but in different colors. Perhaps the virtuous agent will tell me I should buy a car from that lot, but also tells me the color doesn’t matter. Even when I ask a follow-up question, ‘which color car should I choose?’ the virtuous agent has absolutely no guidance to provide me (other than that I should buy a car from this lot). What my virtuous guide is telling me is that if two virtuous agents were in this situation, one might buy a red car, and the other a blue car, and both would have done what is morally right. So, the choosing of the color of the car is amoral; the buying of a car from that lot, however, is morally assessable. Note that in buying either the red or the blue car, I’m still performing a moral act with respect to the question, ‘Should I buy a car from this lot?’, but, simultaneously, I am performing the amoral act of selecting the color. The moral and secondary amoral experiences are simultaneous, such that, while the overall question is morally relevant (as I am morally responsible to choose from that range, and ultimately whether or not I buy a car at all), there is a hidden, secondary amoral question resulting as a dilemmic set from any virtuous person’s answer to my first question, and this sort of ‘choice’ is one in which a moral theory has no dominion.

This seems to match very closely (with some differences regarding ‘right’ and ‘good’ which I will respond to later) the conclusions which Hursthouse will reach regarding how and why it is the case that virtuous agents can and will choose different options in an irresolvable dilemma, including tragic dilemmas. Importantly, as Hursthouse points out, the virtuous agents do recognize that this is an irresolvable dilemma – that is, they know the output to P(Q) is a range.  Given my understanding, then, I have no problem saying that two virtuous people take different options in a truly irresolvable dilemma. Frankly, the virtuous agents could simply flip a coin as to which particular option they choose from the dilemmic set, as it is an amoral question (this does not mean they took lightly the deliberation which led them to understand this to be an irresolvable dilemma - far from it). Within the confines of the dilemmic set, virtue (or any approach as far as I can see) as a theory provides no reason to choose either member over the other. (I think it is worth noting that this approach might also be applicable for many variants of deontology and utility such that they may fair no worse than virtue ethics in how they handle ‘irresolvable dilemmas’.)  

''[Substantial Aspect #2]''

Hursthouse differentiates ‘good’ from ‘right’. This may seem obvious to some, but, frankly, I don’t think it is so obvious at all. There are tons of implications to this distinction, and they are very prominent within Hursthouse’s explanation of tragic dilemmas. I need to carefully show what she means in this distinction because my epicentral criticism is founded in my disagreement with her on this issue (so please be patient).

In the discussion of tragic dilemmas and how two virtuous agents can choose different options, Hursthouse unfolds her grander argument for the distinction between ‘good’ and ‘right’. She says of virtuous agents in tragic dilemmas:

<<<
But here it seems to be quite inappropriate to say that each acts well, mirroring the fact (I take it to be a fact) that it is quite inappropriate to say, with respect to tragic irresolvable dilemmas, that both agents do what is right. If anything, the temptation is to say that both do what is wrong. So it looks as though I am going to be forced to say that both agents act badly.<<ref "17">> 
<<<

She defends the virtuous agent’s manner of acting (saving the argument from a possible contradiction) by saying:

<<<
The charitable, honest, just agent, even when faced with a tragic dilemma, does not act callously, dishonestly, unjustly, that is ‘as (in the manner) the callous, dishonest, unjust agent does’. She acts with immense regret and pain instead of indifferently or gladly, as the callous or dishonest or unjust one does. So we are not forced to say that the virtuous agents faced with tragic dilemmas act badly. They don’t; it is the vicious who act badly.<<ref "18">>
<<<

Thus, we can say that the virtuous agent within a tragic dilemma acted neither ‘well’ nor ‘badly’. These words are helping us identify Hursthouse’s conception of ‘goodness’ (‘well’ = ‘good’) as distinct from ‘rightness’. She explains that the virtuous agent does what is ‘wrong’ in tragic dilemmas, and are thus said to have not acted ‘well’. The virtuous agent’s saving grace, however, is that she is nothing like the vicious, as evidenced by an overpowering sense of regret and anguish (remainder). The virtuous agent takes an extreme displeasure (unlike the vicious) in performing a ‘wrong act’, truly against the agent’s virtuous nature and character; and thus, Hursthouse explains, while they are doing what is ‘morally wrong’ they are not ‘acting badly’. So, the virtuous way in which a virtuous agent acted defines the act as not being ‘bad’, but because she didn’t ‘act well’ her act is ‘wrong’. I am unsure of the status of virtue in this section. It seems as if virtue defines ‘bad action’ and partially ‘morally right action’, not eudaimonia; but then eudaimonia mostly defines ‘good action’ and ‘morally wrong action’, not virtue. 

The virtuous agent emerges from a tragic dilemma as “having done a terrible thing, the very sort of thing that the callous, dishonest, unjust, or in general vicious agent would characteristically do.…hence it will not be possible to say that she has acted well”.  She didn’t act badly, but she didn’t act well. The result is having her life ‘marred’. (Quite a word!) A marred life cannot be recovered. Hursthouse terms it a tragic dilemma because even the virtuous agent is forced to do something which is morally wrong and fails to ‘act well’ (even if they do not ‘act badly’). So, her new definition of a right action looks like:

<<<
An action is right iff it is what a virtuous agent would, characteristically, do in the circumstances, except for tragic dilemmas, in which a decision is right iff it is what such an agent would decide, but the action decided upon may be too terrible to be called ‘right’ or ‘good’.<<ref "20">>
<<<

The marred life is a ‘good life’ which has been ruined due to a tragic dilemma. Again, ‘good act’ is synonymous with ‘acting well’ just as ‘good life’ is synonymous with having ‘lived well’. One might say the remainder of a tragic dilemma is a forever marred life. 

Note that in normal circumstances, pleasant resolvable dilemmas, and pleasant irresolvable dilemmas, the virtuous agent makes ‘morally right decisions’ and performs ‘morally right actions’ and can also be understood to have ‘acted well’. In ‘lesser of two evils’ resolvable dilemmas the virtuous agent makes ‘morally right decisions’ and performs ‘morally right actions’ but may not necessarily be understood to have ‘acted well’ although certainly not ‘badly’ (the good/bad question wasn’t strongly answered for this case). In tragic irresolvable dilemmas, the virtuous agent makes ‘morally right decisions’, but is said to have performed ‘morally wrong actions’, and understood to have neither ‘acted well’ nor ‘acted badly’ and instead to have had her life ‘marred’. 

So, a virtuous person always makes the ‘morally right decision’, but doesn’t necessarily perform the ‘morally right action’. When a virtuous agent is not performing a ‘morally right action’, we see she isn’t ‘acting well’ and that her life is ‘marred’.
 
Hursthouse continues in her argument:

<<<
’good action’ is not merely a surrogate for ‘right action’, nor is it simply determined by ‘action of the virtuous agent’. Virtue ethics does not hold that actions are good, bad, or indifferent, as some people hold that actions are right, wrong, or permissible; nor does it call what the virtuous agent does (for the most part) ‘good action’ for want of any other phrase. ‘Good action’ is so called advisedly, and although it is conceptually linked to morally correct (right) decision and to ‘action of the virtuous agent’, it is also conceptually linked to ‘good life’ and eudaimonia.<<ref "21">>
<<<

This is a vital passage in her explanation of ‘right’ and ‘good’, and ‘wrong’ and ‘bad’. ‘Good action’ then must be understood in terms of a virtuous agent performing not only both ‘morally right decision’ and ‘morally right action’, but also in terms of how the action (not the decision) promotes the ‘good life’ and eudaimonia. Clearly, ‘right’ is different from ‘good’ because ‘right’ does not describe the full meaning of ‘good’ to Hursthouse. The ‘rightness’ of an action is only one ingredient to the ‘goodness’ of an action. The missing ingredient to the ‘goodness’ of an action is its eudaimonic preserving and promoting properties. 

Insofar as the virtuous agent has effectively pursued and maintained the ‘good life’, she can be said to have not encountered tragic dilemmas (a result of ‘moral luck’), to have exclusively ‘acted well’ or performed ‘good actions’ in her life, and as a part of that eudaimonic life equation, she used her virtuous character to make ‘morally correct decisions’ and perform ‘morally right acts’. 

Beyond issues of what it means for Hursthouse to distinguish ‘morally right decision’ from ‘morally right action’, we can see another power at work in her theory of ethics. It seems as if the virtuous agent isn’t just pursuing what is ‘right’, but much more - particularly what is ‘good’. Hursthouse is explaining that ‘right’ isn’t necessarily ‘good’ enough. This has several ramifications to virtue theory. She goes on to explain what it means to be a virtuous agent given her conception of ‘good’ and ‘right’:

<<<
What constitutes the (true) good of others, and when life is and is not a good, are amongst the things that the virtuous person knows and can recognize, but they are so not because she recognizes them but because of facts about human nature.<<ref "22">>
<<<

So, the virtuous agent has the knowledge of what makes a ‘good life’. The virtuous person recognizes ‘good’ and realizes that this is separate from ‘right’. The virtuous person does ‘right’ in the pursuit of ‘good’. 

Given her distinction, she also goes on to disown the notion that “character has primacy over action”<<ref 23">>  within virtue ethics insofar as tragic dilemmas are concerned, or more specifically, insofar as the ‘right’ is not the ‘good’. As Hursthouse sees it: 

<<<
No virtue ethics inspired by Aristotle is committed to a reductive definition of the concepts of good and evil in terms of that of the virtuous agent, only to maintaining a close connection between them.<<ref "24">>
<<<

This is a powerful statement, in my view. She is saying that the ‘good’ in Virtue ethics is not exclusively defined by the ‘virtuous agent’ or the ‘virtues’ themselves.

''[Epicentral Criticism]''

As in the previous question, I have a substantial problem with Hursthouse’s distinction between ‘good’ and ‘right’ as being different moral standards by which we can assess an agent’s actions such that the moral status of actions are severed from the status of decisions. The root problem of Hursthouse’s theory is that she applies two different standards of ethics, eudaimonia and the virtuous person. 

It does seem that Hursthouse will claim that ‘morally right decision’ (and moral guidance) is entirely defined by the virtuous person. But, when we get to ‘action’, a mixed set of standards are applied. Because of how she negotiates action assessment in a multitude of terms - ‘good’, bad’, ‘wrong’, and ‘right - we can see that the ‘eudaimonic persons’ are ‘virtuous persons’, but not all ‘virtuous persons’ are ‘eudaimonic persons’. Where the latter occurs, she wishes to relabel ‘virtuous’ as ‘marred’ and, in my eyes, ‘unvirtuous’ (because they do what is morally wrong!).

In the tragic dilemma, the virtuous person is held to the standard of virtue by not having performed ‘bad action’ (oddly, this is a eudaimonic term) because they performed the act in a virtuous manner. The virtuous person is then held to the standard of eudaimonia by not having performed a ‘good action’ because the action is not promoting the ‘good life’. Why should virtue be the standard for ‘bad action’ but not ‘good action’?  Hursthouse denies the natural inclination to say that the virtuous person does what is right, and instead, because of how she applies the eudaimonic standard, the virtuous agent is said to have performed ‘wrong action’ in light of it being ‘not good action’ - which somehow isn’t the same as ‘bad’) and provides us with a flashy middle term - ‘marred’. Wouldn’t ‘bad action’ (and nothing else) be exactly that which leads to the ‘non-good’ or ‘bad’ or ‘marred’ or ‘un-eudaimonic’ life? The problem is that ‘not good action’ somehow translates into ‘morally wrong action’ – I don’t see why. 

I can understand ‘morally wrong action’ leading to ‘bad action’ and the ‘bad life’. I can understand ‘morally right action’ leading to ‘good action’ and the ‘good life’. I can also understand (as Hursthouse does not seem to) ‘morally right action’ leading to ‘bad action’ and the ‘bad life’. These sentences employ virtue ethics as the sole domain of moral assessment, and it is mere happenstance that how one defines the ‘good life’ can only be achieved through morally correct action, but even if you do not live the ‘good life’, I don’t see why one must say you haven’t performed morally right action. 

As far as I can tell, if Hursthouse refuses to play fairly, using a single standard (virtue), then her theory of ethics collapses into eudaimonic ethics, which frankly sounds a lot like utility. One should perform those things which maximize the eudaimonic brand of happiness, etc. Even in Utility, people have maximum ‘caps’ to the ‘happiness’ that can be achieved, and it would be asinine to expect them to ever attain more from a moral standpoint. Eudaimonic ethics seems an outright impossible standard and a non-starter from the get go. Now, if virtue ethics is to remain a distinctive and unique theory of ethics, it cannot rely upon any application of the eudaimonic standard in moral assessment. To do this will require that her theory define ‘right’ and ‘wrong’ solely in terms of the virtuous person. 

So, even in tragic dilemmas, Hursthouse would need to say that the virtuous agent made a morally correct decision and performed a morally correct act (as these are the things a virtuous agent characteristically chooses and performs); and, incidentally, woe unto the virtuous agent because she will be ‘marred’ with a remainder that prevents her from living a eudaimonically happy life. Nonetheless, the agent is virtuous and has done nothing immoral.

''[2b]''

Let me be forthcoming, I’m not sure how Hursthouse can defend against this criticism (I wouldn’t have levied it as an epicentral criticism if I thought it was easy to rebut). 

She might accuse me of this:

<<<
One might try to wriggle out of this problem by putting a loaded interpretation on ‘characteristically’. Suppose that the right decision is to kill someone, or let them die, to betray a trust, to break a terribly serious promise. That is what the virtuous agent does—in the circumstances. But, given that they are charitable, true to their word, just, do they not act ‘uncharacteristically’, out of character, when they do these terrible things?<<ref "25">>
<<<

But I think my contention isn’t this, as I’m convinced the virtuous person characteristically will do what she calls ‘wrong’ in tragic dilemmas. 

I think she really wants to argue against what I’ve said by claiming that actions, independent of possibility and context, are innately wrong and right as they relate to eudaimonia. She wants to say that eudaimonia is good outside of whether one can possibly pursue it. Of course, this form of denying moral responsibility would allow her to bypass my criticism. 

Hursthouse really would not appreciate my hardline view of ‘right’ and ‘good’ as not being distinct in the end (both are ‘worth pursuing’ and the object of ‘ought’ or ‘should’). At best, one might say that the ‘right’ things are a means to the ‘good’ (but I see this only as a preliminary separation). The ‘good’ here, then, is the first ‘right’ or the primal valuable thing worth pursing and all other ‘right’ pursuits are born of the first. So, the means to an end, as the path to the ‘good’, become part of the ‘good’ in themselves I would say. She would want to strongly point out that the casual path is incidental, and these secondary ‘rights’ are thus distinct from ‘good’ as being incidental ‘oughts’. So, ‘right’ would be a much weaker word in a sense for her than for me. Even with no possible path, the ‘good’ remains what you ‘ought’ to pursue in her eyes. Again, she would need to say that we should pursue eudaimonia even where it is impossible and hold us accountable for ‘moral luck’. 

Lastly, it would be a forceful argument to explicitly claim that eudaimonia has primacy to character (which she alludes to, but does not state). Yes, this would be along the lines of Virtue ethics no longer being about the virtuous person, only indirectly linked. Perhaps it is just incidental that characters traits are the way she wants to help us understand what comprises the eudaimonic person. 

''[3]''

Aristotle used the word arete, meaning excellence, to describe virtue. This isn’t exactly what we usually mean by ‘virtue’ though because aretaic practices included more than morality. We really mean moral excellence and //moral virtue//, which Aristotle describes as //aretai ethikai//. Foot holds (no pun intended) there are “four cardinal moral virtues: courage, temperance, wisdom, and justice,”<<ref "26">>  which differs from the traditional Aristotelian and Thomistic belief that only three of these are moral virtues. The traditional approach labels wisdom or ‘practical wisdom’ as being an intellectual virtue which remains separate from but still related to the moral virtues.

Foot is claiming that wisdom is part intellectual virtue and part moral virtue. Let’s start with the most important one: What makes something a moral virtue? 

Foot explains that “virtues are, in some general way, beneficial.”<<ref "27">>  Who benefits from the virtues: the virtuous, those surrounding the virtuous, or all of them? Foot says, “courage, temperance and wisdom benefit both the person who has these dispositions and other people as well.”  Depending on how you look at justice (the missing cardinal virtue from that list), it may or may not detract from the possessor, but we know it benefits those surrounding the possessor. Justice is also complicated because it may interfere with the common human good, given the nature of rights and duties which accompany the virtue. 

Of course, not every quality which is beneficial is said to be a virtue.<<ref "29">>  Certain biological and evolutionary features seem to be beneficial to persons, but they aren’t the sorts of qualities for which individuals are generally responsible. What separates the non-moral beneficent qualities from the moral virtues is the will. All things which an agent wills (or should will) are things for which they are responsible, unlike non-moral beneficent (and malevolent) qualities. Since moral responsibility stems from an agent’s (I would argue, but Foot doesn’t, “free”) will, and because the virtues and the cultivation of virtuous character are the sorts of beneficial things for which we are responsible, it can be said that “Virtue belongs to the will.”<<ref "30">>  As Foot explains, “Virtue is not, like a skill or an art, a mere capacity: it must actually engage the will.”<<ref "31">>   Virtue, then, isn’t something that can be exclusively genetic, but rather it must contain elements of will, and must be chosen, acted upon and habituated. Oddly, one must also say that virtue is the sort of disposition and inclination from which we enact our will. The way in which these dispositions are habituated must be related to the will, and the way in which one employs these dispositions in a final choice is also important. Consider this illustration:

<<<
Paul stood passively as Kynes inspects the suit. It had been an odd sensation putting on the crinkling, slick-surfaced garment. In his foreconsciousness had been the absolute knowledge that he had never before worn a stillsuit. Yet, each motion of ajudsting theadhesion tabs under Gurner’s inexpert guidance had seemed natural, instinctive. When he had tightened the chest to gain maximum pumping action from the motion of breathing, he had known what he did and why. When he had fitted the neck and forehead tabs tightly, he had known it was to prevent friction blisters. 
Kynes straightened, stepped back with a puzzled expression. “You’ve worn a stillsuit before?” he asked.
		“This is the first time.”
		“Then someone adjusted it for you?”
		“No.”
		Your desert boots are fitted slip-fashion at the ankles. Who told you to do that?”
		“It . . . seemed the right way.”<<ref "32">>
<<<

One must contend with Paul’s natural, instinctive disposition to clothe himself for proper survival in an extreme desert. He isn’t genetically superior in his ability to retain water, he is superior in his natural inclination to wear the stillsuit (the object which will save his life and indirectly benefit others in this story) correctly and to know how to survive and live well on the desert planet. What he wills in this story is beneficial, and thus, it might be said to be a result of some strain of moral virtue.

With that said, what is the will? Foot describes will in terms of desire, intention, attitude, and perhaps spirit.<<ref "33">>  As she puts it, the will “cover[s] what is wished for as well as what is sought.”<<ref "34">>  Virtuous agents actively seek out opportunities to do good deeds and to be virtuous. They do not sit passively intending to do what is right; they will to be virtuous with no “deficiency of motivation.”<<ref "35">>  Virtuous agents leap at the chance to employ the virtues, their deepest desires and hopes are virtuous, and their deepest fears and what they hope to prevent are the vices. 

Importantly, Foot sees the virtues as being corrective of the vices, and she posits “If human nature had been different there would have been no need of a corrective disposition.”<<ref "36">>  We are forced to ask questions like: Are we born vicious? Are these the sorts of things for which we are responsible? Can you be responsible for your own nature? If the vices are imbued in human nature, and we aren’t responsible for our human nature, then it seems as if the vices are psychological states for which we aren’t entirely responsible. It seems that Foot’s understanding of vice does not employ the will to the same extent as her understanding of virtue. If one can accept the theory of compatibilism (I don’t), then I am making a fuss about nothing here; if you reject compatibilism, however, then Foot’s argument has a serious contradiction (again, one based in what it means to be morally responsible for both vice and virtue).

I believe the will is the portion of an agent’s psychological makeup for which she is responsible (and nature isn’t); essentially, I embrace freewill as the necessary precursor to any coherent discussion of ethics. It is here that Foot may disagree with me. She denies freewill and embraces compatibilism, which is the idea that the will, as a cause of moral responsibility, is compatible with physical determinism – the will need not be ‘free’ in her conception.

The movie //The Terminator// exemplifies my point here. Briefly, an artificial intelligence network called Skynet becomes ‘self-aware’ and starts a nuclear holocaust of mankind. Skynet develops post-apocalyptic machines (terminators) to go back in time to terminate Sarah Connor, who, left alive, will eventually enable man’s resistance to the apocalypse initiated by Skynet. Skynet is considered ‘evil’ in this story by many, but not by me. From my perspective, even if Skynet and the terminators displayed some form of ‘awareness’ and ‘reason’, because these computers and machines were bound by the laws of physics, they lack true autonomy, they lack freewill, thus aren’t morally responsible, and therefore they have done neither ‘evil’ nor ‘good’ in trying to end Sarah Connor’s life or initiate the nuclear holocaust. I would say that the engineers (and stockholders) of Cyberdyne Systems which developed and employed the microprocessor that formed the basis of Skynet are the responsible parties for the future nuclear holocaust. Skynet and the army of terminators had no ‘real’ choice to do otherwise. Skynet was just a very advanced box of electronic and quantum billiard balls connecting with other billiard balls, fully bound and described by the laws of physics, fully deterministic and not responsible for what happens. No matter how human the terminators become, they lack libertarian freewill, and thus to find who is morally responsible for the ‘evil’ of the nuclear holocaust, we must go back in the deterministic causal chain until we reach the sort of freewill choices that led to Skynet and the terminators, and that would be the engineers and stockholders of Cyberdyne Systems.

Foot’s disagreement on the issue of compatibilism would amount to holding Skynet morally responsible. She would need to call Skynet’s and the terminators’ deterministic circuits a will. Assuming I am at an impasse with Foot on this issue, let us move on with her theory.

With a conception of the beneficial will as the root of the virtues, Foot goes on to describe the cardinal virtue of wisdom as making the relationship between the other moral virtues and the will as complex and difficult to define. Foot explains:

<<<
Practical wisdom, we said, was counted by Aristotle among the intellectual virtues, and while our wisdom is not quite the same as phronesis or prudentia, it too might seem to belong to the intellect rather than the will. Is not wisdom a matter of knowledge, and how can knowledge be a matter of intention or desire? The answer is that it isn’t, so that there is good reason for thinking of wisdom as an intellectual virtue. But on the other hand wisdom has special connections with the will, meeting it at more than one point.”<<ref "37">> 
<<<

Intellectual virtues are concerned with knowledge. Foot explains that knowledge is not a matter of intention or desire. So, intellectual virtues are not easily related to intention and desire, which means intellectual virtues are not easily related to the will. On one hand, Foot wants to say that the intellect and the will are separate, but because of wisdom, which seems to have a stake in both intellectual and moral virtues, she wants to say that the intellect and will are very related. Foot continues:

<<<
Wisdom, as I see it, has two parts. In the first place the wise man knows the means to certain good ends; and secondly he knows how much particular ends are worth.”<<ref "38">>
<<<

The wise agent obviously needs certain sorts of knowledge. Wisdom includes knowledge of which ends are valuable, good ends belonging to human life.<<ref "39">>  Foot continues:

<<<
Wisdom is to be contrasted with cleverness because cleverness is the ability to take the right steps to any end, whereas wisdom is related only to good ends, and to human life in general rather than to the ends of particular arts.<<ref "40">>
<<<
 
Foot is describing wisdom as including the knowledge of ‘how to act well’ and how to achieve the good ends in the virtuous manner. Cleverness does not fit the bill. A virtuous agent and a non-virtuous clever agent may (incidentally) have the same end, but how they go about arriving at that end and the sorts choices they make to bring about that end may very well differ because it is the virtuous character which defines the moral path to that end for the virtuous agent, not cleverness or efficiency or anything else.

Wisdom isn’t just about knowledge; it is also that which one must will. As Foot puts it, wisdom “presupposes good ends: the man who is wise does not merely know how to do good things…but must also want to do them.”<<ref "41">>  It is perfectly imaginable for a man, for instance, to know how to do the virtuous thing and yet choose not to do it.  Dostoevsky illustrates this concept in //The Brothers Karamazov//:

<<<
Is there in the whole world a being who would have the right to forgive and could forgive? I don't want harmony. From love for humanity I don't want it. I would rather be left with the unavenged suffering. I would rather remain with my unavenged suffering and unsatisfied indignation, even if I were wrong. Besides, too high a price is asked for harmony; it's beyond our means to pay so much to enter on it. And so I hasten to give back my entrance ticket, and if I am an honest man I am bound to give it back as soon as possible. And that I am doing. It's not God that I don't accept, Alyosha, only I most respectfully return him the ticket.<<ref "42">>
<<<

Additionally, “Wisdom, in so far as it consists of knowledge which anyone can gain in the course of an ordinary life, is available to anyone who really wants [or wills for] it.”<<ref "43">>  Foot also describes the foolish man as having ‘false values’ stemming from ‘false judgment’ and so, conversely, wisdom is “partly to be described in terms of apprehension, and even judgment, but since it has to do with a man’s attachments it also characterizes the will.”<<ref "44">>
 
Let me first point out that Foot is claiming that moral virtue “must be within the reach of anyone who really wants it.”<<ref "45">>   And, since she thinks wisdom is a moral virtue, she believes that wisdom must be within the reach of anyone who truly seeks it out. That is a lot of knowledge, in my opinion. Given the limitations of many human adults, we should note how we are forced to draw the line of ‘moral agency’ to fit the condition that moral virtue is ‘within reach of anyone’. Essentially, I question the magnitude of the word ‘anyone’, as it is likely more limited in this passage than many are willing to accept. For example, I believe my child has some degree of wisdom but not all wisdom is within her reach at this point. Still, I don’t want to discount her as some non-agent because she doesn’t meet the condition which Foot has set out. It seems better for an account of ethics to allow for degrees of moral responsibility that scale with intellectual capacity, and that doesn’t seem possible in Foot’s account.

Wisdom is part knowledge and part ‘will’, and so it seems as though wisdom is both an intellectual and a moral virtue. While many might wish to attack Foot’s conflation of desire with will, I don’t think I truly know enough about our minds to counter it. So, in charity, I’m going to assume that ‘desire’, insofar as I am responsible for it, and insofar as it affects what I intend, is something which I ‘will’. This, of course, is not an adequate account of ‘will’ entirely, but it is in keeping with the essential point that will is the capacity which enables our moral responsibility.

One realm where the relationship between emotions, desires, wisdom, will, and reason all collide is what it means for a virtuous person to have ‘moral motivation’ and its impact on the ‘moral worth’ or our assessment of an agent’s unit of moral experience. I think this isn’t such an easy topic. For example, on one hand we expect that choosing and performing virtuously should be obvious for the virtuous agent, but, in turn, we might somehow be less impressed in our assessment of the resulting decision/action because the virtuous agent seemed inclined to do what is virtuous, as if it were too easy, and didn’t really have to ‘work’ or exercise reason and autonomy (to a great extent) to be virtuous in that instance. One may be tempted to assess the moral worth of a decision/action by its relative difficulty for an agent to achieve. This may follow that adage, “to whom much is given, much is required.” We are tempted to have one set of expectations of the virtuous (because it is easy for them to do what is right) and another set of expectations of the unvirtuous (because it is so hard for them to do what is right); it is the temptation to judge the virtuous and unvirtuous differently, even for the same sort of act. The moral worth of doing what is virtuous for the unvirtuous is quite an accomplishment; it is the sort of moral and psychological experience we want to applaud above and beyond a virtuous person might experience in the same situation. Of course, the obvious retort to this temptation: if we mean by ‘moral motivation’ simply ‘what I desired’, and if struggling to be virtuous demonstrates that I don’t want what is morally right, then I as a person and my act simply aren’t as good as the virtuous agent and her act because she is gladly virtuous. 

The role of reason in will is also exceptionally important here. Insofar as agents might be driven by animalistic desires or inclinations for which they can’t control in the moment, we may want to say (although it isn’t exactly clear where the virtue ethicist stands on this issue) then these agents aren’t performing actions of moral worth. If we performed the right action because we employed our reason within will, then it seems intuitively true that this is the sort of actions which can have moral worth. 

Lastly, I don’t know to what extent wisdom is incorporated into each of the virtues and to what extent wisdom is unique and distinct from the other moral virtues. You are not supposed to claim ignorance in papers, but I honestly know neither how we should describe the landscape of the psychological crossroads of will, reason, and desire, nor exactly how wisdom (as a ‘fine-tuning’ process) relates to the other moral virtues. I want to recognize they are important questions, though.

In conclusion, I’m sympathetic to much of what Foot has to say. Moral virtues are exercised by the will. Wisdom is a moral virtue, and thus it is in some degree exercised by the will. Wisdom has cognitive value to interpreting, understanding, inferring, and applying the other moral virtues, and, in this sense, wisdom is of the intellect and reason. It seems as if we are responsible for choosing to perform moral reasoning, and, in this sense, wisdom is of the will. In the end, I’m led to believe that virtue ethics has the greatest need (of the various approaches) to understand and define the psychological nature of moral agents.

--------------------

<<footnotes "1" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001), 47">>
<<footnotes "2" "Ibid., 46">>
<<footnotes "3" "Ibid., 46-47">>
<<footnotes "4" "Ibid., 47">>
<<footnotes "5" "Ibid., 47">>
<<footnotes "6" "Ibid., 47">>
<<footnotes "7" "Ibid., 48">>
<<footnotes "8" "Ibid., 76">>
<<footnotes "9" "Ibid., 50-51">>
<<footnotes "10" "Ibid., 51">>
<<footnotes "11" "Ibid., 51">>
<<footnotes "12" "Ibid., 63">>
<<footnotes "13" "Ibid., 71">>
<<footnotes "14" "Ibid., 72">>
<<footnotes "15" "Ibid., 74">>
<<footnotes "16" "Ibid., 70-71">>
<<footnotes "17" "Ibid., 72">>
<<footnotes "18" "Ibid., 73-74">>
<<footnotes "19" "Ibid., 74">>
<<footnotes "20" "Ibid., 79">>
<<footnotes "21" "Ibid., 79">>
<<footnotes "22" "Ibid., 82">>
<<footnotes "23" "Ibid., 81">>
<<footnotes "24" "Ibid., 81">>
<<footnotes "25" "Ibid., 78">>
<<footnotes "26" "Phillipa Foot, “Virtues and Vices” in //Virtue Ethics//, ed. Roger Crisp and Michael Slote (Oxford and New York:Oxford University Press, 1997), 164">>
<<footnotes "27" "Ibid., 164">>
<<footnotes "28" "Ibid., 164">>
<<footnotes "29" "Ibid., 165">>
<<footnotes "30" "Ibid., 165">>
<<footnotes "31" "Ibid., 169">>
<<footnotes "32" "Frank Herbert, //Dune //(New York: Ace Books, 1990), 110">>
<<footnotes "33" "Phillipa Foot, “Virtues and Vices” in //Virtue Ethics//, ed. Roger Crisp and Michael Slote (Oxford and New York:Oxford University Press, 1997), 166">>
<<footnotes "34" "Ibid., 166">>
<<footnotes "35" "Ibid., 170">>
<<footnotes "36" "Ibid., 170">>
<<footnotes "37" "Ibid., 166">>
<<footnotes "38" "Ibid., 167">>
<<footnotes "39" "Ibid., 167">>
<<footnotes "40" "Ibid., 167">>
<<footnotes "41" "Ibid., 167">>
<<footnotes "42" "Fyodor Dostoevsky, //The Brothers Karamazov// (New York: Random House, c.1933), p. 254.">>
<<footnotes "43" "Phillipa Foot, “Virtues and Vices” in //Virtue Ethics//, ed. Roger Crisp and Michael Slote (Oxford and New York:Oxford University Press, 1997), 167">>
<<footnotes "44" "Ibid., 168">>
<<footnotes "45" "Ibid., 167">>
''[1a]''

In his //Groundwork//, Kant examines the “moral worth” of actions performed from duty rather than from inclination.<<ref "1">>  In his view, an agent who employs reason to understand one’s duty and then acts from and for the sake of duty has performed an act of moral worth, one which merits “esteem.”<<ref "2">>  He uses the example of the ‘sad philanthropist’ to demonstrate his argument concerning the moral worth of actions. 

Kant refers to the sad philanthropist as “the friend of man” who is “overclouded by sorrows of his own which extinguish all sympathy with the fate others.”<<ref "3">>  The sad philanthropist, in this instance, no longer has any emotional motivation or inclination to help others in need. From reason and freewill, the sad philanthropist overcomes his sadness as he “tears himself out of this deadly insensibility and does the [right] action without any inclination for the sake of duty alone.”<<ref "4">>  Clearly, Kant uses the example of the sad philanthropist to demonstrate the motivational requirements (from duty alone) of an action with moral worth. The sad philanthropist’s emotions (which are always outside the control of the agent) and inclination (which are also outside the control of the agent within this time frame) are incidental. Crucially, Kant isn’t talking about the character of the agent in this passage of the Groundwork, but rather the rightness and moral worth of the action. 

'' [Foot’s Criticism]''

Phillipa Foot argues that Kant has not properly understood emotion and inclination as necessary variables in the moral motivation equation used in judging the moral worth of action. Foot criticizes Kant’s sad philanthropist as an agent who is lacking the proper motivation and sympathy, and essentially the virtuous character, required to categorize the resulting action as having moral worth. Vitally, she explains:

<<<
Charity is a virtue of attachment, and that sympathy for others which makes it easier to help them is part of the virtue itself.<<ref "5">> 
<<<

Foot is suggesting that having the appropriate ‘virtuous emotions’ (whether or not we have control of them) is a necessary part of possessing the full virtue. In our case, Foot is claiming that the sad philanthropist lacks the emotional and pathological sympathy for others in need, and is therefore lacking some degree of charity. Foot continues:

<<<
Some actions are in accordance with virtue without requiring virtue for their performance, whereas others are both in accordance with virtue and such as to show possession of a virtue.<<ref "6">>
<<<
 
Foot believes there are some circumstances which pose few, if any, obstacles for acting virtuously, where it is all too ‘easy’ to perform the virtuous act, e.g. when the right moral choice involves self-preservation. There are, however, other difficult circumstances in which even a virtuous agent is truly tested, and where we can more readily see exactly where an agent is lacking virtuous character. The circumstance which caused the sad philanthropist to be ‘overclouded by sorrow’ is the sort of circumstance which really tests the character of an agent. Importantly, Foot distinguishes acting ‘in accordance with virtue’ from actually showing full ‘possession of a virtue’. It is here that she can accuse the sad philanthropist of not possessing full virtue, despite his acting in accordance with virtue. She argues:

<<<
The man who acts charitably out of a sense of duty is not to be undervalued, but it is the other who most shows virtue and therefore to the other that most moral worth is attributed. Only a detail of Kant’s presentation of the case of the dutiful philanthropist tells on the other side. For what he actually said was that this man felt no sympathy and took no pleasure in the good of others because ‘his mind was clouded by some sorrow of his own’, and this is the kind of circumstance that increases the virtue that is needed if a man is to act well’.<<ref "7">>
<<<

If the ‘friend of man’, despite his circumstances, had a character which was readily inclined to be philanthropic and charitable, taking pleasure in doing what is right, having the proper emotional state required to be virtuous, Foot would be willing to claim that his action wasn’t just in accordance with virtue, but also showed the possession of virtue. 

The sad philanthropist is simply not as virtuous as an agent who felt the proper sympathy. The virtuous emotions are necessary for moral motivation and virtuous character, and thus also necessary to claim an action has moral worth. The sad philanthropist lacks the virtuous emotions, finding it difficult because of his emotional turmoil to do what is virtuous, and thus demonstrates a flaw in his character. Foot, therefore, deems the sad philanthropist’s action as lacking moral worth compared to the virtuous agent who possesses the necessary virtuous emotions and character, easily doing what is right. As the virtuous agent can be said to have not only acted in accordance with virtue (just as the sad philanthropist), but to also actually possess the virtue because he had virtuous emotions and character, the virtuous person’s action has maximal moral worth.

''[Hursthouse’s Criticism]''

Hursthouse considers at length the implications of Aristotle’s distinction between the continent agent and the fully virtuous agent. The continent agent possesses self-control (//enkrateia//) and is “one who, typically, knowing what she should do, does it, contrary, to her desires.”<<ref "8">>  Hursthouse contrasts the fully virtuous person as “one who, typically, knowing what she should do, does it, desiring to do it.”<<ref "9">>  Unlike the continent agent, the fully virtuous person’s “desires are in ‘complete harmony’ with her reason; hence, when she does what she should, she does what she desires to do, and reaps the reward of satisfied desire.”<<ref "10">>  In Hursthouse’s eyes, both the disharmony between the continent agent’s reason and her desire, and the inability to have those desires satisfied when performing in accordance with virtue demonstrate why the continent agent is morally inferior to the virtuous agent.<<ref "11">>

Hursthouse, keeping in mind the continent/fully virtuous distinction, disagrees to some extent with Phillipa Foot’s criticism, particularly concerning how one should qualify and understand the clause “virtuous conduct gives pleasure to the lover of virtue.”<<ref "12">>  Hursthouse carefully explains:

<<<
There is no reason why an Aristotelian should not agree with Kant that there is something particularly estimable about the action of the sorrowing philanthropist. For here, the ‘difficulty that stands in the way’ of his virtuous action is of the sort that ‘provides an occasion’ for much virtue. It is his sorrow which makes noticing and attending to the needs of others particularly difficult; and as Foot rightly remarks, if he still manages to act with charity this ‘most shows virtue’, because ‘this is the kind of circumstance that increases the virtue that is needed if a man is to act well’.<<ref "13">>
<<< 

	If the sad philanthropist “finds it hard”<<ref "14">>  to be charitable //because //his mind is ‘overclouded by sorrow’, but still uses proper reasoning to choose and act charitably, then Hursthouse believes the sad philanthropist is displaying virtue in the face of a difficult obstacle. In this special case, assuming the sad philanthropist employs his capacity to reason correctly, he is possibly better than the merely continent agent - rather he might be fully virtuous. 

Hursthouse goes on to explain that to be inclined to have certain emotions isn’t sufficient for being a reliably virtuous agent.<<ref "15">>  The basis of this lack of sufficiency is Aristotle’s disagreement (Kant also disagrees) with the Humean principle of action, particularly “passion and desire.”<<ref "16">>  Hursthouse attempts to synthesize Kantian and Aristotelian definitions of inclination when she says:

<<<
[W]e all know that the ideal Kantian agent acts from a sense of duty, not from inclination, but if ‘inclination’ is that-principle-of-movement-we-share-with-the-other-animals, then the virtuous Aristotelian agent doesn’t act from inclination either, but from reason (logos) in the form of ‘choice’ (//prohairesis//).<<ref "17">>
<<<

	Acting from animalistic inclination is something that even the continent agent avoids. In this sense of inclination, Hursthouse is willing to agree, to some extent, with Kant’s ‘moral worth’ argument. Agents acting from animalistic inclinations are not performing esteemed ‘right’ action with any moral worth. It is here that we see Hursthouse’s true interpretation of Kant’s sad philanthropist, and she attempts to demonstrate how Kant has failed to understand the role of emotions in virtue theory; she says:

<<<
But, sticking to the text, the sorrowing philanthropist is someone with Humean benevolence, liable to go wrong in a variety of ways, who hitherto acted only from inclination and now ‘for the first time’ acts ‘for the sake of duty alone’; not a new sort of philanthropist who has been introduced in contrast to the happy ones. And, in Aristotelian terms, this is hardly a coherent picture.<<ref "18">>
<<<

	Essentially, Hursthouse criticizes the sad philanthropist of having been, historically speaking, motivated and acting from an animalistic/child-like Humean inclination. It is merely by happenstance, according to Hursthouse, that the sad philanthropist is in the rare case of having been motivated to act for the sake of duty, rather than his usual animalistic inclination. Hursthouse continues:

<<<
Once one has acquired reason, the only thing that would clearly count as being the sort of agent who acts ‘only from inclination’ and not from reason is being the sort of agent who is akratic or ‘weak-willed’ in character.<<ref "19">>
<<<

	Hursthouse is claiming that the sad philanthropist not only isn’t like a virtuous agent in choosing to overcome his sorrows, but he isn’t even (reliably) like the continent agent! The sad philanthropist has historically chosen to act from animalistic inclination, instead of reason, demonstrating that he has an akratic and deeply flawed character. An agent who has such a flawed character that he reliably chooses to act from animalistic inclination lacks real moral motivation to perform actions with actual moral worth. Hursthouse closes her criticism:

<<<
In so far as it makes sense to talk of Aristotle’s view on ‘motivation’, the continent and the fully virtuous have the same ‘motivation’—they each act from reason in the form of ‘choice’ (prohairesis). The difference between them lies not in their ‘motivation’ or reasons for action, but in their condition; the fully virtuous are better disposed in relation to their emotions than the self-controlled.<<ref "20">>
<<<

	The fully virtuous agent has a harmony between her emotions, desires, and reason. The continent agent does not possess this harmony. In order for an action to have moral worth it must be performed by an agent who possesses a virtuous character and reliably has the virtuous emotions in harmony with proper reason.  In Hursthouse’s view, the sad philanthropist fails to meet these requirements by a long shot (he reliably acts from animalistic inclination), and therefore his action lacks moral worth.

''[1b]''

	Hursthouse fails to properly address Kant’s primary argument. Kant’s major claim is that the moral worth of action is a result of reason and will, being motivated and acting from and for the sake of duty alone. Hursthouse argues about the character of the sad philanthropist, but fails to counter (strongly) Kant’s principle behind the claim that the sad philanthropist’s action has moral worth. This is an unfortunate oversight on her part. 

The sad philanthropist does not demonstrate Hursthouse's distinction between continent and fully virtuous. The sad philanthropist demonstrates the divide between one who reliably acts from animalistic inclination and the continent agent. The continent agent does what is right, despite his feelings and desires. The animalistically inclined agent does what is right because his feelings and desires drive him to do so. Hursthouse destroys the sad philanthropist’s character (his historical animalistic motivation), but she doesn’t demonstrate how the sad philanthropist is an example of why the actions of the fully virtuous agent have moral worth where the actions of the continent agent do not, and essentially, she doesn’t provide a strong argument against Kant’s ‘moral worth’-making principle.

	Kant is arguing that ‘moral worth’ is the result of being motivated to do what is right because it is right. Kant believes an agent requires continence in conjunction with this for-duty-alone motivation to perform actions of moral worth; Hursthouse believes the requirements for ‘moral worth’ are different and more difficult to attain. Hursthouse thinks both possessing the virtuous character (better than continence) and reliably feeling virtuous emotions in harmony with one’s reason (definitionally impossible for the continent) are the necessary ‘moral worth’-making preconditions. Why should we believe her?  

If Hursthouse is correct about what makes an action have moral worth, then I daresay I’ve never met a person who has ever performed an action with moral worth because I’ve never met (to my knowledge) a person with a fully virtuous character. If only the virtuous agent can perform actions with moral worth, then the rest of us (who aren’t fully virtuous) are doomed to perform actions (even if in accordance with virtue) which lack moral worth.

Kant can make sense of character development and give a plausible account of ‘moral worth’-making preconditions without putting us into the awkward position that Hursthouse does. I think he would argue that over the course of the character development of agents, some people will have initially strong dispositions to do what is wrong, and others will have the opposite, and yet others will fall in between. Kant thinks you can start out as being non-virtuous, but through repeated applications of reason and willing to act from duty, you will arrive at having a virtuous character. Character, however, is not the condition which determines the moral worth of action, rather it is merely a measurement of the moral worth of an agent’s choices from a broad temporal scope. Note that the ‘moral worth’ judgment precedes character determination.

Completely different from Hursthouse, Kant thinks one can act correctly, producing an action with moral worth, even with a poor disposition. Kant uses a small temporal scope, judging the smallest units of experience – individual choices. Kant believes that one may choose to do what is right and morally worthy at any point on the timeline of choices of the agent. In this unit of moral experience, inclinations, emotions, desires, character are incidental; the choice and reasoning which motivates a person are the sole factors in judging the rightness and moral worth of the resulting action. 

So, whether a person is a racist (Hursthouse’s example of a vicious agent) or a virtuous agent, at each choice, she has the ability to choose to act outside of her inclinations, emotions, desires, or character. When she chooses to act for the sake of duty, then her action has moral worth. Even the racist or Mafioso can choose to act for the sake of duty, and thus even their actions can possibly have moral worth. 

Hursthouse did not properly address the sort of account of character Kant might give; instead she implies that virtuous character is necessary for actions to have ‘moral-worth’. I don’t see why this is necessary or even plausible. As a part of this disagreement over the primacy of character and disposition, Hursthouse and Kant also have a fundamental disagreement concerning the role of emotions in ethics. We must ask: why should we believe that emotions are necessary components for ‘doing’ the right action? 

Kant would say that emotions are neither necessary nor sufficient for doing the right action. Emotions are subjective, not dependable, and, most importantly, agents cannot exercise will power over emotions – we lack control of our emotions. To lack control over our emotions (in an immediate sense) removes our (immediate) moral responsibility for them. Hursthouse fails to rebut this fundamental point. 

Hursthouse desperately needs to provide an account of how we are morally culpable for our emotions even if we aren’t in full control of them. It is possible that Hursthouse could instead claim we have full control over our emotions, but that claim seems very implausible (from my own anecdotal experience). She does think emotions are part rational and part irrational. She needs to flesh out the psychology of moral agents, particularly the relationship of will and emotion, in order to provide a plausible account of moral responsibility.

	The criticism of the sad philanthropist was a misdirected argument. Kant was clearly discussing the ‘moral worth’ of actions and the sort of motivation required for it, not the character of the sad philanthropist. Hursthouse should have shown why ‘acting from duty alone’ is not necessary and sufficient for the moral worth of action. Only after rebutting Kant’s major claim should she have provided a much stronger account of her own theory of what is necessary and sufficient for the moral worth of action. 

''[2a]''

In considering the nature of ‘reason’ in the claim that the virtuous agent chooses “a V action for an X reason” Hursthouse draws on Sarah Broadie’s “Grand End theory.”<<ref "21">>  Both Broadie and Hursthouse are concerned with whether or not we are justified in ascribing to the virtuous agent “an explicit, comprehensive, substantial vision of the good.”<<ref "22">>  Hursthouse questions the necessity of such an ascription and its impact upon the moral motivation of the virtuous agent. Hursthouse expounds:

<<<
When philosophers start implying that it is a necessary condition of virtue that the virtuous have reflected long and hard about what eudaimonia consists in and worked out a picture of what is involved in acting well so comprehensive and substantial that it can be applied and its application justified in every suitable case, we may be sure that they are falling victim to what could be called ‘the Platonic fantasy’. This is the fantasy that it is only through the study of philosophy that one can become virtuous (or really virtuous).<<ref "23">>
<<<

	The ‘Platonic fantasy’ is the claim that the virtuous agent must (either explicitly or implicitly) think about and employ a complete (and correct) moral philosophy. Those under the illusion of the ‘Platonic fantasy’ (primarily philosophers), according to Hursthouse, inaccurately ascribe philosophical reasoning to the virtuous agent, including “fancy”<<ref "24">>  terminology, abstract ethical structures, universal principle-based reflection, and formal //moral knowledge//. 

	Hursthouse is convinced the Platonic fantasy fails to capture the psychological makeup and sort of ‘X reasoning’ of the virtuous agent. As a matter of //brute fact//, Hursthouse claims: 

<<<
Of course people can be virtuous, really virtuous, without having spent clockable hours thinking about eudaimonia, coming to the conclusion that it is a life lived in accordance with the virtues and working out an account of acting well, just as they can possess a really good will without having spent clockable hours working out whether various maxims can be willed as universal laws.<<ref "25">>
<<<

	To Hursthouse, this is //obviously //true. Assuming philosophical reasoning does require clockable hours, the “absurdity of the [Platonic] fantasy”<<ref "26">>  is consequently also obviously true to her. The virtuous agent doesn’t necessarily ‘reason’ or philosophize, according to Hursthouse. Hursthouse states that “the ascription of virtue…is basic.”<<ref "27">>  Unfortunately, Hursthouse isn’t very clear about what she means by this basic ascription to the virtuous agent. She does explain:

<<<
Loving the noble, having a correct conception of eudaimonia and a grasp of the universal acting well, are not tests for virtue, or the grounds on which we ascribe virtue, nor are they the specification of an ideal of virtue to which everyone should aspire.<<ref "28">>
<<<

So, while Hursthouse fails to describe (in detail) what she believes are necessary and sufficient sort of psychological and rational conditions to be a virtuous agent, I know she believes that philosophical thought is neither necessary nor sufficient. The basic moral reasoning of the virtuous agent is non-philosophical.

	Hursthouse covers all the ‘Platonic fantasy’ bases when she reiterates Broadie’s extension of the fantasy from the conscious mind to the unconscious mind. She explains we cannot even implicitly ascribe the Platonic fantasy to the virtuous person.<<ref "29">>  Virtue isn’t just compatible with philosophical inarticulacy; it is also compatible with lacking tacit and implicit philosophical knowledge, intuition, and reasoning. Hursthouse is claiming that philosophical knowledge, conscious or unconscious, is unnecessary for a virtuous agent. 

For Hursthouse, the Platonic fantasy is easy to slip into; she explains why many philosophers are under the illusion of the Platonic fantasy:

<<<
If we philosophers were to think of ordinary virtuous people as possessing these ‘fancy’ things, we would have a better philosophical understanding of various topics that interest us—moral motivation, moral reasoning, practical wisdom, a correct conception of eudaimonia, virtue itself.<<ref "30">>
<<<
	
	She thinks moral philosophy is ‘actually’ done because it piques our interest. Perhaps we (the philosophers) are tempted to incorrectly ascribe the activity of philosophy to the virtuous agent as a necessary (and, for some, also sufficient) condition to being virtuous because it might benefit us as philosophers. To Hursthouse, philosophers use formal moral reasoning to describe the virtuous agent because they believe they are “saying something illuminating and important.”<<ref "31">>  I take it that Hursthouse is saying that it is all too easy for a philosopher of ethics to delude himself into thinking he is doing something really worthwhile, something which will help him attain not just knowledge about morality, but even help him (and those who listen to him) perform better practical and applied moral reasoning and perhaps become like, think as, be motivated for the same reasons as, and act like the virtuous agent. 

Noteworthy, it is //possible //that some virtuous agent, by happenstance, is also a moral philosopher who possesses “an explicit, comprehensive, substantial vision of the good.”<<ref "32">>  Being a moral philosopher, however, is neither necessary nor sufficient for the coincidentally virtuous moral philosopher to be morally motivated.<<ref "33">>

	In conclusion, Hursthouse believes philosophical moral reasoning is not a necessary part of moral motivation or a required for virtue.

''[2b]''

Hursthouse’s claim is much stronger than saying that virtue and moral motivation are compatible with philosophical inarticulacy.<<ref "34">>  She’s denying the necessity of not only conscious and explicit philosophical reasoning to be morally motivated and to be a virtuous agent, but also the subconscious, intuitive, and ‘difficult to make explicit’ philosophical reasoning. Hursthouse, in my view, is dismissing the need for moral philosophy in its entirety. Hursthouse would clearly disagree with the following claim:

<<<
The Platonic fantasy is no fantasy. It is utterly crucial if we are to perform our task as moral philosophers – in short, the nature of philosophy itself rides on the alleged fantasy.<<ref "35">>
<<<

	The denial of the above claim is pretty shocking, especially coming from a moral philosopher. If the Platonic fantasy really is a fantasy, then why in the world would a person pursue moral philosophy at all? Why did Hursthouse write this book? (Because it interested her?) If philosophical moral reasoning doesn’t help us and others on the path to becoming better moral agents, then there doesn’t really seem to be much of a purpose to (moral) philosophy. If moral theories are strictly incapable of actually describing moral experience and the moral universe, then can we really say that the virtuous person employs knowledge? The sort of knowledge that would come from moral philosophy is somehow not very useful to the virtuous agent (or to those seeking to become virtuous). If this is the case, wouldn’t moral philosophy, in Hursthouse’s eyes, be somewhat like memorizing prime numbers? Sure, having these prime numbers memorized might help you pass a test one day in your number theory class, but it is generally useless otherwise. Like memorizing prime numbers, if Hursthouse is correct, it seems as though moral philosophy is generally useless.

	 I think it is one thing to claim that modern moral philosophy is inaccurate (a charitable way to read this, in my opinion) and another to dismiss it altogether. If Hursthouse would claim that the correct virtue theory itself is much simpler than the complexity we see in modern moral theories (again, the depth of the arguments she has given in this book would demonstrate otherwise), then I could make more sense of her claim that moral philosophy (as we currently think about it) is useless to the virtuous agent or those seeking to be virtuous. 

	Hursthouse has (momentarily) forgotten what it means to do ‘philosophy’ in the first place. By definition, philosophy is about good reasoning, about pursuing truth, and about gaining wisdom. Whether a truth is extremely complex or simple, the good philosopher will pursue it because moral philosophy is about pursuing and possessing moral knowledge. Philosophers (at least ‘good’ or proper ones) develop, argue about, and use moral theories to try to describe the moral (aspect of the) universe; they do this because they wish to know the moral universe (morality) in order to become better moral agents (to become like the virtuous agent!). It is assumed by most moral philosophers (perhaps excepting Broadie and Hursthouse) that becoming virtuous is a rational process, not an irrational or random one, hence why we (should) do moral philosophy. If morality wasn’t strictly rational, then you could not be responsible for it. 

The virtuous agent does have moral knowledge. Hursthouse thinks so. How is this sort of knowledge not philosophical? How is it not rational and well-reasoned? Surely it must be. Does she just mean ‘true belief’ rather than knowledge?

	Let’s assume that possessing knowledge is the possession of justified true belief (just as Aristotle’s teacher assumed; and, arguably, Aristotle’s explanation of episteme in his Posterior Analytics implies). The moral philosopher, who is pursuing moral knowledge, is interested in having justified, true moral beliefs. Hursthouse admits that having the correct moral belief is essential to being morally motivated and a necessary component to the psychology of the virtuous agent.<<ref "36">>  If the virtuous agent is justified in his true moral belief, then, essentially, he has the object of moral philosophy, namely moral knowledge. If we are to assume that the virtuous agent must be justified in his true belief, then it would seem that moral philosophy, in this sense, is absolutely necessary to becoming a virtuous agent. Perhaps modern moral theories are wrong, but that doesn’t mean that moral philosophy is unnecessary.

	If the JTB assumption is correct, then the only way for Hursthouse to dismiss moral philosophy as she does would be to claim that the virtuous agent is not justified in his true belief, and thus doesn’t have moral knowledge. If this were true, then the virtuous belief isn’t necessarily reasonable. If this is the objection, we must realize that the virtuous agent did not think about his beliefs, he just ‘magically’ had them. Randomly stumbling upon the correct (but unjustified) moral beliefs, and acting from them (rather than from a duty deduced from reason), seems to take away from the moral worth of an agent’s action, in my view. 

	Heeding the Platonic fantasy is necessary if we are going to say that the virtuous person employs rationality, at least implicitly, to be morally motivated. Moral philosophy, even if not as complex or sophisticated as many modern moral theories, is certainly something which the virtuous agent must be doing, and the activity necessary for becoming virtuous.

Before closing, I would like to defend a possible spirit of Hursthouse’s argument, namely that virtuous agents may have difficulty explicitly articulating their thoughts. Given one’s understanding of the philosophy of mind, language, and intentionality (for example, if you deny some forms of pragmatism and expressivism), it is certainly reasonable to consider the possibility that a virtuous agent’s philosophical framework and motivation is in part intuitive and subconscious, and that, to some extent, the agent isn’t mentally and physically capable of articulating their beliefs. Obviously, Hursthouse said much more than this, but I think she may have hit on something pretty important in dissecting the psychology of the virtuous agent.

''[3a]''

Hursthouse spends a great deal of time describing the ‘degree’ paradigm of her virtue theory. She believes that virtues, beliefs, feelings, character traits, and practical wisdom admit of degree.  She says there are “a variety of ways in which people are not, ethically, all of a piece,” which complicates, but does not demonstrate, disunity of the virtues.<<ref "37">>

As Hursthouse sees it, the virtues are not “completely discrete, isolable character traits.”<<ref "38">>  The essential idea behind the doctrine of the unity of the virtues is that “to have any individual virtue one must have them all.”<<ref "39">>  Her theory is derived from Aristotle’s; he explains:

<<<
One might on these lines meet the dialectical argument by which it would be contended that the virtues exist independently of each other, on the ground that the same man is not equally well endowed by nature in respect of them all, so that he will be the possessor of one, but not yet the possessor of another. As far as the natural virtues are concerned, this is possible; but it is not possible when the virtues are those that entitle a person to be called good without qualification; for the possession of the single virtue of practical wisdom will carry with it the possession of them all.<<ref "40">>
<<<
  
	Strict reading would lead us to believe that possession of the full set of those moral virtues which aren’t practical wisdom (to what degree isn’t clear) is a necessary condition for possession of practical or moral wisdom. Hursthouse builds upon this, and, in my view, qualifies the unity beyond what Aristotle is saying right here. I believe Hursthouse extends this to mean that the virtues which are connected to practical wisdom (exactly how, I’m not sure) are the sort which can’t be independently understood apart from each other; inevitably, she will arrive at the notion that possession of any single virtue (not just practical wisdom) ‘will carry with it the possession of them all’. There is a holistic, codependent, perhaps even interdefining nature to the moral virtues. Consider what Hursthouse says:

<<<
 [‘Courage’ and ‘temperance’] are not excellences of character, not traits that, by their very nature, make their possessor good and issue in good conduct. They can be faults or flaws rather than excellences and they can lead their possessors to act badly.<<ref "41">>
<<<
 
	To isolate courage, and to apply it independently of the other virtues, especially independent of practical wisdom, seems to (at least sometimes) result in faults and flaws, in Hursthouse’s view. Independently then, these aren’t virtues at all, and because of this, I believe she considers (although ultimately concludes a unity stronger than) two ‘connective’ claims about the virtues. 

The first (and weaker claim) is the interconnectivity of the non-wisdom virtues, and the insufficiency of the sum of the non-wisdom virtues to result in ‘excellence of character’ and full virtue. If courage is not moderated by the virtue of temperance, then the feelings of fear and confidence may be skewed to extreme excess or defect, resulting in rashness or cowardice. It seems a necessary condition for the ‘excellence of character’ that each of the various moral virtues (momentarily, we will exclude practical wisdom from this set) have something to say about at least some of the other virtues. To what extent, and in what way, I am not exactly sure how Hursthouse thinks. So, to be properly charitable (so as to move a step closer towards excellence of character), the character trait of charity may require, borrow from, and be regulated by other sorts of virtues such as kindness or perhaps the sort of righteousness required to be aware of the misfortunes of our neighbors. 

It seem as though even more is required, however, for courage to be appropriately applied in the right situations, in the right way, at the right time, etc. The non-wisdom virtues, despite their interdependence, are not sufficient (although certainly necessary) for being fully virtuous. Hursthouse continues:

<<<
What this way of thinking about the virtues omits is the Aristotelian idea that each of the virtues involves practical wisdom, the ability to reason correctly about practical matters…The same sorts of judgments about goods and evils, benefits and harms, what is worthwhile and what is relatively unimportant crop up across the ranges.<<ref "42">>
<<<

This is the second (and stronger) ‘connectivity’ claim she considers. Practical wisdom seems to be the driving cognitive force and supervisory device behind the other virtues. This wisdom perceives the world appropriately; it makes sense of ‘what is what’; it is the locus of judgment and value determination; and, most importantly to the unity of the virtues, it governs the other virtues.  Pertaining to the unity of the virtues, the virtuous agent’s practical wisdom includes knowing how to properly connect and apply the sum of the various virtues in the proper situations and in the proper ways. 

So while the other moral virtues impact each other to some degree, they aren’t the masters of themselves; it appears that practical wisdom has very profound regulating powers over the other moral virtues. We do know that ‘excellence of character’ is the possession of practical wisdom, which will necessarily include the other moral virtues. Possessing the non-wisdom virtues is necessary for possessing practical wisdom, but we don’t yet know if they are sufficient for possessing practical wisdom, according to Hursthouse. Practical wisdom holds a very special place in Hursthouse’s virtue theory. Hursthouse concludes:

<<<
So it seems that what we believe in is what Neera Badhwar calls ‘the limited unity’ of the virtues and Gary Watson ‘the weak unity thesis’. This is a view that simultaneously recognizes the fact that practical wisdom cannot occur in discrete packages, limited in its area of competence to just this virtue or that, and also the fact that it is not an all-or-nothing matter. According to this thesis, anyone who possesses one virtue will have all the others to some degree, albeit, in some cases, a pretty limited one.<<ref "43">>
<<<

Vitally, Hursthouse explains that the possession of any proper virtue (not just practical wisdom) includes all the others (to some degree). For example, to properly have courage requires practical wisdom, and to have practical wisdom is to have at least some degree of all the other virtues. In this sense, ‘isolated courage’ isn’t courage at all; only the sort of courage which necessarily includes (some degree of) all the other virtues is really what Hursthouse means by courage. Note that Hursthouse’s ‘weak unity thesis’ is still stronger than just holding the two previous connectivity claims (although, the essence of these connective issues are still found within her doctrine of the unity of the virtues). 

What is clear about Hursthouse’s weak unity thesis is that one virtue necessitates them all, to some degree.  What is unclear about Hursthouse’s weak unity thesis is ‘to what degree’. The various connections between the virtues, and particularly the impact of practical wisdom in this equation, have not been fully fleshed out in her account of the unity of the virtues. 

''[3b]''

Hursthouse is denying the ‘all-or-nothing’ of the moral metrics in her virtue theory; instead she employs a ‘degree paradigm’, and this sort of degree-based argumentation is prominent within her weak unity of the virtues thesis. Each of the virtues can be possessed in (differing) degrees. Given what she says, there are some awkward and unintuitive results. [Objection #1] One of my problems with her weak unity thesis is that it results in the possibility of some extremely //implausible //agents who possess wildly imbalanced character distributions.
 
Consider how a hypothetical person in Hursthouse’s weak unity thesis might possess 98% charity, and only 1% of the other virtues, such as courage, temperance, kindness, etc. This seems implausible to my own intuitions. It is certainly explainable and possible in Hursthouse’s theory, but this sort of hypothetical doesn’t seem plausible or an acceptably possible result of a theory from my own moral experience.  (Admittedly, my intuitions could be wrong.) 

Her conception of the unity of virtues isn’t accurate enough. It seems to me that every situation requires all the virtues simultaneously. In short, [Objection #2] the virtues are too isolable in her theory. On one hand, she considers how the virtues are connected, and thinks they help to define and regulate each other, but on the hand, she thinks of particular situations as requiring (e.g.) ‘courage + practical wisdom’ or ‘charity + practical wisdom’ almost exclusively, as if we really can isolate most of the morally relevant factors of a situation as mostly requiring an isolated virtue alongside practical wisdom. Her theory does not do a good job explaining why the other virtues are necessary to these situations. She does ‘isolate’ the character traits to some //degree//. I don’t think she justifies it though. 

''[3c]''

	My theory of the unity of the virtues: there is only practical wisdom. All the other virtues are found inside practical wisdom. I think isolating character traits and specific moral virtues (other than wisdom) makes no sense whatsoever; I’m not convinced the non-wisdom virtues actually exist in this sense. I want to say that the situations which some people say require ‘courage’ are really situations in which practical wisdom is manifested so as to appear like courage. Practical wisdom is the only virtue, though. In my view, this is a much stronger unity thesis than what Hursthouse provides. The (so-called) ‘moral virtues’ either don’t exist at all or they are identical with wisdom (depending on how you want to look at it). Wisdom isn’t just the virtue, to the virtue ethicist, __virtue is wisdom__.

	Explaining Hursthouse’s views on practical wisdom would be its own paper (and beyond the scope of this question). I likely have a different view of what is meant by ‘wisdom’ -- so, in order to clarify what I mean by ‘virtue is wisdom’ (sounds like a modified “virtue is knowledge,” answering //akrasia//, etc., no?), let me first explain what I mean by wisdom (what I mean by practical and moral wisdom).
 
First, wisdom is rational thought about what is valuable, what is worth pursing, what one ought to do, what is right, the objective moral world. Moral thought and knowledge comprise the first half of Wisdom. Clearly, this isn’t a character trait by itself. To say a person is wise requires more than just moral knowledge and thought, it also requires that an agent reliably chooses and acts from this moral knowledge and thought. From my perspective, in order to explain ‘wisdom’ as a character trait, we need to add the element of the //will//.
 
The second half of wisdom is choosing to act (including mental acts) from and because of what you know is morally right. After all, the man with moral knowledge who doesn’t choose to act from it isn’t the sort I want to call ‘wise’. Wisdom, as the virtuous character, is about both moral knowledge/thought and willing it. 

Colloquially, we speak of wisdom as a type of knowledge. Insofar as one transmits moral knowledge, but doesn’t need to act on it (let us say that my grandfather was explaining a wise thing to me), we can call it ‘wisdom’ without will. But, wisdom as a character trait still requires reliably willing from moral knowledge. What exactly we mean by ‘reliable’ is cashed out in terms of averages and some broad temporal scope for which I’m unable to give an account (at this point). 

As you can see, crucial to my view of virtue ethics, particularly about how the unity of virtues relates to decision/action, is my disagreement with Hursthouse’s view of the primacy of the virtuous character. I agree with Hursthouse in claiming there are ‘degrees of virtue’. For example, one might be 38% virtuous, but that is just a result of an average of the rightness (and morally worth) of the decisions/actions for which one is responsible. Virtue, of course, is a measurement over time – in part a measurement of an agent’s reliability. In my view, the atomic elements (individual choices/smallest units of moral experience) which comprise the ‘virtuous character’ equation are the primitive objects of moral theory, not the resulting measurement. So, I agree to an absolute unity of the virtues (plainly, wisdom), but I don’t hold wise/virtuous character, as a measurement, to be primitive. 

	Note that my theory avoids the two objections I made about Hursthouse’s theory. I avoid my second objection to Hursthouse because my theory does not isolate the various moral virtues to any degree. Consequently, I also avoid my first objection. There are no wildly imbalanced and totally implausible characters as a result of my unity of virtue theory. There is merely an ‘appearance’ of charitable agents; actually, there are simply wise agents.  In this, we have no resulting 98% charity, and 1% of the other virtues. Talking of degrees of plain and totally unified wisdom or virtue, in this sense, seems intuitively more plausible to me. 
	

-----------------------------------------

<<footnotes "1" "Immanuel Kant, //Groundwork of the Metaphysics of Morals//, trans H.J. Paton (1964), 66">>
<<footnotes "2" "Ibid.">>
<<footnotes "3" "Ibid.">>
<<footnotes "4" "Ibid.">>
<<footnotes "5" "Phillipa Foot, “Virtues and Vices” in //Virtue Ethics//, ed. Roger Crisp and Michael Slote (Oxford and New York: Oxford University Press, 1997),  172">>
<<footnotes "6" "Ibid., 173">>
<<footnotes "7" "Ibid., 174">>
<<footnotes "8" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001), 92">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "Ibid.">>
<<footnotes "11" "Ibid., 93">>
<<footnotes "12" "Ibid., 98">>
<<footnotes "13" "Ibid.">>
<<footnotes "14" "Ibid., 97">>
<<footnotes "15" "Ibid., 102">>
<<footnotes "16" "Ibid.">>
<<footnotes "17" "Ibid., 103">>
<<footnotes "18" "Ibid., 104">>
<<footnotes "19" "Ibid., 106">>
<<footnotes "20" "Ibid., 107">>
<<footnotes "21" "Ibid., 137">>
<<footnotes "22" "Ibid., 136">>
<<footnotes "23" "Ibid., 137">>
<<footnotes "24" "Ibid.">>
<<footnotes "25" "Ibid.">>
<<footnotes "26" "Ibid.">>
<<footnotes "27" "Ibid.">>
<<footnotes "28" "Ibid., 137-138">>
<<footnotes "29" "Ibid., 137">>
<<footnotes "30" "Ibid., 138">>
<<footnotes "31" "Ibid.">>
<<footnotes "32" "Ibid., 139">>
<<footnotes "33" "Ibid., 140">>
<<footnotes "34" "Ibid., 127">>
<<footnotes "35" "Husain Sarkar. //Fall_2010_PHIL_4946.doc// (Baton Rouge: October 19, 2010), 6">>
<<footnotes "36" "Ibid., 140">>
<<footnotes "37" "Ibid., 153">>
<<footnotes "38" "Ibid., 131">>
<<footnotes "39" "Ibid., 153">>
<<footnotes "40" "Aristotle. //Nicomachean Ethics//, tr. J. A. K. Thomson, rev. H. Tredennick. (London: Penguin, 1976), 166">>
<<footnotes "41" "Ibid., 154">>
<<footnotes "42" "Ibid., 154">>
<<footnotes "43" "Ibid., 156">>

//--In Memory of Ian Crystal//

Aristotle holds ontology to be primitive to epistemology; his theory of the four causes, chance, and spontaneity are no exception. The four causes, in particular, are part of the conceptual link between the ontic and the epistemic. Without this theory of causation, in the eyes of Aristotle, the world would cease to be intelligible. The //Physics //(where we first see a description of his theory of causation) in some ways is a study of being qua movement, and Aristotle’s conceptual framework for this study is understood in terms of the four causes. He is clearly interested in describing change and motion (and defending these against the Eleatics), demonstrating the relationship between potentiality and actuality, aiding in the explanation of being and non-being, and justifying his account of essentialism and teleology. 

As an essentialist, Aristotle is deeply concerned with making sure we do not conflate the accidental with the essential. While he recognizes that the existence of the physical world is immediate and obvious (almost like a brute-fact), it seems as if natural sciences, which are studies of what is beyond that which is immediately obvious, require an explanation of change and motion. Before he goes on to give us this explanation (his theory of causation), Aristotle provides us a distinction between natural and artificial substances. This distinction will be further demonstrated within his causal theory as well. He explains:

<<<
Of things that exist, some exist by nature, some from other causes. By nature the animals and their parts exist, and the plants and the simple bodies (earth, fire, air, water)—for we say that these and the like exist by nature.<<ref "1">>
<<<

<<<
All the things mentioned plainly differ from things which are not constituted by nature. For each of them has within itself a principle of motion and of stationariness (in respect of place, or of growth and decrease, or by way of alteration). On the other hand, a bed and a coat and anything else of that sort, qua receiving these designations—i.e. in so far as they are products of art—have no innate impulse to change. But in so far as they happen to be composed of stone or of earth or of a mixture of the two, they do have such an impulse, and just to that extent—which seems to indicate that nature is a principle or cause of being moved and of being at rest in that to which it belongs primarily, in virtue of itself and not accidentally.<<ref "2">>
<<<

That which ‘exists by nature’ is a natural substance and that which is a ‘product of art’ is an artificial substance. Natural substances, as the name implies, are the sorts of substances which exist in nature and without an agent to change them. Conversely, artificial substances are generated by artists and do not occur naturally. Artificial substances could not exist without natural substances because the latter are the necessary preconditions and materials required for a technician to generate the former. 

Importantly, the difference between natural and artificial substances isn’t just a question of origin, but also a question of the nature of change and motion which inheres in each of these kinds of substance. Change occurs when a substance loses and gains accidental features (e.g. change in place, etc.), and the internality of change and motion differ between natural and artificial substances. An essential aspect of a natural substance is the principles of motion and change which are internal to it. Artificial substances don’t have these principles internal to them insofar as they are artificial, but they do insofar as they happen to be made of natural substances.  

This distinction between natural and artificial substance heeds Aristotle’s essentialism. Change is essential to the natural substance, but change is accidental to artificial substance. In analogous juxtaposition, change (as a principle) is essential (to the world), but change (of a property in a substance) is in some way accidental. These differences are further explained by Aristotle’s causal theory.

In further consideration of change and motion, in explaining being and non-being (including the passage into each), and in order to provide a foundation for the sciences (linking the ontic to the epistemic), Aristotle sets out a conceptual framework for causation. He explains:

<<<
Knowledge is the object of our inquiry, and men do not think they know a thing till they have grasped the ‘why’ of it (which is to grasp its primary cause). So clearly we too must do this as regards both coming to be and passing away and every kind of natural change, in order that, knowing their principles, we may try to refer to these principles each of our problems.<<ref "3">>
<<<

Let us first realize that this question ‘why?’ is fundamental to Aristotle’ teleological structure. In coming to acquire knowledge about the world in a complete sense, we must be able to fully answer the question ‘why?’. His causal theory is going to demonstrate how we can fully answer the question ‘why?’ regarding anything which is intelligible and how it is central to the link between the ontic realm and the epistemic realm.

So, any successful and coherent investigation of the world, according to Aristotle, requires that we understand the causes and teleological ends of things in the world. If it wasn’t possible to provide an explanation for the question ‘why a thing exists as it does?’, then the world wouldn’t be intelligible. Aristotle thinks this particular view of his is somewhat unique. While giving partial credit to his predecessors (e.g. the Monists and Plato) concerning this topic, he claims they had only vague notions of the causes (e.g. Plato is accused of only believing in material and formal causes), and that he alone is able to provide the true account of the causes.<<ref "4">>  In this, he is also alluding to limits to the viability of the scientific inquiry of his predecessors because they lacked an adequate theory of the causes.

One other major point of context to his causal theory that we need to consider is the word ‘cause’, which needs to be interpreted carefully and fleshed out.  Aristotle’s understanding of the word ‘cause’ (//aitia//) is broader than the modern sense; it might be thought of as an explanation (a broader term in modernity). ‘Cause’ is likely the better word because the connotation of ‘explanation’ misleadingly emphasizes an epistemic view of substances, which fails to highlight the primacy of ontology in Aristotle’s worldview. The word ‘cause’ (overall) might then best capture both the ontic structure of (Aristotle’s) reality and how we understand the world. Lastly, and at the risk of redundancy, a crucial component to understanding Aristotle’s view of an adequate theory of //causation //is realizing that he is setting out the conceptual framework for a teleological explanation of things. His essentialism and teleology are arch motivations in providing his account of causation. 

There are causes for all substances (else, they wouldn’t be intelligible). Aristotle answers and explains both the ontic and epistemic ‘why’ through four causes: material, formal, efficient, and final. He explains the first cause:

<<<
In one way, then, that out of which a thing comes to be and which persists, is called a cause, e.g. the bronze of the statue, the silver of the bowl, and the genera of which the bronze and the silver are species.<<ref "5">>
<<<

Here, Aristotle introduces the first cause, referred to as the //material cause//. It is the matter which comprises a thing. The material cause is the matter which is the subject of change. The material cause is “that out of which” a substance is made and explained. An example of the material cause of a natural substance would be the flesh and bone (material) which comprises the matter of Socrates (substance). Take a house as an example of an artifact (artificial substance); its material cause is the wood and bricks of which it is constructed. Note that the natural wood of a tree and the bricks’ natural clay and minerals are the subjects of change. These are examples of primary substance (‘primary’ as understood in his categories); the material cause of secondary substance, however, would simply be ‘matter’. 

Importantly, matter can be viewed in two ways, both as physical stuff and also as potentiality. Matter only has no meaning outside the other causes; it is only conceptually discreet in our minds, but never truly independent of substance and the other causes. The wood of a tree is potentially a bed, but it is not actually a bed simply because it is wood. The carpenter manipulates wood to receive the form of bed. Conceptually linked to the idea of potentiality, the shape and form which matter takes on will lead us to Aristotle’s next cause; he explains:

<<<
In another way, the form or the archetype, i.e. the definition of the essence, and its genera, are called causes (e.g. of the octave the relation of 2:1, and generally number), and the parts in the definition.<<ref "6">>
<<<

Aristotle introduces us to what we call the formal cause. The formal cause is the definition of a thing. It is the shape and form that matter takes on. 

Aristotle’s essentialism seems emphasized in the// formal cause//. The essential features of a substance, those things which are necessary conditions of a substance’s being, comprise its formal cause. Aristotle thinks you really can’t answer ‘why?’ a thing exists as it does without understanding the essential characteristics of a substance. Clearly, the formal cause is necessary to give an account of the shape and form (//eidos//) of a substance. These first two causes are central components of Aristotle’s //Hylomorphism//, the notion that a substance is a composite of form and matter.  Consider that while the material cause of the bed is wood, it is the shape and form of bed-ness that the wood takes on which counts as the formal cause. Note how material cause alone isn’t sufficient to causally explain the bed, and the formal cause is also a necessary ingredient (though the sum of just these two aren’t sufficient either) in the causal explanation.
	
The formal cause does have a special relationship with the material cause, but it can also be understood to have a special relationship with the final cause (which we will get to in a bit). At this point, we can at least see that the formal cause points out Aristotle’s distinction between potentiality and actuality. In fact, the formal cause is exclusively potentiality. This form is, however, associated with something’s actuality. Each of us has the form of human being inhering in us, and as a consequence, we are human beings. You can’t just ‘potentially’ be a human being.  The relationship between the formal and final cause demonstrates part of the relationship between Aristotle’s conception of potentiality and actuality, the formal cause being analogous to potentiality.

The formal cause of a house is the definition of a house, namely, a shelter constructed for people to live in. The formal cause of a secondary substance would be its species. The formal cause of a man is being a rational biped. Note that in answering Aristotle’s ‘why?’, these definitions in themselves (insofar as this cause is conceptually discreet from the others) are strictly potential and not actual instantiations of substance at this point in the causal process.

Peculiarly, the formal causes of natural and artificial substances differ. The formal causes of natural substances are definitions which are independent of agents and technicians. Just because a person doesn’t grasp the definition of horse does not mean that horses don’t exist or that they lack formal cause. The definition of horse is external to our human minds, and the definition does not exist in virtue of us in any way. Unlike natural substances, the formal causes of artifacts are in some way dependent upon agents. The formal cause of an artifact is in the mind of the technician who generates the artifact. It is the definition of an artifact which is dependent upon being in the mind of an agent who possesses the corresponding //techné//. So, the ‘idea of the house’ inheres in the house-builder who applies the techné of house-building to construct the house. This example nicely leads us to Aristotle’s next cause:

<<<
Again, the primary source of the change or rest; e.g. the man who deliberated is a cause, the father is cause of the child, and generally what makes of what is made and what changes of what is changed.<<ref "7">> 
<<<

This is what we refer to as the //efficient cause//. The efficient cause is that source which literally causes a thing (in the modern sense of the word ‘cause’). An efficient cause could be the agent of change and motion which brings about a thing. Clearly, Aristotle’s efficient cause is much closer to what we normally understand a cause to be because it encompasses the preceding agent (the cause) whose acts and motion bring about an effect.

Consider examples (some of which aren’t as easy we might initially assume): parents are clearly the efficient causes of children (natural substances), easy. For secondary substance, the efficient cause is conceptually there (difficult to see though), namely, God is the efficient cause as the highest principle (although he isn’t the creator of the species, as we think in the Judeo-Christian tradition). The efficient cause of a house would be the house-builder applying his art of house-building. Oddly enough, in describing the relationship between what is potential and actual, we come to see that there might be several ways to describe the efficient cause of a thing (perhaps especially so for artificial substances). Aristotle explains:

<<<
All causes, both proper and accidental, may be spoken of either as potential or as actual; e.g.  the cause of a house being built is either a house-builder or a house-builder building.<<ref "8">>
<<<

<<<
In investigating the cause of each thing it is always necessary to seek what is most precise (as also in other things): thus a man builds because he is a builder, and a builder builds in virtue of his art of building. This last cause then is prior; and so generally.<<ref "9">>
<<<

Given the possibility of having multiple ways to describe a thing’s efficient cause, we should be careful in selecting that which is truly essential (and not accidental) to being something’s efficient cause. In consideration of the above passage, and in an attempt to discern what is essential to being the efficient cause, it seems that at least in part, the art of the technician is the efficient cause of an artifact. If this is the case, then while we can say the house-builder applies the art of house-building (and thus he is somehow part of this process), the house as an artifact exists in virtue of the art of house-building which inheres in the mind of the house-builder. So, perhaps, the efficient cause of the house is to some extent the art itself, even though the art’s existence is dependent in some way upon inhering in the mind of artist. Like the difficulty in making sense of the efficient cause of secondary substances, describing the efficient cause of artifacts is not as straightforward as moderns might initially assume.

Note how the efficient cause directs us to Aristotle’s teleological worldview. The efficient cause is clearly linked to the steps of a thing’s coming into being. The house-builder uses particular materials instead of others, pieces together the various parts of wood and brick in a certain form or shape, and employs his art by using specific tools of his craft in a certain way. While these three causes are often the only sorts of things that many people would consider to be a ‘cause’ of a thing, they are not complete and they are independent of the end. Aristotle thinks there is more required to answering the question ‘why?’. Clearly, the first three causes all have purpose, and all the steps in this causal process exist in virtue of the teleological end. Thus, Aristotle completes this conceptual framework with his fourth cause:

<<<
Again, in the sense of end or that for the sake of which a thing is done, e.g. health is the cause of walking about.  (‘Why is he walking about?’  We say: ‘To be healthy’, and, having said that, we think we have assigned the cause.)  The same is true also of all the intermediate steps which are brought about through the action of something else as means towards the end, e.g.  reduction of flesh, purging, drugs, or surgical instruments are means towards health. All these things are for the sake of the end, though they differ from one another in that some are activities, others instruments.<<ref "10">>
<<<

This is the// final cause//. The final cause is the teleological end and the realization of the definition. It is the formal cause actualized. You can’t overstate Aristotle’s reliance upon the final cause in this teleology. We should note the stark contrast between the potentiality of the formal cause and the actuality of the final cause. Obviously, the formal and final causes are inextricably linked. The final cause of the house is the actuality of the house, where people live in it and use it as a house. For secondary substance, the final cause is the realization and actual existence of those species. The final cause of man is an actual rational biped. There would be no purpose in talking about the other causes if you didn’t have the final cause, the actual substance.

Granted, the final is perhaps the most controversial of the causes for some critics (and Aristotle spends time trying to defend his final cause). The fourth and final cause seems the most essential of the four causes; arguably it has the highest explanatory status of the four causes. Change, motion, potentiality, matter, and form are not intelligible outside of what is actual, namely the teleological cause, the end, the final cause. The process of generation is for the sake of (and can only be properly explained and understood by) the actual end. Aristotle’s primacy of ontology is clearly demonstrated in the significance of and emphasis on the final cause.

Connecting the causes together, we can see that Aristotle wishes to answer the question ‘why’ about all substances using this teleological theory of causation. In doing science, and in making the world intelligible, we must employ this causal framework. Aristotle’s theory of causation provides a structure to make sense of being and non-being, chance and motion, certain vital components of the relationship between potentiality and actuality, and his teleology and essentialism at large.

After Aristotle lays out his theory of causation, he considers the implications (and possibility of) small elements of randomness in the world and those things which are unintentional, unexpected, undetermined, and coincidental (which initially might seem problematic for his teleology). He refers to this as chance and spontaneity. It is fitting that this section comes after his four causes because, of course, we should have serious questions about the nature (and explanation) of what might be random and indefinite within his teleological framework. How do you make sense of what is coincidental in such an end-based and purpose-filled view of the universe? (I daresay this question remains a damned good one.) Aristotle attempts to show the dependent relationship of chance and spontaneity upon the four causes. Interestingly, his construction of this account is also deeply motivated by a desire to have a middle path between the extremes of determinism and a skepticism which claims the world is utterly, entirely random and chaotic. Crucially, if chance and spontaneity cannot be explained by the causes, it seems as though the world, to some extent, is unintelligible. To start, Aristotle gives us some informal criteria for what sorts of things do not qualify as chance. He says:

<<<
First then we observe that some things always come to pass in the same way, and others for the most part. It is clearly of neither of these that chance, or the result of chance, is said to be the cause—neither of that which is by necessity and always, nor of that which is for the most part.<<ref "11">>
<<<

Things which consistently come to pass are not usually the sorts of things which we deem to be events of chance or spontaneity. The sorts of things which always come to pass in the same way, or even for the most part in the same way, are softly determined, so it isn’t much of a leap to say that these can’t qualify as chance or spontaneity. So, things which do not come to pass for at least the most part are the sorts of things which can qualify as either chance or spontaneity. Aristotle explains what else is necessary for chance (as opposed to spontaneity):

<<<
Of things that come to be, some come to be for the sake of something, others not. Again, some of the former class are in accordance with intention, others not, but both are in the class of things which are for the sake of something.  Hence it is clear that even among the things which are outside what is necessary and what is for the most part, there are some in connexion with which the phrase ‘for the sake of something’ is applicable.  (Things that are for the sake of something include whatever may be done as a result of thought or of nature.) Things of this kind, then, when they come to pass accidentally are said to be by chance.<<ref "12">>
<<<

Chance is clearly about being ‘for the sake of something’, in accordance with intention, requiring an agent (e.g. man), and, most importantly, it must be accidental. Chance requires an agent, and it is in part a description of the accidental and random events which cross the path of an agent. Aristotle gives us his example of chance:

<<<
A man is engaged in collecting subscriptions for a feast.   He would have gone to such and such a place for the purpose of getting the money, if he had known.  He actually went there for another purpose, and it was only accidentally that he got his money by going there; and this was not due to the fact that he went there as a rule or necessarily, nor is the end effected (getting the money) a cause present in himself—it belongs to the class of things that are objects of choice and the result of thought.  It is when these conditions are satisfied that the man is said to have gone by chance. If he had chosen and gone for the sake of this—if he always or normally went there when he was collecting payments—he would not be said to have gone by chance.<<ref "13">>
<<<

The man went somewhere intending to do X, and it just so happened, by accident, that he also happened to fulfill a different end, namely getting his money (which wasn’t X). The man chose and intended for X, but an unintentional effect was getting his money. In this case, when the man crosses paths with a person who owes a subscription for the feast, neither person had intended, in each of their cause paths, this transaction of money; rather, the ends, the ‘for the sake of’ which they had started on their paths,  were about something else altogether, with different purposes and ends. It is only by accident that some other purpose, the ‘getting of money’ for this man, is somehow accomplished on his way towards something else. Clearly, chance (and spontaneity as well) requires two paths to cross.

Note how the causal chain of the man can be described by the four causes. The path that each man took and the teleological structure of their intentions are clearly understood and made intelligible by the four causes. It is only when two (or more) distinct causal chains just by happenstance overlap, and strictly at the point of contact of that overlap, that there can possibly be an occurrence of chance or spontaneity. Aristotle continues:

<<<
It is clear then that chance is an accidental cause in the sphere of those actions for the sake of something which involve choice. Thought, then, and chance are in the same sphere, for choice implies thought.<<ref "14">>
<<<

The sorts of accidents which are related to choice and reason are different, in some way, from what is spontaneous. Insofar as this accidental or indefinite occurrence is the result of the choice of man, then it is said to be chance. Aristotle elaborates on the differences between chance and spontaneity:

<<<
They differ in that spontaneity is the wider. Every result of chance is from what is spontaneous, but not everything that is from what is spontaneous is from chance.<<ref "15">>
<<<

Chance events are a subset of spontaneous events. The distinction of spontaneous events of agents from non-agents makes a great deal of sense when we consider the significance of reason and choice in Aristotle’s cosmos. Aristotle seeks to differentiate agents with reason and choice throughout his teleological system, and his division of chance and spontaneity continue that mode of thought. The argument continues:

<<<
Chance and what results from chance are appropriate to agents that are capable of good fortune and of action generally.  Therefore necessarily chance is in the sphere of actions. This is indicated by the fact that good fortune is thought to be the same, or nearly the same, as happiness, and happiness to be a kind of action, since it is well-doing.  Hence what is not capable of action cannot do anything by chance.  Thus an inanimate thing or a beast or a child cannot do anything by chance, because it is incapable of choice.<<ref "16">>
<<<

<<<
The spontaneous on the other hand is found both in the beasts and in many inanimate objects.  We say, for example, that the horse came spontaneously, because, though his coming saved him, he did not come for the sake of safety. Again, the tripod fell spontaneously, because, though it stood on its feet so as to serve for a seat, it did not fall so as to serve for a seat.<<ref "17">>
<<<

Obviously, the indefinite aspects of inanimate objects seem to fall into this category of spontaneity, but it isn’t so obvious (without context) why children don’t count as having choice. Note that while children are human, they aren’t (in Aristotle’s understanding) fully developed humans, and they haven’t fully reached their ends as rational bipeds. In lacking elements of reason and choice, the sorts of accidents which they happen upon aren’t chance, only spontaneity. Aristotle clarifies even further:

<<<
It is necessary, no doubt, that the causes of what comes to pass by chance be indefinite; and that is why chance is supposed to belong to the class of the indefinite and to be inscrutable to man, and why it might be thought that, in a way, nothing occurs by chance.   For all these statements are correct, as might be expected.  Things do, in a way, occur by chance, for they occur accidentally and chance is an accidental cause.  But it is not the cause without qualification of anything; for instance, a housebuilder is the cause of a house; accidentally, a fluteplayer may be so.<<ref "18">>
<<<

<<<
Spontaneity and chance are causes of effects which, though they might result from intelligence or nature, have in fact been caused by something accidentally. Now since nothing which is accidental is prior to what is per se, it is clear that no accidental cause can be prior to a cause per se. Spontaneity and chance, therefore, are posterior to intelligence and nature.  Hence, however true it may be that the heavens are due to spontaneity, it will still be true that intelligence and nature will be prior causes of this universe and of many things in it besides.<<ref "19">>
<<<

Chance and spontaneity are parasitic upon and understood through the four causes. We might call them pseudocauses because of this. There are causal explanations for each of the crossing paths, and Aristotle says in order to even begin to understand the nature of the crossing, we must first describe the causal chains through the four causes. The four causes are a precondition to the pseudocauses, chance and spontaneity.

Chance and spontaneity can only occur when two independent causal chains meet or cross by happenstance. The exact point of contact of two causal chains is where chance and spontaneity occur and have meaning. Notice that without two causal chains meeting at a crossroads, there would be no chance and spontaneity. That is also to say then that without the four causes, no causal chains would exist, and thus no events of chance and spontaneity would exist; this is why they are called parasitic upon the four causes.
Similar to Aristotle’s example, an example of a chance would be my going to the store to buy some chips. The end I am seeking is to buy chips. Now, by happenstance, I run across a guy to whom I owe money at the store. Importantly, my creditor had come to the store to buy pretzels. Neither of us had come to the store for the purpose of meeting each other; neither of us had come to the store intending that I pay my debt there. We both had different ends in mind. It was mere chance that our independent causal chains overlapped at the store. It just so happens that I am required to forego my chips to pay back my debt that night. 

Crucial to this picture of two (or more) paths intersecting by happenstance is the underlying causal structure which is a necessary prerequisite to making sense of what has happened. You can explain my path to the store via the four causes, and it had nothing to do with my creditor. You can explain my creditor’s path to the store through Aristotle’s theory of causation, and it likewise had nothing to do with my paying my debt. Without the four causes, we’d have no paths to consider in the first place.

The four causes explain our activities and independent causal chains. It is only at the point of contact of our independent causal chains, whereby I am unexpectedly forced to repay my debt, for example, that we can understand Aristotle’s conception of chance. Spontaneity falls in the same vein of reasoning, the difference being that it isn’t the causal chains of agents; rather, it describes the above for non-agents.

It is important that Aristotle took the time to describe chance and spontaneity. If chance and spontaneity were too prevalent and too important to the world, and there was mass chaos and pure randomness, then we couldn’t do science. There would be point to it. Too much randomness is obviously against the intelligibility of the world which Aristotle deems to be so crucial. If there was no chance and spontaneity in the world, however, then everything would be determined, which is a supposition Aristotle wishes to avoid. Aristotle’s description of chance and spontaneity as being parasitic upon the four causes is a middle path between these extremes.

Aristotle helps give a more complete causal theory by including an explanation of chance and spontaneity. He is responding to his predecessors, and he is also providing a way to make sense of a world with both teleological ends and elements of indeterminacy. The inclusion of an explanation of indeterminacy is also significant because it makes it somewhat more difficult to criticize his teleological view, as it remains fairly self-consistent as an argument in general and also capable of answering the question ‘why?’ in a wide variety of circumstances. 

Aristotle’s theory of causation in conjunction with the pseudocauses, chance and spontaneity, provide the groundwork for the intelligibility of the world. These notions clarify and explain how Aristotle conceives of potentiality and actuality, the passage into and out of being, chance and motion, particular aspects of his essentialism, and his deeply-rooted teleology.

--------------------------------------

<<footnotes "1" "Aristotle. //Complete Works of Aristotle: The Revised Oxford Translation//. Edited by J. Barnes. 2 vols. Bollingen Series.  (Princeton, NJ:  Princeton University Press, 1984),  Physics, Book 2, §1, 192b9-192b11">>
<<footnotes "2" "Physics, Book 2, §1, 192b12-192b23">>
<<footnotes "3" "Physics, Book 2, §3, 194b16-194b23">>
<<footnotes "4" "Metaphysics, Book I, §7, 988a18-988a32">>
<<footnotes "5" "Physics, Book 2, §3, 194b24-194b26">>
<<footnotes "6" "Physics, Book 2, §3, 194b27-194b29">>
<<footnotes "7" "Physics, Book 2, §3, 194b30-194b32">>
<<footnotes "8" "Physics, Book 2, §3, 195b4-195b7">>
<<footnotes "9" "Physics, Book 2, §3, 195b22-195b25">>
<<footnotes "10" "Physics, Book 2, §3, 194b33-195a2">>
<<footnotes "11" "Physics, Book 2, §5, 196b10-196b17">>
<<footnotes "12" "Physics, Book 2, §5,  196b18-196b32">>
<<footnotes "13" "Physics, Book 2, §5, 196b33-197a5">>
<<footnotes "14" "Physics, Book 2, §5, 197a6-197a7">>
<<footnotes "15" "Physics, Book 2, §6, 197a37-197a39">>
<<footnotes "16" "Physics, Book 2, §6, 197b1-197b13">>
<<footnotes "17" "Physics, Book 2, §6, 197b14-197b17">>
<<footnotes "18" "Physics, Book 2, §5,  197a8-197a15">>
<<footnotes "19" "Physics, Book 2, §6, 198a5-198a13">>

---------------------------------------

''Bibliography''

Aristotle. //Complete Works of Aristotle: The Revised Oxford Translation//. Edited by J. Barnes. 2 
vols. Bollingen Series.  (Princeton, NJ:  Princeton University Press, 1984).

Butler, Jim. “Ancient Philosophy.” Class lectures, Berea College, Fall 2003.

Crystal, Ian. “Aristotle.” Class lectures, Louisiana State University, Fall 2010.

Stanford Encyclopedia of Philosophy. “Aristotle on Causality.” http://plato.stanford.edu/entries/aristotle-causality (accessed November 15, 2010).

Let me first offer some background information, connect Book 12 to the rest of the metaphysics, and offer a preliminary summation of the overall argument in Book 12. Hopefully, I can give some context to help make more sense of this difficult passage before we actually read it. So, let me start with the mile-high view and work our way towards the exegesis and details.

Book 12 (Lambda) is the culmination of Aristotle's work in metaphysics, and in it he offers the ultimate end of his teleological system. As in much of the metaphysics, Book 12 studies what is eternal, unchanging, and independent of matter. This study is the highest science and first philosophy. In some sense, Book 12 is really going to demonstrate why metaphysics isn’t about the study of things “better known to us,” but rather the study of things that are “better known in themselves.” This study of ‘Being qua Being’ is in some sense theology. 

Aristotle takes the stand that the actual is of its nature antecedent to the potential.  Importantly, potentiality has two sides; anything that is ‘capable of being’ is also ‘capable of not being’. What is capable of not being might possibly not be, and what might possibly not be is perishable. Hence anything with the mere ‘potentiality to be’ is perishable. In contrast, what is eternal is imperishable, and so nothing that is eternal can exist only potentially — what is eternal must be fully actual. But the eternal is prior in substance to the perishable - for the eternal can exist without the perishable, but not conversely, and that is what priority in substance amounts to. So what is actual is prior in substance to what is potential.

A consequence of this idea, as we will see, is that there must exist a Being Who is pure actuality, and Whose life is self-contemplative thought. The Supreme Being imparted movement to the universe by moving the First Heaven; the movement emanated from the First Cause, however, isn’t the normal sort of physical causation we think of, but rather causation by being desirable - in other words, the First Heaven, attracted by the desirability of the Supreme Being "as the soul is attracted by beauty", was set in motion, and imparted its motion to the lower spheres and thus, ultimately, to our terrestrial world. Also, according to this theory, God never leaves the eternal repose of thinking. Aristotle explains the necessity of God. Aristotle’s God is the Unmoved mover; the Prime mover. As final causes go, God is the ultimate. He is the final goal and purpose towards which all things move. 

There are three kinds of substances considered:

#changeable and perishable (e.g., plants and animals)
#changeable and eternal (e.g., heavenly bodies)
#unchangeable and eternal – immutable (e.g. God)

Why are these distinctions important to Aristotle? Well, if everything was changeable and perishable, and essentially, everything was going to perish, then the world in itself would not be eternal. However, Aristotle thinks there are things which don’t perish, e.g. motion and time are eternal. This is interesting because if time weren’t eternal, and rather it was something that was created, then it would seem as if ‘something before’ the existence of time created ‘time’. The very concept of time seems to necessarily presuppose the existence of time before one could even talk about the ‘hypothetical creation of time’. Thus, time isn’t ‘created’, it is simply eternal and doesn’t perish. Problematic to the discussion, at least in my view, is that matter, motion, the heavens, and in this case, time, are eternal, and so we want to say that Aristotle’s world is in some way eternal. Yet, it is caused. How can a thing be caused and yet also be eternal?

“The heavens” is another contextual reference you need to understand to appreciate what Aristotle is saying here. Like time, the circular motion of ‘the heavens’ is eternal. These heavenly bodies are a very good example of the second kind of substance, namely what is changeable and eternal, which is different from the first kind because it doesn’t perish like plants and animals. We’re going to see these ‘heavens’ at the beginning of chapter 7; this is a part of Aristotle cosmology. What exactly are ‘the heavens’ or ‘first heaven’? What does his cosmic system look like? Think of it this way:

The Earth is the center of the cosmic system; it is a spherical, stationary body, and it is the realm of sensible perishing substances, a realm of chaotic motions. Around the Earth revolve other eternal substances, namely spheres in which are fixed the moon, the sun, and planets. The First Heaven, which plays so important a part in Aristotle's general cosmogonic system, is the heaven of the fixed stars. It surrounds all the other spheres and, being endowed with intelligence, it turned toward the God, drawn, as it were, by His Desirability, and it thus imparted to all the other heavenly bodies the circular motion which is natural to them. This cosmological doctrine and general concept of nature becomes the ‘standard view’ for millennia. This view didn’t change until the time of Newton and Galileo, and the birth of modern physical science. Their paradigm shift was truly revolutionary. E.g. Newton conceived of motion persisting without a mover, of force at a distance, and of heavenly gravitation being identical to the terrestrial laws of falling bodies, thus denying Aristotle's separation between the purity of the heavens and the perishability of the earth.

Note that the Unmoved mover is the only being who could generate eternal circular motion (not billiard hitting billiard balls, but in some other way). The Unmoved Mover is the ultimate cause of the universe, and He is pure actuality, containing no matter since He is the very cause of Himself. In order for the mover to be unmoved Himself, He must move in a non-physical way, by inspiring desire.

Aristotle gives the Unmoved mover the name of God, but this figure is unlike most standard conceptions of a divine being. Though Aristotle asserts that He is a living creature and represents the pinnacle of goodness, He also has no interest in the world and no recognition of man, for He exists in a completely transcendent and abstract state. The activity of God–if it can be called such–is simply knowledge, and this knowledge is purely a knowledge of Himself, because an abstracted being is above sense and experience and can know only what is best. Some have interpreted this to mean that God, in knowing Himself, implicitly knows everything else, but Aristotle flatly denied this view. In fact, he believed, for example, that God would have no knowledge of evil. Thus Aristotle's conception is full of apparent paradoxes. God is the ultimate cause of everything in the world, but He also remains completely detached.  Of course, the famous account Aristotle’s argument for the existence of God looks like the following:

#There exists movement in the world.
#Things that move were set into motion by something else.
#If everything that moves were caused to move by something else, there would be an infinite chain of causes. This can't happen. (Aristotle denies infinite regresses)
#Thus, there must have been something that caused the first movement.
#From 3, this first cause cannot itself have been moved.
#From 4, there must be an Unmoved mover.

So circling back once more: Actuality is prior to potentiality. God is pure actuality. All other things owe their movement to God. God causes the First heavens to move, and the movement is transferred to all other things, including the perishables and what is potential. To be moved or caused by God is to move via desire for God. God is eternal and unchanging. The ultimate aspect of God is His self-thinking thought. 

Let’s move into the text now. 

Section 7:

1072a19-1072a36:

<<<
Since this is a possible account of the matter, and if it were not true, the world would have proceeded out of night and ‘all things together’ and out of non-being, these difficulties may be taken as solved. There is, then, something which is always moved with an unceasing motion, which is motion in a circle; and this is plain not in theory only but in fact. Therefore the first heavens must be eternal. There is therefore also something which moves them.  And since that which is moved and moves is intermediate, there is a mover which moves without being moved, being eternal, substance, and actuality.
<<< 

For Aristotle, the first heaven moves in unceasing, circular motion, which means that the first heaven is eternal. The first heaven then communicates motion to all other things. What is eternally in motion as an intermediate, such as the first heavens, however, requires an Unmoved mover to cause it. The Prime mover is an eternal, fully-actual substance that moves the first heaven without Himself being moved, either self-moved or moved by something else. Being unmovable is in some sense being fully actual; God would be movable if and only if God was less than pure actuality and was in some sense or to some degree mere potentiality. 

<<<
And the object of desire and the object of thought move in this way; they move without being moved. The primary objects of desire and of thought are the same. For the apparent good is the object of appetite, and the real good is the primary object of wish. But desire is consequent on opinion rather than opinion on desire; for the thinking is the starting-point. And thought is moved by the object of thought, and one side of the list of opposites is in itself the object of thought; and in this, substance is first, and in substance, that which is simple and exists actually. (The one and the simple are not the same; for ‘one’ means a measure, but ‘simple’ means that the thing itself has a certain nature.) But the good, also, and that which is in itself desirable are on this same side of the list; and the first in any class is always best, or analogous to the best.
<<<

Aristotle points out that the object of desire and of thought move as an ‘Unmoved mover’ in some sense, for they cause motion in those who desire and think, but do not themselves move. For example, let's consider an ‘object or agent of desire’--a beautiful woman. Imagine an exceptionally beautiful woman sitting in a coffee shop. She minds her own business, head buried in a newspaper and sipping coffee. Now imagine some man takes notice of her (perhaps he is in some sense a patient), he is attracted to her and goes to her to initiate conversation. As between the man and the woman, the woman is the "unmoved-mover", being an object of desire for the man. She stimulates the man to come over to her. She is an unmoved mover (in this sense) because she did not engage in any specific activity to bring the man closer to her or to have him initiate conversation. The woman causes the man "to move", but this causality is different than, say, the sort of causation that is involved when someone playing billiards hits a ball--the player is not an unmoved mover. He is engaged in some positive activity to set the cue ball in motion, i.e. propelling it in motion with a pool stick. And so, Aristotle would argue that the Unmoved mover causes motion in a way that is analogous to the attractive woman rather than the pool player. However, comparing the charms of a beautiful woman to the motivating force of the Unmoved mover is not a perfect analogy. Unlike the attractive woman, the very nature or substance of the Unmoved mover causes the motion of the universe, not some accidental quality, as in the case of the attractive woman. Physical beauty is not an inherent quality of human-being-ness, but exists by accident just as anger existed "by accident" in Socrates. In contrast, God is far more essential and necessary to Aristotle’s view of teleology.

1072b13-1694:

<<<
That that for the sake of which is found among the unmovables is shown by making a distinction; for that for the sake of which is both that for which and that towards which, and of these the one is unmovable and the other is not. Thus it produces motion by being loved, and it moves the other moving things. 
<<<

The Unmoved mover moves by being the final cause of the motion of the first heaven, insofar as it is the object of love. The Unmoved mover as ‘final cause’ causes motion by being loved, whereas all other (moved) movers cause motion by first being moved. These are intermediates. God, however, is first and unmoved. Everything else moves towards God because he moves them, but without Himself being moved. 

<<<
Now if something is moved it is capable of being otherwise than as it is.  Therefore if the actuality of the heavens is primary motion, then in so far as they are in motion, in this respect they are capable of being otherwise,—in place, even if not in substance. 
<<<

The first heaven is subject to change with respect to place (locomotion), though not with respect to substance (ousia), since it is eternal; locomotion is the primary type of change, and ‘motion in a circle’ is the primary type of locomotion. God could not impart motion as the first efficient cause, because to do so God would have to be in motion, and if God were in motion, then God would be moved and movable.  Besides, there is no beginning to the process of eternal motion, no creation. So, what is implicit in Aristotle's argument is that the first heaven has intelligence, or soul, in order to love the Unmoved mover and so allow the latter to function as final cause. The circular motion of the first heaven is an expression of a love of the Unmoved mover, because such motion is the attempt to imitate the eternal and unchanging first cause: circular motion stands closest to motionless eternity, because, in a sense, in rotation no real locomotion occurs, since that which is moving in a circle always returns to where it started.

<<<
But since there is something which moves while itself Unmoved, existing actually, this can in no way be otherwise than as it is. For motion in space is the first of the kinds of change, and motion in a circle the first kind of spatial motion; and this the first mover produces.  The first mover, then, of necessity exists; and in so far as it is necessary, it is good, and in this sense a first principle. For the necessary has all these senses—that which is necessary perforce because it is contrary to impulse, that without which the good is impossible, and that which cannot be otherwise but is absolutely necessary.
<<<

It follows that the Unmoved mover cannot be otherwise than He is. God’s necessary existence in this sense gives Him prime status in Aristotle’s view of the world. God’s necessity consists in the fact that He cannot be otherwise but can exist only in a single way; in other words, His necessity is a result of His lacking all potentiality.
 
1072b31-1695:	

<<<
On such a principle, then, depend the heavens and the world of nature.
<<<

The Prime mover is also a first principle, for the Prime mover explains everything else because He causes all motion. The quality that allows the Unmoved mover to set the rest of the universe in motion is thus not accidental, but essential. For Aristotle, the universe is not infinite, but a circular chain of finite things which are eternally in motion. Outside this finite circle of things, this first principle keeps everything in motion while remaining unmoved.

<<<
And its life is such as the best which we enjoy, and enjoy for but a short time.  For it is ever in this state (which we cannot be), since its actuality is also pleasure. (And therefore waking, perception, and thinking are most pleasant, and hopes and memories are so because of their reference to these.) And thought in itself deals with that which is best in itself, and that which is thought in the fullest sense with that which is best in the fullest sense.
<<<

According to Aristotle, the Unmoved mover, God, eternally does one thing (but this is not self-movement), which is the best thing: God thinks. Eternal contemplation is what He does. Aristotle points out that we as humans in some sense partake in God or enjoy what God enjoys, temporarily, when we employ our reason and are actually (not potentially) thinking. 

<<<
And thought thinks itself because it shares the nature of the object of thought; for it becomes an object of thought in coming into contact with and thinking its objects, so that thought and object of thought are the same. For that which is capable of receiving the object of thought, i.e. the substance, is thought. And it is active when it possesses this object. Therefore the latter rather than the former is the divine element which thought seems to contain, and the act of contemplation is what is most pleasant and best.  If, then, God is always in that good state in which we sometimes are, this compels our wonder; and if in a better this compels it yet more. And God is in a better state. And life also belongs to God; for the actuality of thought is life, and God is that actuality; and God’s essential actuality is life most good and eternal. We say therefore that God is a living being, eternal, most good, so that life and duration continuous and eternal belong to God; for this is God.
<<<

God thinks about the best thing, which is thought (since thinking is the best of activities), so that thought and its object are the same: God's thinking about His own thinking. In addition, Aristotle says that, because God thinks, God is alive. What Aristotle means by life's being the actuality of thought is that only living substances can think, so that, if he actually thinks, God must be alive. What it means for God to be alive—apart from the fact that God thinks—is not, however, clarified; certainly, for God to be alive is different than for other substances to be alive, since God has no matter. Whatever exactly might be His state of existence and the way in which He is alive is better than what we have, though. After all, we aren’t in eternal contemplation, and He is. 

1073a3-1695:

<<<
Those who suppose, as the Pythagoreans and Speusippus do, that supreme beauty and goodness are not present in the beginning, because the beginnings both of plants and of animals are causes, but beauty and completeness are in the effects of these, are wrong in their opinion.  For the seed comes from other individuals which are prior and complete, and the first thing is not seed but the complete being, e.g.  we must say that before the seed there is a man,—not the man produced from the seed, but another from whom the seed comes.
<<<

All things exist in virtue of God. While in some way humans can be understood to generate other humans, they cannot be understood, in the end, to exist independently of God. It may also be implied that God is supremely beautiful and good, since supreme beauty and goodness must be from the beginning in order to be in any way part of the finished product.

1073a13-1695

It is clear then from what has been said that there is a substance which is eternal and unmovable and separate from sensible things. It has been shown also that this substance cannot have any magnitude, but is without parts and indivisible. For it produces movement through infinite time, but nothing finite has infinite power.  And, while every magnitude is either infinite or finite, it cannot, for the above reason, have finite magnitude, and it cannot have infinite magnitude because there is no infinite magnitude at all.  But it is also clear that it is impassive and unalterable; for all the other changes are posterior to change of place. It is clear, then, why the first mover has these attributes.

Aristotle calls God a substance (//ousia//), but differentiates this substance from all other substances, insofar as He is "eternal, unmovable and separate from sensible things." God is separate from sensible things because God has no magnitude (//megethos//), meaning that God is without a body or a spatial existence. The reason that God can have no magnitude is that God produces motion through infinite time, which means that God must be infinite in some sense, since an infinite effect requires an infinite cause; however, Aristotle also claims there cannot be such a thing as an infinite magnitude. As being a substance without magnitude, God is without parts and, therefore, indivisible (magnitudes are divisible).
In chapter 9, Aristotle discusses the nature of divine thought or the content of God's thought. Thought according to Aristotle is the most divine of things. Divine thought, therefore, is divine in the highest degree. 

Section 9: 

1074b34-1698:

<<<
The nature of the divine thought involves certain problems; for while  thought is held to be the most divine of phenomena, the question what it must be in order to have that character involves difficulties. For if it thinks nothing, what is there here of dignity?  It is just like one who sleeps.  
<<<

God's thought must have some content, "for if [God] thinks of nothing, what is there here of dignity?" He can’t be thinking about nothing, because surely the greatest thinker is thinking of something worth thinking about. Certainly he must be thinking about something important, or Book 12 would seem to be much ado about nothing. Surely God is thinking about something essential rather than something accidental.

<<<
And if it thinks, but this depends on something else, then (as that which is its substance is not the act of thinking, but a capacity) it cannot be the best substance; for it is through thinking that its value belongs to it. Further, whether its substance is the faculty of thought or the act of thinking, what does it think?  Either itself or something else; and if something else, either the same always or something different.  Does it matter, then, or not, whether it thinks the good or any chance thing? Are there not some things about which it is incredible that it should think? Evidently, then, it thinks that which is most divine and precious, and it does not change; for change would be change for the worse, and this would be already a movement.
<<<
 
Aristotle considers the nature of God's thought. It must be of what is most divine and precious, for anything else is unworthy of God.  Likewise, there can be no change in divine thought because that change would be change for the worst, since God thinks only of the most divine and precious; to think of anything but the best, however, would be unworthy of God, and, therefore, impossible. Aristotle also rejects the notion that divine thought is a potentiality, since, if it were, it would involve effort to actualize the potentiality and would mean that, for God, thinking would be laborious, as it is for finite intelligences, which cannot be true. God doesn’t change and what He thinks about doesn’t change.

<<<
First, then, if it is not the act of thinking but a capacity, it would be reasonable to suppose that the continuity of its thinking is wearisome to it. Secondly, there would evidently be something else more precious than thought, viz.  that which is thought.  For both thinking and the act of thought will belong even to one who has the worst of thoughts.  Therefore if this ought to be avoided (and it ought, for there are even some things which it is better not to see than to see), the act of thinking cannot be the best of things.  Therefore it must be itself that thought thinks (since it is the most excellent of things), and its thinking is a thinking on thinking.
<<<

In other words, when speaking about God as thinking, one must not imagine that God can begin to think about something, so that thought is a potentiality realized in the act of thought. Moreover, if thought were a potentiality for God, the object of thought would be greater than the thought, for otherwise God would not think about it. This would mean that something would be greater than God who thinks, but this is impossible. Similarly, distinguishing thought from its objects allows for the possibility of thinking "the worst thing in the world," which is unworthy of God.

1075a4-1698

<<<
But evidently knowledge and perception and opinion and understanding have always something else as their object, and themselves only by the way.  Further, if thinking and being thought are different, in respect of which does goodness belong to thought? For being an act of thinking and being an object of thought are not the same.  We answer that in some cases the knowledge is the object.  In the productive sciences (if we abstract from the matter) the substance in the sense of essence, and in the theoretical sciences the formula or the act of thinking, is the object.  As, then, thought and the object of thought are not different in the case of things that have not matter, they will be the same, i.e. the thinking will be one with the object of its thought.
<<<

This distinguishes divine thought from the human modes of "knowledge and perception and opinion and understanding," all of which have something else as their object. The only way in which a thought can be pure, about something immaterial, is to be concerned with essence. In an immaterial being, the object of thought will be the immaterial being itself. 

Thus, Aristotle attempts to avoid positing a distinction between divine thought and the object of divine object. He concludes that divine thought thinks of itself as its object, which means that God thinks about thinking. What he means is that, since God is nothing but intelligence or thought, for God to think of himself is to think of thinking. This would imply that God has no awareness of the cosmos. How thinking can be an object of thought, however, is not clear.

1075a10-1699

<<<
A further question is left—whether the object of the thought is composite; for if it were, thought would change in passing from part to part of the whole.  We answer that everything which has not matter is indivisible.  As human thought, or rather the thought of composite objects, is in a certain period of time (for it does not possess the good at this moment or at that, but its best, being something different from it, is attained only in a whole period of time), so throughout eternity is the thought which has itself for its object.

God thinks about something which is indivisible, He is indivisible, and He thinks about Himself.
<<<

According to Aristotle, the Unmoved mover either thinks about itself or thinks about something other than itself. Since God is by definition Unmoved or unchanged by anything else, it cannot, therefore, think of anything other than itself. To think of something other than itself is to be moved or changed by something from without. This is impossible according to his definition of God, since God is Unmoved/unchanged by any external agent. Thus, this leaves the other alternative, namely of God thinking about itself. Further, Aristotle makes the point that the content of God's thought must be the most excellent of things. "Therefore, God's thought must be about itself, and its thinking is a thinking on thinking" (1074b 32-34). Perhaps at face value, Aristotle seems to be describing a rather self-absorbed deity. However, perhaps if we allow the thinker (the Unmoved mover), the thinking (the Unmoved motion) and the thought (the sum total of all things in the universe including the Unmoved mover) as being one at a deeply metaphysical level, then perhaps we can rescue Aristotle's Deity from the accusation of self-absorption according to the common understanding of the word. An apt anology might be to conceive of this Deity as the dreamer, the dreaming and the dream, where the substance of a dream is the product of the dreamer's act of dreaming without any of the three being truly distinct. One can continue this line of thought, but that’s another subject.  	

It’s important to note, however, that this dreamer dreaming the dream of itself is different from the Australian aboriginal Dreamtime, which also is described as the Dream Dreaming Itself.  In the Dreamtime, the Dreamer is moved, in some sense, and changes due to its various manifestations within the dream.  With Aristotle’s God, however, the Thinker Thinking the Thought that is Itself is not in any way moved or changed by conflicting manifestations of Itself.  
Aristotle never gives a direct account of intentionality.<<ref "1">>  He does, however, provide rich accounts of some foundational topics to intentionality, e.g. the nature of reason and intellection, belief, //phantasia//, and perception.<<ref "2">>  These notions aren’t so straightforward though; they must be understood in context. For example, Aristotle believed in the primacy of ontology (an awkward worldview for many moderns), which was subsequently mirrored by language and epistemology; he carefully constructs these conceptual relationships throughout his work, and they are powerful constraints in a consideration of his theory of intentionality. It is also crucial to understand where and how Aristotle is reacting to various philosophers, especially to Plato, as this illuminates the context of his words. Lastly, the clear differentiationism found in his descriptions of the souls and teleological ends of plants, animals, humans, and God may prove useful in an examination of Aristotle’s intentional outlook, especially to moderns who wish to investigate the intentional similarities and differences between non-human animal and human minds. Combining these various elements, it seems conceivable to ‘piece together’ and sketch out central features of a theory of intentionality which Aristotle might likely have given. 

Of course, generating such an account, however carefully we might try, is fraught with the peril of not living up to the standard of the account of intentionality Aristotle might have actually given himself. As a component of this peril, there exists a danger of overstepping our bounds by eisegetically injecting modern notions of various philosophical thought into Aristotle’s worldview. If we are to offer a charitable account of intentionality which Aristotle himself plausibly might have provided, it must be done in keeping with his worldview. So, in an attempt to hedge myself against committing these offenses, I’m forced to speak both tentatively and conservatively about Aristotle’s account of intentionality. 

Also, in appreciating the both Aristotle’s extensive body of work and the breadth of matters which must be considered in the construction of a systematic theory of intentionality, I realize that the scope of this paper must be narrowed. It is my hope that I can offer a piece of what might count as part of a larger perspective on Aristotle’s account of intentionality. I’m going to focus upon aspects of Aristotle’s theory of perception, particularly as it relates to a more comprehensive theory of intentionality, seeking to comply with, if not further support, his overarching philosophical commitments to essentialism and teleology.

The// De Anima// is the richest source of information concerning Aristotle’s theories of perception. Let’s first briefly cover the conceptual framework of perception, pointing out its place within Aristotle’s teleological agenda, and then we’ll be in a position to examine the mechanical stages of perception with more detail. 

#The basic structure of perception is agent, medium, and patient.

#Perception can only transpire from movement or affection, pointing towards both perception’s similarity to intellection and also the potentiality of its proper objects (accidental sensible qualities).<<ref "3">>

#Only things with souls can possibly perceive, and perception seems to be some sort of qualitative alteration of the patient (that which is perceiving).<<ref "4">>  This is qualified, however, as Aristotle’s distinction between 1st potentiality, 2nd potentiality/1st actuality, and 2nd actuality comes into play in the explanation of the alteration. 

#Sense perception is a shift from 2nd potentiality/1st actuality to 2nd actuality, parallel to the geometer actively employing intellection, which Aristotle explains isn’t a normal sense of alteration (perhaps not even alteration at all, depending on the interpretation).<<ref "5">>

#Perceived objects affect the perceiver in such a way that the perceiver becomes like that which is perceived.<<ref "6">>  

#Perception is a certain sort of causal process (the word ‘cause’ had a much broader meaner for Aristotle) whereby the perceptible object acts upon the patient.

As to the mechanics of perception, all senses have a sense-organ. Eyes are for sight, ears for hearing, etc. The sense-organs are the perceivers, not the animal or human which has the sense organ. To be clear, the organs are the material cause, and the capacity for perception is the form which inheres in the corresponding organ, and thus perception isn’t reducible to merely the matter of organs. 

There are proper objects of perception – namely, color is something you see, and sound is something you hear, etc. In turn, perception of an object is actually perception of certain qualities inhering in the object which corresponds to the sense-organ, e.g. the quality of sweetness inhering in honey is what you taste, but you can’t taste other accidental qualities of the honey which don’t correspond to the sense-organ – you couldn’t taste its weight, for instance. 

As a plenum theorist (denying an incommensurable gulf or void between perceiver and object), Aristotle held that each sense has a medium through which the object or agent being perceived can transmit its form to the sense-organ. For everyday sight, air is the medium, or while underwater, the transparent water is the medium. Worth noting, the exact causal structure of the mediums of perception and how these mediums relate to third parties is a controversial issue; it is, unfortunately, beyond the scope of this paper.

Exactly what occurs when the form reaches the sense-organ is where we begin to see Aristotle’s intentionality unfold.  Here is an example of the process: the blackboard, as an agent, acts upon the patient by transmitting blackness and its various visual features through the air (the air being the medium) to the patient’s corresponding sense-organs, viz. eyes. The patient’s eyes are in turn //hylomorphically //altered, as the form of blackness is enformed in the patient’s eyes, altering his or her eyes to take on the sensible form of blackness which also inheres in the blackboard. The capacity to see, in this case, is the capacity for the patient to take on the form but not the matter of blackboard qua its visual accidental qualities. 

The controversial aspect of this theory of perception is what it means for a sense-organ to become like (in form, but not matter) that which it perceives, particularly given Aristotle’s emphasis on the physiological nature of the sense-organs. The germane passages are unclear:

<<<
As we have said, what has the power of sensation is potentially like what the perceived object is actually; that is, while at the beginning of the process of its being acted upon the two interacting factors are dissimilar, at the end the one acted upon is assimilated to the other and is identical in quality with it.<<ref "7">>
<<<
<<<
Generally, about all perception, we can say that a sense is what has the power of receiving into itself the sensible forms of things without the matter, in the way in which a piece of wax takes on the impress of a signet-ring without the iron or gold; what produces the impression is a signet of bronze or gold, but not qua bronze or gold: in a similar way the sense is affected by what is coloured or flavoured or sounding not insofar as each is what it is, but insofar as it is of such and such a sort and according to its form.<<ref "8">>
<<<

The “Likeness” principle makes great use of Aristotle’s understanding of potentiality and actuality (central tenets of his teleological view of the world). In the case of perception, there is a relationship between your potential-based status prior to perceiving the blackboard vs. actually perceiving the blackboard, which Aristotle wishes to highlight. It seems as if both likeness and unlikeness are essential to both perception and intellection, and, again, this makes sense given Aristotle’s painstaking distinction between what is accidental and what is essential to the world. Perception is all about sensing that which is accidental in a particular. The relationship of “Likeness” is found between the accidental qualities of sense or sense-organ (depending on the interpretation) and the corresponding accidental sensible qualities of the perceived object.  Exactly how we should further interpret this “Likeness” remains unclear. There are two major schools of thought.

Richard Sorabji, in his work: //Intentionality and Physiological Processes: Aristotle’s Theory of Sense-Perception//, defends (at great length and with very detailed exegesis) a literalist, physiological explanation of sense perception. Interpreters in this vein construe the process of perception to be a physical change in the eye itself, eventually pointing towards functionalism. This requires a somewhat literal interpretation. Essentially, the sense-organ factually becomes like that which it perceives, usually considered non-representational (though Brentano’s physical theory is considered representational), but in plain likeness and exemplification of the form of the perceptibles inherent to the object being perceived. The nose which smells cinnamon from a bun literally becomes like cinnamon; both the nose and bun share the accidental property of the cinnamon smell.

Of course, the physiological interpretation is problematic to us as moderns. Our scientific understanding of sensation gives us very good reasons to deny many aspects of Aristotle’s scientific views, but does this rule out all physiological interpretations of this passage? Perhaps it is still possible to defend it in light of our empirical knowledge, and perhaps the literal ‘taking on the red’ is still a process in physics, whereby light waves of redness affect the red-sensing cones in our eyes, or something along those lines. Oddly enough, the modern scientific understanding of retinotopic maps for visual perception is strikingly comparable to the physiological interpretation. 

One standing problem remains: I don’t understand how the literalist account of perception isn’t going to actually be a normal sort of alteration or affection, the taking on and shedding of accidental properties, which seems to contradict Aristotle’s potentiality/actuality qualifications given to both perception and intellection.

The other major interpretation of this ‘Likeness’ issue is the cognitive argument. In this case, the sense is really an awareness of what is perceived. This interpretation relies upon a stronger distinction between the actual sense and the sense-organ, emphasizing the awareness of the sense rather than the physical nature of the organ. M.F. Burnyeat’s paper, //Is an Aristotelian Philosophy of Mind Still Credible?//, which is in part a response to Sorabji’s work, is famous for this cognitive argument.
 
Burnyeat’s interpretation is that there isn’t a major physiological change, only a cognitive one. Now, he isn’t talking about the mind’s ability to think about what we’ve perceived (an important epistemic point in Aristotle that both the physiological and cognitive theories can maintain); rather, he’s talking about //awareness //of the actual sense which inheres in the sense-organs as taking on the ‘Likeness’ of the form of the object perceived (without its matter). Interestingly, in some manner, the awareness of perception is found in the sense-organ itself (not what you might expect). The cognitive argument emphasizes awareness, which I can appreciate because Aristotle himself indicates that perception is pregnant with awareness. The cognitivist is making the claim that it is the awareness of the sense-organ which takes on the ‘Likeness’ of the perceptible object (which is more metaphorical and abstract than the physiological argument). The cognitive argument makes strong use of symbolic representation in a way that the physiological account does not.

It is unclear what it means, although intuitively satisfactory, for perception to have awareness, and it is even further complicated by the notion (which is not intuitively satisfactory) that this awareness resides, in some manner, in sense-organs. Further, problematic to the cognitive interpretation is that it fails to account for Aristotle’s fixation and emphasis upon the physiological aspects of sensation. Why exactly would Aristotle spend so much time explaining the physical process only to then not have used it in his argument about taking on the form of the perceptible object?

It seems plausible to me that we can interpret this ‘Likeness’ issue using both the physiological and the cognitive theories. They aren’t entirely mutually exclusive. I think a hybrid theory might solve some of the problems of each of the individual theories. It seems plausible as an interpretation because it follows the physiological process which Aristotle emphasized, and the cognitive awareness component can make sense of Aristotle’s alteration qualification, such that perception is some sort of ‘abnormal’ alteration parallel to intellection. I rather like how the hylomorphic aspects of perception can be handled and understood by such a hybrid. Essentially, perception’s material aspect is explained through the physiological, and in a manner there is ‘Likeness’, and perception’s formal aspect (further taking on the form but not the matter) is explained through cognitive awareness of an object’s corresponding sensibles. It seems plausible that we should interpret Aristotle as claiming that perception of an external object’s sensible properties is a conversion from a physiological process to a cognitive one.

Perception is also conceptually parallel to Aristotle’s notion of intellection. Sense perception and intellection are both object-oriented because one can’t understand the epistemic without making reference to the ontic world. The major difference is that the objects of intellection are in some manner internal to the mind (the form is an object in the mind, although the form must reference the ontic world), while the objects of perception are considered external (relying upon accidental particulars). Fundamental to Aristotle’s teleology (and the difference in purpose of these two capacities) is that perception is of particulars and intellection is of universals. Structurally, perception and intellection are the same; it is only the scope of their proper objects which are different. The relationship between perception and reason is more than that of teleological analogs, however, for they are actually directly linked in Aristotle’s philosophy of mind. Perception precedes and feeds intellection.

Plato’s refutation of certain accounts of knowledge and intellection in the Theaetetus heavily influenced Aristotle’s //De Anima//, particularly with respect to perception. Aristotle claims that the sense is never wrong about the special objects of perception, and he derives this from Plato.<<ref "9">>  Plato denies ‘being’ in the predicative mode (‘X is Y’, which is separate from the existential mode ‘X exists’ or the veridical mode ‘X is true’) to the five senses. Because the senses cannot be wrong, they can never formulate a proposition. For example, as one can’t be wrong about perceiving color, Plato thinks one can’t state a proposition about the color. As soon as one can formulate a proposition, truth and falsity come into play. If one says ‘the moon is flat’, one is making a proposition, which is subject to truth values. Truth is not applicable to the senses, for Plato. Sense perception, for him, cannot be knowledge. Knowledge does not occur at the level of the senses, only at a higher level. 

Aristotle is responding to Plato’s view. Aristotle agrees with Plato as to the inerrancy of perception with respect to their proper objects, such that one can’t be wrong about taking on the sensible form in perception. The patient can’t be wrong about the fact that agent acts upon him or her because the patient is ‘aware’ that he or she has been affected. Aristotle, however, claims that while one isn’t wrong about perceiving an actual object, one can be wrong about the judgments one makes from that perception. Aristotle thinks that knowledge is strongly connected to perception in a manner that Plato doesn’t (in this way, we see elements of ‘loose empiricism’ in Aristotle’s account). The major counterexample Aristotle introduces against Plato’s view are the ‘common sensibles’, which are accessible to more than one sense in any particular instance. Aristotle considers these to be a proverbial ‘monkey-wrench thrown into’ Plato’s theory of perception.

Aristotle believes he can handle the common sensibles where Plato can’t, and this is accomplished through the development of ‘common sense’ (making intelligible the common sensibles), which is the focal point of consciousness where the senses meet and are unified.<<ref "10">>  Aristotle thought that Plato’s view of perception using the five senses perceiving a single common sensible led to the generation of five selves, which further led to unintelligibility of the world and self. Crucially, for Aristotle, it seems there is perhaps only a conceptual distinction between the senses and perhaps not an actual one.<<ref "11">>  They are actually unified, and they also have a unifying concept. Common sense is over and above the five senses, and, namely, it is the awareness that you are sensing the same thing with your different senses. The unification of the common sense enables Aristotle to deny that you have two or more senses for the same object (also denying that there are two or more selves). He treats the senses as having the same structure, as if they all adhere to the same conceptual apparatus. Unfortunately, Aristotle is not so clear about the ‘common sense’-organ. In the //De Anima//, he suggests there isn’t one. The ‘common sense’ is closer than the five senses to capacity for intellection, and so, perhaps like the fact that the intellect has no organ (according to Aristotle), the common sense might not as well.

The five senses give us the data, the common sense unifies the data. Each of the five senses is incapable of falsehood. And, while at the level of the five senses, propositional judgments are not formulated; propositional judgments must be made by the common sense. For example, I judge that the object I am seeing is also the object I am touching.

As perception is related to intellection directly, the intellect can’t think of perceptibles insofar as they aren’t intelligible. And, insofar as perceptibles aren’t intelligible, namely their accidental qualities rather than the essential ones, the capacity for perception is doing the conceptual heavy-lifting. Particulars are intelligible and understandable insofar as they participate in the forms, and the forms are the domain of the intellect, not perception. Concept formation within the intellect, however, relies upon input from perception. Unlike the intellect, there is no hierarchy of lesser or higher perceptibles as there is for intelligible; rather, the senses have equal epistemological status amongst each other, as do the sensibles amongst themselves.<<ref "12">> 

There is another topic of intentional interest which can be derived from Aristotle’s theory of perception – namely, Aristotle’s view on the intentional states of non-human animals vs. humans. Aristotle is clearly a differentiationist as set out by his very distinct teleological ends of animals and of humans; humans, unlike animals, have the power of intellection and essentially partake in the activity of Aristotle’s God. In Aristotle’s pyramid of souls, the vegetative and reproductive capacities are found in all forms of life (other than God’s, but he is a very special exception in the teleological framework); what distinguishes animals and the higher beings from mere plants are the capacities of motion, perception and memory (not all animals are said to possess memory, though; only some). While animals and humans are clearly differentiated by the possession (or lack) of reason, they both have perception in common, and perhaps both could be said to have intentionality (although most likely in differing degrees).

 Unlike his teacher, Aristotle denies that animals have beliefs. Aristotle thinks that beliefs are connected with reason (in a manner unlike Plato), and so to those animals he denies reason, he also denies beliefs.<<ref "13">>  Interestingly, as Aristotle diminishes the role of belief in animals, in order to make sense of the dynamic activity that animals do demonstrate (which the capacity for ‘belief’ handled for Plato, but cannot for Aristotle), he realizes he is forced to give a much more expansive account of perception (than any other philosopher had at the time) to make up for animals lacking the capacity for belief. The result is interesting because it recognizes some kinds of predication and judgment on behalf of the non-human animal kingdom. For example, a dog can perceive a scent. He perceives more than just the scent, though; he may also be able to perceive the direction from which that scent came. Since the dog lacks reason and belief, according to Aristotle, then the machinery of perception is doing the heavy inferential and predicative lifting. The direction is predicated of the scent, and this sort of predication is contained within the dog’s perception.

Aristotle’s emphasis on perception and his expansion of the definition of its capacity imparts several intentional features to its possessors. Animals benefit from this, and it seems that Aristotle’s teleology goes a long way towards establishing the similarities (and not just the differences) between humans and non-human animals.
 
Despite Aristotle’s careful construction of his account of perception and its relation to intellection, there are serious limitations to the realms of these related faculties from the perspective of more modern notions of intentionality. Unfortunately, neither of Aristotle’s theories of intellection and perception are meant to handle or make sense of some important modern intentional concerns, e.g. dreams, imagination, future hopes, hallucinations, spiritual experience and faith. It is likely that phantasia, a capacity connected to perception and experience, is the device which handles many intentional concerns which perception and intellection cannot explain.

There are many unsolved portions of this puzzle, but this should serve as a good sketch of his theory of perception and its relation to intentionality. Unfortunately, Aristotle’s theory of perception is far from sufficient for an adequate theory of intentionality, but I think it is a necessary component to his theory of intentionality. 


-------------------------------------

<<footnotes "1" "Interestingly, the very word //intentionality //originates from the medieval scholastics and was later revived by Franz Brentano, both of which were profoundly influenced by Aristotle.">>
<<footnotes "2" "Caston, Victor. “Aristotle and the Problem of Intentionality,” //Philosophy and Phenomenological Research//, Vol. 58, No. 2 (International Phenomenological Society: Jun., 1998), pp. 249-298">>
<<footnotes "3" "Aristotle. //Complete Works of Aristotle: The Revised Oxford Translation//. Edited by J. Barnes. 2 vols. Bollingen Series.  (Princeton, NJ:  Princeton University Press, 1984), De Anima, Book 2.5, 416b32-417a2">>
<<footnotes "4" "De Anima, Book 2.4, 415b22-415b27">>
<<footnotes "5" "De Anima, Book 2.5, 417b2-417b6, 417b7-417b9">>
<<footnotes "6" "De Anima, Book 2.5, 417a10-417a21, 417b29-418a6">>
<<footnotes "7" "De Anima, Book 2.5, 417b29-418a6">>
<<footnotes "8" "De Anima, Book 2.12, 424a18-424a23">>
<<footnotes "9" "De Anima, Book 2.6, 418a7-418a16">>
<<footnotes "10" "De Anima, Book 3.2">>
<<footnotes "11" "Caston, Victor. “Aristotle's Two Intellects: A Modest Proposal,” //Phronesis//, Vol. 44, No. 3 (BRILL: Aug., 1999), 202">>
<<footnotes "12" "De Anima, Book 3.1">>
<<footnotes "13" "De Anima, Book 3.3 428a10-24">>


-------------------------------------

''Bibliography''

Aristotle. //Complete Works of Aristotle: The Revised Oxford Translation//. Edited by J. Barnes. 2 
vols. Bollingen Series.  (Princeton, NJ:  Princeton University Press, 1984).

Burnyeat, M.F. “Is an Aristotelian Philosophy of Mind Still Credible?” //Essays on Aristotle’s De Anima//, 
ed. Martha C. Nussbaum and Amelie Oksenberg Rorty (Oxford University Press: 1992), pp. 15-26.

Butler, Jim. “Ancient Philosophy.” Class lectures, Berea College, Fall 2003.

Caston, Victor. “Aristotle and the Problem of Intentionality,” //Philosophy and Phenomenological 
Research//, Vol. 58, No. 2 (International Phenomenological Society: Jun., 1998), pp. 249-298.

Caston, Victor. “Aristotle's Two Intellects: A Modest Proposal,” //Phronesis//, Vol. 44, No. 3 (BRILL: Aug., 
1999), pp. 199-227.

Caston, Victor. “Aristotle on Consciousness,” //Mind//, New Series, Vol. 111, No. 444 (Oxford University 
Press on behalf of Mind Association: Oct., 2002), pp. 751-815.

Cogburn, Jon. “Continental Analytic Philosophy: Intentionality.” Class lectures, Louisiana State 
University, Fall 2010.

Cohen, Marc. “Aristotle on Perception.” 
http://faculty.washington.edu/smcohen/433/PerceptionLecture.pdf (accessed November 22, 2010).

Crystal, Ian. “Aristotle.” Class lectures, Louisiana State University, Fall 2010.

Ebert, Theodor. “Aristotle on What Is Done in Perceiving,” //Zeitschrift für philosophische Forschung//, Bd. 
37, H. 2 (Vittorio Klostermann GmbH : Apr. - Jun., 1983), pp. 181-198.

Magee, Joseph M. “Sense Organs and the Activity of Sensation in Aristotle, ” //Phronesis//, Vol. 45, No. 4 
(BRILL: Nov., 2000), pp. 306-330.

Slakey, Thomas J. “Aristotle on Sense Perception,” //The Philosophical Review//, Vol. 70, No. 4 (Duke 
University Press on behalf of Philosophical Review: Oct., 1961), pp. 470-484.

Sorabji, Richard. “Intentionality and Physiological Processes: Aristotle’s Theory of Sense-Perception,” 
//Essays on Aristotle’s De Anima//, ed. Martha C. Nussbaum and Amelie Oksenberg Rorty (Oxford University Press: 1992), pp. 195-226.

Stanford Encyclopedia of Philosophy. “Aristotle's Psychology.”  
http://plato.stanford.edu/entries/intentionality-ancient/#5 (accessed November 22, 2010).

Stanford Encyclopedia of Philosophy. “Intentionality in Ancient Philosophy.”  
http://plato.stanford.edu/entries/intentionality-ancient/#5 (accessed November 22, 2010).

''[1][a]''

McDowell argues against the codifiability of the virtuous agent’s views as universalized principles or rules which serve as the major premise in his hypothetical syllogism. He asserts an internalist view of ethics, whereby the justification and explanation for ‘what is right’ flows out from the virtuous agent into the external world. From this view, it seems that if anything or anyone could serve as an objective mechanism for universalizing principles it would have to be the mind of the virtuous agent. McDowell argues that the mind of the virtuous agent is not this mechanism and that the virtuous agent’s complete set of thoughts and views cannot be universalized. Consequently, given both his internalism and anti-codifiabilism, McDowell is pointing towards the impossibility of universal, independently objective moral truth. He defends this thesis:

<<<
As Aristotle consistently says, the best generalizations about how one should behave hold only for the most part….If one attempted to reduce one’s conception of what virtue requires to a set of rules, then, however subtle and thoughtful one was in drawing up the code, cases would inevitably turn up in which a mechanical application of the rules would strike one as wrong—and not necessarily because one had changed one’s mind; rather, one’s mind on the matter was not susceptible of capture in any universal formula.<<ref "1">>
<<< 

	The very nature of the virtuous agent’s mind and reason cannot be algorithmically captured and defined. Even if one were to attempt to algorithmically explicate the virtuous mind, or even if the virtuous agent were herself to provide accurate generalizations of morality, one would somehow find exceptions in these mechanistic rules. The rules would not, in all possible cases, match what the virtuous person would actually do. Likely, this isn’t a practical point either, whereby he is claiming we simply lack the ability to physically formulate universalized morality - this is a much stronger point about theoretical possibility. Namely, no matter how complex and detailed the algorithm or set of rules generated, one can never possibly capture all of moral reality or what is inside the mind of the virtuous agent. Virtue, as far as it can be conceptually abstracted from the Virtuous person, is not algorithmic. (That strikes me as saying that morality, in some sense, isn’t rational! I’m sure he thinks this article is meant for someone like me.)  

Note the order of this argument (as from what I can see, it is different from the Wittgensteinian argument presented later) – it is because the mind of the virtuous person isn’t algorithmic or mechanistic (I’m not sure how you can be a naturalist if you believe this – nature, from this view, should be reducible to one gigantic physical algorithm), in conjunction with the rightness-making primacy of the virtuous character inhering in the virtuous agent, that we can know that there isn’t a universal, algorithmic formula which can flow out to the external world. 

McDowell continues to argue against universal formulas and externalism, but via a different route. This one is not founded on the idea that the virtuous mind isn’t algorithmic directly (which may simply be a brute fact in his pseudo-naturalistic philosophy of mind and intentionality), but rather on the notion that the psychological state in the mind of the virtuous agent doesn’t correspond to anything universal and independent of the agent. There is no universal algorithm, and consequently, no need for the notion of a corresponding rule in our minds. He says:

<<<
Rationality requires consistency; a specific conception of rationality in a particular area imposes a specific view of what counts as going on doing the same thing here. The prejudice is the idea that acting in the light of a specific conception of rationality must be explicable in terms of being guided by a formulable universal principle. This prejudice comes under radical attack in Wittgenstein’s discussion, in the Philosophical Investigations, of the concept of following a rule.<<ref "2">> 
<<<

	McDowell wishes to attack the very notion of following a rule. In demonstrating skepticism of rule-following in general, he can establish why universal moral rule-following is fundamentally flawed. He uses an argument from Wittgenstein to smother the possibility of consistently following objective universal rules.  McDowell explains:

<<<
Consider an exercise of rationality in which there is a formulable rule, of which each successive action can be regarded as an application, appropriate in the circumstances arrived at: say (Wittgenstein’s example) the extending of a series of numbers. We tend to picture the understanding of the instruction ‘Add 2’---command of the rule for extending the series 2, 4, 6, 8,…---as a psychological mechanism which, aside from lapses of attention and so forth, churns out the appropriate behavior with the sort of reliability which a physical mechanism, say a piece of clock, might have.<<ref "3">>
<<<

	The mathematical, universal rule of ‘add 2’, which is paralleled to the notion of a universal moral rule, is captured and instantiated with in a mind, what he terms as a ‘psychological mechanism’. This is a particular person’s attempt to apprehend, interpret, mimic and ‘follow’ that independent universal rule. The psychological mechanism is our personal rule which is supposed to mirror the universal rule; the universal rule is an abstract blueprint of the engine, and the psychological mechanism is an instantiation of it.

The process starts with a specific circumstance, namely your location on the number line (the minor premise in the syllogism), input into this psychological mechanism (a cognitive imprint of the abstract universal major premise) which serves to digest the circumstantial input and consistently produce the appropriate answer (conclusion), in this case a mathematical computation to the next point on the number line (parallel to a moral theory taking an input of the circumstances and outputting the right moral decision/action). The psychological mechanism, if it correctly mimics the blueprint of the universal rule, will mechanically output the appropriate answer. 

There is a normative relationship between the psychological mechanism and the universal rule. Correctness is judged by the accuracy of a particular psychological mechanism’s mimetic relationship to the blueprint of the universal rule. If the instantiation fails to mimic the blueprint with all possible inputs, then one is said to have the ‘wrong rule’ in mind. If you have the right rule in mind, whereby your instantiation mirrors the blueprint completely, then your psychological mechanism is correct, and it will always produce the appropriate answers.

Note how McDowell’s choice to use Wittgenstein’s example and criticize the foundation of following a simple mathematical algorithm, if successful, would undermine the following of moral algorithms as well. Surely if one can be skeptical about psychological mechanisms being justified in ‘following rules’ of mathematics, what is usually considered an exemplar subject matter for what is patently obvious and clearly universally true, the same can be said of the uncertainty of rule-following for any psychological mechanism, including some subject matter as difficult and (I suppose for some people) unobvious as universalized ethics. The attack goes:

<<<
Suppose the person says, when asked what he is doing, ‘Look, I’m adding 2 each time.’ This apparent manifestation of understanding (or any other) will have been accompanied, at any point, by at most a finite fragment of the potentially infinite range of behavior which we want to say the rule dictates.<<ref "4">>
<<<

	There are an infinite number of possible instantiations, and this person has but one. His instantiation, namely his psychological mechanism, may or may not match the universal blueprint. How would we know if his psychological mechanism follows the universal rule? Furthermore, from this one of infinitely many possible instantiations of the universal rule, it is clear that any particular iteration, application, or computation cycle may produce any possible result. It seems that with an infinite number of instantiations of the universal rule, there will also be an infinite number of possible answers that might be given in a specific circumstance. This makes it tricky to compare instantiations, as perhaps given an arbitrarily large finite series of tests they will appear to employ the same algorithm, given an infinite series of tests, we will find they don’t. McDowell continues:

<<<
Thus the evidence for the presence of the pictured state is always compatible with the supposition that, on some future occasion for its exercise, the behavior elicited by the occasion will diverge from what we would count as correct.
<<<

	From outer appearances and testing, someone might appear to have a psychological mechanism which matches and acts in accordance with the universal rule, in this case ‘add 2’.  But, since we aren’t testing his psychological mechanism at every possible circumstance (every point on the number line), testing a finite set of points on the number line rather than the infinite set of points, we can’t really know if a person has objectively ‘followed the rule’ by having matched the blueprint. Perhaps, in the future, a person’s particular psychological mechanism may not result in acts in accordance with the universal rule ‘add 2’. How are we to know? McDowell continues:

<<<
Wittgenstein dramatizes this with the example of the man who continues the series, after 1,000, with 1,004, 1,008,…If a possibility of the 1,004, 1,008, …type were to be realized (and we could not bring the person to concede that he had simply made a mistake), that would show that the behavior hitherto was not guided by the psychological conformation which we were picturing as guiding it. The pictured state, then, always transcends the grounds on which it is allegedly postulated.<<ref "5">>
<<<

The man is //apparently //matching the blueprint of the universal rule, ‘add 2’, in each circumstance up to 1000; when he begins to diverge, we would be tempted to say he is //wrong//, that his psychological mechanism is incompatible with the blueprint of the universal rule ‘add 2’.  He insists, however, that he is correctly following the rule ‘add 2’, that his psychological mechanism really matches the rule ‘add 2’, and he will claim that we are the ones who lack objectivity.  If, then, we can have been wrong in our belief that this person, whose behavior has become aberrant, was previously following the rule, how can we be sure that another individual, whose behavior has not (so far) strayed is, in fact, following the rule as we have conceptualized it. 

If we can doubt other peoples’ minds, then McDowell believes we can doubt our own. Why should we think that we are adhering to a universal rule? Furthermore, we have confidence in our expectations of peoples’ behavior, even without relying upon a psychological mechanism. The entire process of having a psychological mechanism which is supposed to mirror universal rules and dictate correct behavior is an illusion, or is, at least, untrustworthy. He continues:

<<<
[O]n reaching 1,000, the person goes on as we expect, with 1,002, 1,004,…, but with a sense of dissociation from what he is doing. What he does no longer strikes him as going on in the same way; it feels as if a sheer habit has usurped his reason in controlling his behaviour. We confidently expect that this sort of thing will not happen; once again, postulation of a psychological mechanism does nothing to underwrite this confidence.<<ref "6">>
<<<

We don’t need the psychological mechanism to be confident of the consistency of anyone’s behavior. Even a person who appears to be ‘following a rule’ may not – perhaps it just habit (exactly how this isn’t a type of psychological mechanism is very unclear to me). 

McDowell’s point is that the actuality of the circumstance transcends our rule-making capability.  That is, there is an infinite range of circumstances (each point on the number line) which we want to cover with a universal rule.  McDowell believes there will always be, however, possible circumstances along that range that do not fit within the boundaries that can be covered by a universal rule.  The idea is that the same holds true for our conceptions of universal ethical standards – the reality of the situations we face will always be beyond our ability to formulate rules. 

According to McDowell, we can’t have confidence in the psychological mechanism to adhere to the universal rule. There is no universal rule to which to adhere. The hypothetical existence of the psychological mechanism does not save us from ‘vertigo’ (discussed further below). Our confidence in others’ actions are based on something else entirely, namely the forms of life. McDowell’s coup de grâce:

<<<
[There is] a congruence of subjectivities, with the congruence not grounded as it would need to be to amount to an objectivity. So we feel we have lost the objectivity of (in our case) mathematics (and similarly in other cases). We recoil from this vertigo into the idea that we are kept on the rails by our grasp of rule. This idea has a pair of twin components: first, the idea (as above) that grasp of the rules is a psychological mechanism which (apart from mechanical failure, which is how we picture mistakes and so forth) guarantees that we stay in the straight and narrow; and, second, the idea that the rails—what we engage our mental wheels with when we come to grasp the rules—are objectively there, in a way which transcends the ‘mere’ sharing of forms of life…This composite idea is not the perception of some truth, but a consoling myth, elicited from us by our inability to endure the vertigo.<<ref "7">>
<<<

	All that rule-following, McDowell says, is just an illusion. There are no universal principles, and we can’t follow them. The psychological mechanism is unnecessary. He claims that his challengers may not like that fact, and they might undergo ‘vertigo’, feeling unable to make sense of objectivity, truth, and rationality.
  
Somehow his challengers are wrong about the nature of reason, about what counts as ‘consistency’, and about the primacy of the external, objective world. His vertiginous challengers are artificially imposing this algorithmic conceptual framework on rationality. 
If there is no psychological mechanism necessary to apprehend correct behavior in a given situation, how does one acquire an ability to do what appears like ‘adding 2’?  If a student is taught, through the use of specific examples, how to ‘add 2’, how does that student then go on to other situations in which it is necessary to ‘add 2’ and do so correctly?  One might assume that the student infers from the given examples a universal rule of ‘add 2’ that is later applied to appropriate situations.  McDowell argues, however, that this deductive paradigm is unnecessary; rather, the student, through the given situations, develops a sensitivity to similar situations, and understands that the appropriate thing to do is to add two.  The student does not need some psychological mechanism to apprehend some illusory universal rule; instead, the student develops the sensitivity necessary to act in given situations through involvement with the shared forms of life.<<ref "8">>  How this sensitivity isn’t still a form of pattern recognition and abstract rule-formation, perhaps even a well-hidden psychological mechanism in his theory, is very unclear to me (I stand rightly accused of this vertigo; I bask in it). I’m unsure how a congruence of subjectivities will result in a form of objectivity, as well. Regardless, McDowell believes has a better conceptual framework for the nature of reason, maintaining its consistency without resorting to objective universal rules. He plows forward:

There is nothing but shared forms of life to keep us, as it were, on the rails.<<ref "9">>

The truth is that is it only because of our own involvement in our ‘whirl of organism’ that we can understand the words we produce as conferring that special compellingness on the judgment explained.<<ref "10">> 

Contemplating the dependence should not include vertigo at all. We cannot be whole-heartedly engaged in the relevant parts of the ‘whirl of organism’, and at the same time achieve the detachment necessary in order to query whether our unreflective view of what we are doing is illusory. The cure for the vertigo, then, is to give up the idea that philosophical thought, about the sorts of practice in question, should be undertaken at some external standpoint, outside our immersion in our familiar forms of life.<<ref "11">>

	Instead of relying upon some illusory objectivity and rule-following, McDowell presents us with the real conceptual framework, the ‘whirl of organism’ and the ‘forms of life’. Only in these subjective contexts does he believe we can muster a sense of true objectivity and consistent reasoning, particularly for morality.

Circling back, by attacking the notion of rule-following, McDowell believes he’s demonstrated why ethics is uncodifiable, and how his internalism and the reliable sensitivity of the virtuous agent, as a subjective approach within forms of life, make sense. In the ultimate analysis, McDowell thinks there is nothing that transcends one’s particularities and form of life. Morality is not independently objective; it is subjective to the forms of life. Rule-based thinking requires justification for why things are right, in some way, while McDowell believes the Virtuous agent, as he lays the notion out, is a much better justification for why things are right. 

'' [b]''

Part of McDowell’s argument is spent attempting to secure his theory against the accusation of non-cognitivism, that ethical statements aren’t the sorts of propositions which are either true or false, and that consequently, virtue ethics isn’t moral knowledge and the decision procedure of virtuous agent aren’t really rational and objective. The cognitive process he claims the virtuous agent employs is //reliable sensitivity//:

<<<
[V]irtue, in general, is: an ability to recognize requirements which situations impose on one’s behavior. It is a single complex sensitivity of this sort which we are aiming to instill when we aim to inculcate a moral outlook.<<ref "12">>
<<<

<<<
It is by virtue of [the virtuous agent’s] seeing this particular fact rather than that one as the salient fact about the situation that he is moved to act by this concern rather than that one.<<ref "13">>
<<<

The virtuous agent’s reliable sensitivity serves a sort of perceptual cognitive device which can consistently pick out what is relevant in a situation. For example, the virtuous agent encounters a circumstance which contains some number of relevant and irrelevant moral factors. What counts as being relevant seems to vary between circumstances, and so it takes a special sensitivity to know what matters. The virtuous agent’s reliable sensitivity allows him to focus his concern upon only the salient factors of the circumstance, and it is from the recognition of the salient factors that the virtuous agent can understand how he should act. Again, this reliable sensitivity is somehow the sort of reasoning which can’t be captured within an algorithm (it’s super special somehow). The cognitive moral outlook of the virtuous agent is his reliable sensitivity. McDowell offers the object of this reliable sensitivity:

<<<
If we resist non-cognitivism, we can equate the conceptual equipment which forms the framework of anything recognizable as a moral outlook with a capacity to be impressed by certain aspects of reality. But ethical reality is immensely difficult to see clearly.<<ref "14">>
<<<

	Ethical reality is the set of salient features which a virtuous agent picks out in a circumstance. Assuming virtuous agents are rare, it really should be difficult to see ethical reality clearly because only the virtuous agent can see it clearly. When we join this argument with McDowell’s implementation of Wittgenstein, we see that the ‘form of life’, insofar as it is a normative description of circumstances, is part of the analysis of ethical reality. McDowell employs Stanley Cavell’s interpretation of Wittgenstein’s ‘forms of life’:

<<<
We learn and teach words in certain contexts, and then we are expected, and expect others, to be able to project them into further contexts. Nothing insures that this projection will take place (in particular, not the grasping of universals nor the grasping of books of rules), just as nothing insures that we will make, and understand, the same projections. That on the whole we do is a matter of our sharing routes of interest and feeling, modes of response, senses of humour and of significance and of fulfillment, of what is outrageous, of what is similar to what else, what a rebuke, what forgiveness, of when an utterance is an assertion, when an appeal, when an explanation—all the whirl of organism Wittgenstein calls ‘forms of life.’ Human speech and activity, sanity and community, rest upon nothing more, but nothing less, than this.<<ref "15">>
<<<

The ‘forms of life’ are the social spheres in which agents live. The norms, social cues, and mores of the society which surrounds an agent compose a form of life. A Catholic in Massachusetts has a certain form of life, and a Buddhist in a province of China has another form of life. Each form of life has its own expectations and controls which dictate for the virtuous agent what counts as salient ethical features of any given circumstance. The virtuous agent is the person who can recognize and be ‘impressed by’ the relevant factors of a situation from within his or her own form of life. A particular agent’s ethical reality is relative and subjective to whatever form of life in which he or she lives.

From what I can see, McDowell’s denial of rule-following does not sit well with his notion of ‘ethical reality’. First, I have no idea how McDowell can claim that reliable sensitivity isn’t a psychological mechanism (even if he wants to say there is only an illusory relationship to a made-up, non-existing universal rule). Reliability, by its very nature, points to ‘rules’. It is about a pattern. It is about following a certain expected order. Let him attempt to deny the existence of objective universal rules, but I don’t see how he can honestly say that the virtuous agent employs a cognitive process which isn’t a psychological mechanism. Of course, inherent to being a psychological mechanism is trying to follow rules; it is algorithmic in nature. I can’t make sense of something that is rational, and therefore consistent, but not algorithmic. I don’t see how the rational mind escapes being at least under the illusion that it follow rules – I think he must posit the existence of the psychological mechanism if he wishes to posit rationality. Of course, this doesn’t necessarily force his hand into postulating an actual universal rule; it can remain a mere ‘illusion’ for now. He claims his theory is cognitivist, but he did not maintain and support; I’m convinced his peddling disguised non-cognitivism.

My second problem is that I think he is assuming a type of universal rule, even when he thinks he isn’t. Ethical reality, as it is based on a form of life, still seems external. Sure, whatever the virtuous agent says is salient is what is salient, but what is salient to the virtuous agent is conditioned by a form of life. I believe we can solve this ‘chicken or egg’ problem; the form of life, insofar as it is an environment for social conditioning, is primitive to the virtuous agent in this process of reliable sensitivity. The form of life defines what does and doesn’t count as salient in a circumstance because it defines the virtuous agent, and whatever agents happen to be sensitive to the norms of a form of life are said to be virtuous. The society, the form of life, defines what is right. Here’s the kicker: each form of life is really its own sphere of rules, it has its own justice, and its own code of conduct.

By connecting the forms of life to ethical reality, McDowell has simply narrowed ethical objectivity from the universal scope to the subjective form of life. While he denies universal rules, the form of life serves as the new grounds of objectivity and the new ‘universal’ for McDowell’s theory. It seems that since the form of life is composed of rules and norms and mores, which in turn goes on to help define salience in this process of reliable sensitivity, then the virtuous agent is applying rules derived from his particular form of life to any given circumstance.  McDowell denies the ability to follow rules, but I believe he ends up with the virtuous agent following rules within a form of life. 

If virtuous agents are following rules, whereby there is psychological mechanism (reliable sensitivity) and some ‘universal rules’ (contained, conditioned, shaped, and defined by the forms of life to which virtuous agents belong), then I think McDowell’s notion of ethical reality does not sit well at all with his opposition to rule-following.

''[c]''

	McDowell’s Wittgensteinian view, specifically the use of the ‘forms of life’, seems deeply misguided to me; the form of life is just another way to explain moral relativism. I actually like the descriptive capacity of the notion of a ‘form of life’ because it requires us to recognize cultural differences, social conditioning, memetics, sociocybernetics, and many other complex and interesting things that go into making individuals and groups who they are. Just because ‘forms of life’ may have this descriptive capacity does not mean, however, it should serve in a normative capacity. 

	He thinks they serve in some normative capacity. A universal, objective moral reality is denied by McDowell. Reality, instead, is a set of forms of life, each form of life acting as a moral reality to its constituents. Reality is a bag of marbles, and each marble is a form of life. The bag says nothing universally normative, only the marble is normative within its own sphere. No form of life overlaps another, and each set of ethical values are independently justified.

It seems McDowell doesn’t believe we can normatively compare the values of one form of life to another. Each form of life is its own socially constructed moral system. Each form of life has its own way of doing things, and rightness-defining/salient factors of circumstances will vary based upon in which form of life an agent happens to find themselves. Perhaps a virtuous Buddhist from China will find some features of a circumstance salient where a virtuous Catholic from Massachusetts will not. Both are virtuous in their own forms of life, and neither can be said to be vicious, as we can only judge them according to their own form of life.  How is this not pointing to moral relativism? 

McDowell isn’t very clear about what separates one form of life from another. There may be an infinite number of possible forms of life. Couldn’t any action or belief be justified by some of the infinitely many forms of life? If so, this seems like moral relativism.

I have other questions too. What constitutes being in one form of life rather than another? What is the minimal scope of a form of life? How can you justify that scope – would you do it from within your own form of life? Even the mechanism of being in a form of life isn’t well described. For example, it doesn’t make sense to be in more than one form of life – salient features of different forms of life can be contradictory. Can you switch forms of life? I don’t know, perhaps some forms of life are ‘switchable’ and others aren’t. 

While no form of life has a universal scope, we aren’t sure exactly how particular a scope we can use in pointing out a form of life. Consider an example of the problems this creates. Being an American might be a broad form of life. What does it mean to be a Texan? That would be a narrower form of life, right? It would be overly simple, however, to assume that since Texas is a part of the United States that the Texan form of life is a subset of the American form of life. Note, perhaps being a virtuous Texan might be contradictory to being a virtuous American. For example, it might be a virtue of the American form of life to oppose the secession of any state from the United States. Being a virtuous Texan, on the other hand, may require that you are in favor of Texas’ secession from the United States (take current legislation of some hardcore Texans). 

It seems that we can narrow the scope from Texas to Houston, and from Houston to a certain section of town, and the section to a certain block, and so on, until the scope of the ‘form of life’ reaches the individual person. Why can’t each individual have their own form of life? It seems perfectly reasonable to justify their beliefs as moral if they are really their own form of life. I see no good reason to think that there aren’t an infinite number of diverse forms of life, covering pretty much every configuration of norms and beliefs possible, which leads to the justification of pretty much anything. I also see no reason why the scope of a form of life can’t be reduced to an individual, or why there can’t be just one individual in a possible form of life. As far as I can see, this would also justify moral relativism.
 
	If moral relativism is to be denied, then I think McDowell’s use of ‘forms of life’, which is innately relativistic, fails. But, why should I think that moral relativism is to be denied?

Internalists require a way to draw pseudo-objectivity out of essentially subjective systems, and the ‘forms of life’ do just that (it comes at a great cost). Who doesn’t ‘like’ subjective moral systems? They are easy to swallow. They pose no problem for the rest of our beliefs; in fact, they justify what we believe and how we behave, no matter what that ends up being. The moral relativism which flows from the ‘form of life’ argument is ridiculous (I can’t overstate this – the concept makes me physically ill). Moral relativism is not an adequate theory of ethics (it isn’t even ethics to me; it swims with its other useless brethren, moral skepticism and nihilism).

Everything is relative to its ‘form of life’. What counts as virtue, eudaimonia, the virtuous agent, etc. are all pseudo-objective within the subjective forms of life. These notions, which otherwise could have remained pure and unblemished, have been infected by moral relativism. They are meaningless. 

''[2][a]''

	In Chapter 8, Hursthouse defends her thesis ‘the virtues benefit their possessor’. She spends much of the chapter fleshing out what this thesis really means. It isn’t straightforward; a great deal of context and argumentation is used to qualify it. In order to demonstrate what I consider to be two fundamental pillars which support this thesis, I’ll need to explicate her overall argument so we can see how and why she arrives at her conclusion. 

	Hursthouse lays out her major concern in the preamble, a concern which requires several chapters:

<<<
Can we hope to achieve a justified conviction that certain views about which character traits are the virtues (and which not) are objectively correct?<<ref "16">>
<<<

	This is the objective which the claim ‘the virtues benefit their possessor’ will partly answer. Importantly, in her view, this thesis is a component of a larger argument which justifies the virtues but does not necessarily provide motivating reasons for practicing them. I find that an odd division, but so be it; this is part of the conceptual framework she provides, so let’s run with it.

Her argument at large rests upon a fundamental assumption. She explains that, “a virtue is a character trait a human being needs for eudaimonia, to flourish to live well.”<<ref "17">>  The word ‘benefit’ in her thesis is directly linked to the notion of flourishing and eudaimonia. She wishes to demonstrate how the virtues lead to eudaimonia. Eudaimonia is the primary goal and ‘end’, in some sense, and the virtues are a means to that end.  [Pillar Argument #1] Eudaimonia is foundational to justifying the virtues. This is a long-standing assumption in her book, but it is perhaps most prevalent in this particular chapter. Without this pillar, we could make no sense of what she means by ‘the virtues benefit their possessor’.

	Hursthouse attempts to answer a really important question about the relationship between virtue and eudaimonia. Are the virtues sufficient or even necessary for eudaimonia?<<ref "18">>  She employs the analogy of the doctor in determining the sufficiency and/or necessity of virtues for achieving eudaimonia. She also says:

<<<
The claim is not that possession of the virtues guarantees that one will flourish. The claim is that they are the only reliable bet—even though, it is agreed, I might be unlucky and, precisely because of my virtue, wind up dying early or with my life marred or ruined.<<ref "19">>
<<<
<<< 
To claim that the virtues, for the most part, benefit their possessor, enabling her to flourish, is not to claim that virtue is necessary for happiness. It is to claim that no ‘regimen’ will serve one better—no other candidate ‘regimen’ is remotely plausible.<<ref "20">>
<<<

	It seems clear that virtue is not sufficient for eudaimonia. Moral luck can easily override virtue’s contribution to attaining eudaimonia. Circumstances out of our control can impact the possibility of eudaimonia. Having a virtuous character isn’t enough to attain eudaimonia. But, is it necessary? She seems to waffle on it above, but I don’t think she really means it; in fact, I think the correct interpretation, given the rest of her argument at large would be ‘yes’.
 
	Life is a gamble, and virtue, as a regimen, provides the highest chance for eudaimonia. In fact, she calls it the “only reliable bet.”  This is a very strong statement. In decision (game) theory, given choices with only probabilistic outcomes, the appropriate strategy for achieving the goal will be the choice with the highest chance of achieving the goal. Virtue is the best strategy for achieving eudaimonia. She goes even further though in claiming its status as the ‘only reliable bet’, implying that the other choices don’t even appear to have close to the same chance in the overall reliability calculation. This is argument is about maximizing odds, and so, at this point it isn’t yet directly explaining that virtue is ‘necessary’ for eudaimonia. 

If, in her theory, virtue does attain the status of being ‘necessary’ for eudaimonia (and I think it will), and if eudaimonia is the ‘end’ we seek, then virtue becomes justified as a necessary means. For now, virtue is only probabilistically justified by eudaimonia as a strategy. Her case for virtue’s necessity, in my view, becomes much stronger though. Before she provides us this notion, she tackles a few obstacles. Hursthouse continues:

<<<
Those who draw attention to the fact that my virtue may lead to my downfall and/or the fact that the wicked sometimes flourish like the green bay tree are, perhaps unconsciously, thinking of these as the obvious responses that would be made by the wicked or ‘the moral sceptic’ if we were to recommend the life of virtue to them on the grounds of the benefit that it will bring. They foresee that, if we tried to convince them that the life of virtue was worth the risk, whereas the life of vice (which clearly carries its own risks) was not, we shall fail. They will just laugh at us and go their merry wicked way, finding our answer completely implausible.<<ref "22">>
<<<

	Hursthouse realizes that her previous point about virtue as the ‘best bet’ to achieve eudaimonia may be criticized as being unjustified and lacking objectivity. How can she convince the vicious and the wicked from an empirical, neutral point of view (she’s going to deny this is possible later on) that the virtues are the ‘best bet’ for achieving eudaimonia? How does Hursthouse handle cases that seem contrary to her view of this ‘bet’? It does seem as if there are several counterexample situations which demonstrate that virtue isn’t the best bet for flourishing (e.g. sensible knave). She explains:

<<<
Suppose…we fall under a vicious regime in which…[it] cease[s] to be true that those who have and exercise the virtues characteristically achieve //eudaimonia//, and thereby, virtue can indeed cease to be a reliable way to achieve it…But, even in such times, it is still not the case that there is some //other //reliable way.<<ref "23">>
<<<

	I think this isn’t a very satisfactory answer. Why should I believe that there aren’t times in the world in which the most reliable way (or in fact a highly reliable way, not just the ‘most’) to achieve eudaimonia will be vices? It would seem she needs some empirical evidence which she hasn’t provided in order to say this.

	As well, we must really wonder: what is reliability? What is reliable in the short term may not be what is reliable in the long term. Perhaps over the course of just my individual life, there really is a tactic more reliable than virtue for achieving eudaimonia (for reasons we’ll see later, she will deny this). It seems as if it would have been better to have explained that the overall course of human history, despite some dark times, demonstrates the long term reliability of virtue – and in that fact, perhaps the reliability of virtue should be measured over all lifetimes. Note, this is an empirical issue for her critics. Any attempt at an empirical, objective justification, we shall see, has been in vain:

<<<
Our answer to the question ‘Why should I be virtuous/moral?’ may be ‘I want to be—that’s the sort of life I want to live, the sort that I think is a good and successful and rewarding one.’<<ref "24">>
<<<

	Virtue, as Hursthouse specifies it, is justified from the perspective of the virtuous agent. [Argument #2] An internalist view of ethics is foundational to Hursthouse’s justification of virtue ‘benefiting’ the possessor. If this is the case, the empirical claims about the flourishing are in a great deal of trouble because the very definition and metric of ‘flourishing’ is subjective, only the virtuous agent knows these things. Much of the rest of the argument is framed such that there isn’t a ‘neutral view’ between the virtuous and the vicious, and this demonstrates her internalism. She gives us an example:

<<<
[Hare] describes all…[claims] as ‘empirical’ claims about the way human life works (‘the way the world goes’) and regards them as providing reasons ‘of a non-moral sort’ for not choosing to be an amoralist ‘from the point of view of an egoist’, and I do not agree with him that they have this status. When Hare makes these claims he does not, it seems to me, speak from a neutral point of view he might share with an egoist, but from the point of view of the humane, high-principled man that he is.<<ref "25">>
<<<
<<<
There is no possibility of ‘justifying morality from the outside’ by appealing to anything ‘non-moral’, or by finding a neutral point of view that the fairly virtuous and the wicked can share.<<ref "26">>
<<<

	Hare has incorrectly thought that he has an objective ‘neutral’ position from which he justifies the virtues. He really can only begin to justify them from his own perspective. He has a specific ethical outlook which will act as a bias in any of his explanations. Of course he would see the world that way, he’s got a specific moral outlook, and he can’t escape it. He can never be truly unbiased and objective. 

The fundamental answer to the objections of the wicked and vicious is this: there is no neutral position. Hursthouse claims we don’t need to justify virtue to the vicious because to some extent they simply can’t understand it. Virtue must be justified by Hare’s reasons, but can only be done so from a virtuous perspective. From here, Hursthouse provides the framework for understanding how ‘the virtues benefit their possessor’. 

#It is only from within the outlook of the (at least moderately) virtuous that the truth of ‘the virtues benefit their possessor’ can be discerned.
#From the perspective of this outlook it is necessarily or infallibly true that the virtues benefit their possessor, because
#The virtuous have a conception of eudaimonia, of benefit, advantage, harm and loss, of ‘profit’ and ‘what pays’ such that nothing gained by action contrary to virtue pays or is a genuine advantage or benefit, and no sacrifice necessitated by virtue counts as a loss. In virtuous action one ‘accomplishes all’, achieves ‘moral benefit’, and since the virtues, uniquely, enable one to act virtuously, and never fail to do so, they are, indeed, guaranteed to benefit their possessor, enabling her to achieve eudaimonia, namely, a life lived in accordance with the virtues.<<ref "27">>

In (3) she claims a ‘guarantee’ which is quite strong. I think this is in conflict with her ideas of moral luck and tragic dilemmas. This passage strengthens her probabilistic claim to one of necessity. The virtues are necessary to enabling an agent to achieve eudaimonia. However the virtuous agent might conceive of eudaimonia, the virtues are certainly a necessary condition to the achievement of eudaimonia.

We can also see the dominant strand of internalism in her argument. Defining and justifying both virtue and eudaimonia are accomplished by those who are virtuous alone. Only the virtuous can understand and achieve these things for themselves. The wicked are left out in the cognitive cold; there is no complete explanation for them. There is no objective, external standard by which to judge, define, and justify Hursthouse’s conception of virtue and eudaimonia. 

Hursthouse doesn’t deny the possibility that ideas of the virtuous can overlap, to some extent and not completely, with the ideas of the vicious.  The overlap, however, seems quite coincidental. The focus of justification of the virtues, in part, will be something which the vicious will find implausible. Her internalism remains very robust.

	Hursthouse disagrees with the idea that “morality is a form of ‘enlightened self-interest’ specified from the neutral point of view,” and instead believes “morality is a form of ‘enlightened self-interest’ specified in a ‘value-laden’ way, from within an ethical outlook.” 

	Clearly, the internalism of her theory plays a huge role in defining eudaimonia. The virtuous agent is the only source of describing eudaimonia, as in some sense, eudaimonia acts as the end goal of the agent. The virtuous agent, perhaps not consciously, but according to this internalism, sets the metric to gauge not only which characteristics are most likely to bring about eudaimonia, but even which characteristics are always necessary to the achievement of eudemonia - namely the virtues. Thus, from an internalist point of view, employing a certain virtuous perspective, it is eudaimonia, as an end, which justify the virtues.

''[b]''
''[Criticism of Pillar Argument #2]''

Hursthouse holds what might be a slightly softer version of internalism than McDowell does, but she is an internalist. As an internalist, she thinks there is no neutral, independent (of character) way to understand virtue. The virtuous person is supposed to be the place/person we look to in order to answer ‘what should we do?’ (which I take to be the primary question of ethics, even if they might argue this is a secondary question). The internalist view relies upon the primacy of the virtues and the virtuous character, and, in this, virtue ethics does not collapse into any other approach to ethics (which should be important to a virtue ethicist). 

If internalism fails, then her notion of how the ‘virtues benefit their possessor’ also fails. I think her internalism does fail (probably because I’m an externalist), so I’m not convinced by her thesis.

The domain of the external is the domain of the rational. If there isn’t an independent, objective standard of morality, if we can’t hold the externalist view, then morality isn’t rational. Irrational ethics is no ethics at all. Subjective, internalist ethics is no ethics at all.

Clearly, if we take down this pillar argument, the conception of how ‘the virtues benefit their possessor’ crumbles. Her argument would need to become externalist, and demonstrate an objective set of reasons for her thesis. She doesn’t seem to believe this is possible. 

''[Criticism of Pillar Argument #1]''

Eudaimonia is foundational to justifying the virtues in her argument. If there is no eudaimonia, then the virtues can’t be justified in Hursthouse’s theory. My problem with using eudaimonia to justify the virtues is that she hasn’t really justified her conception of eudaimonia.

My first problem is eudaimonia’s primacy to the virtues, whereby virtue is necessary for eudaimonia, but eudaimonia isn’t necessary for being virtuous, demonstrates that Hursthouse’s virtue theory collapses into eudaimonic ethics. And, what is eudaimonia? It is a teleological end of mankind. It is the definition of flourishing as a human. I’m convinced that teleology is a consequentialist variant. Virtue theory seems to be a form of consequentialism. So, ‘the virtues benefit their possessor’ conflicts with Hursthouse’s overall assumption that virtue ethics is ‘the way to go’, that it offers something truly unique that other theories can’t. 

The second problem is even worse, in my view, and it extends to most consequential theories, including Hursthouse’s virtue theory. Hursthouse has yet to convince me that ethics is about flourishing and about eudaimonia. Why should the virtues, that is, ethics, be defined and justified by what is ‘beneficial’ to me? What does my happiness have to do with what I ought to do? Ethics isn’t about happiness or eudaimonia. It is strictly about what is right for the sake of rightness. Whatever results, whatever the consequences, they are incidental to rightness. 

Lastly, I can’t help but think her virtue theory isn’t completely circular. It seems that the internalist view infects the definitions she uses. Eudaimonia is a circular concept. Both eudaimonia and the virtues, in the end, are justified by the virtuous person, and the virtuous person is defined in terms of what he justifies.

Clearly, if we take down this pillar of eudaimonia, the conception of how ‘the virtues benefit their possessor’ crumbles. Nobody cares if ethics benefit their possessor if eudaimonia isn’t the end.

''[3]''

In the last chapter of //On Virtue Ethics//, Rosalind Hursthouse presents an argument against the moral skepticism of Bernard Williams. In my arbitration of these arguments, let me first say that my representation of Williams’ view is based upon Hursthouse’s depiction of him. To make up for any bias and lack of argumentation from the side of Williams, as presented in Hursthouse’s book, I’m going to represent the naturalistic moral skepticism where Hursthouse may not have. 

These two naturalists clash, one saying that morality does not exist in naturalism (Williams) and the other claiming morality does exist in naturalism (Hursthouse). Within this larger debate are several related arguments, particularly the relationship between Darwinism and Aristotelian Teleology, and also the nature of man and its relation to eudaimonia and ethics. 

Ethics, to Williams, is a product of evolution. It is a social virus. It is selected for. Humans who have certain mental states are more likely to pass on their genes and produce more viable offspring than those who don’t. Sometimes ‘virtue-like’ mental states are what win out in the memetic wars, and for Williams, it seem that most of the time, they don’t. Ethics is merely a phase in the evolving human nature; it is merely an illusion. His attack on Hursthouse’s theory is even more specific:

<<<
Aristotle’s conception of nature, and thereby human nature, was normative, and that, in a scientific age, this is not a conception that we can take on board…Aristotle’s conception of nature is teleological, whereas our modern scientific one is not.<<ref "30">>
<<<
<<<
The idea of a naturalistic ethics was born of a deeply teleological outlook, and its best expression, in many ways, is still to be found in Aristotle’s philosophy, a philosophy according to which there is inherent in each natural kind of thing an appropriate way for things of that kind to behave.<<ref "31">>
<<<
<<<
The first and hardest lesson of Darwinism, that there is no such teleology at all, and that there is no orchestral score provided from anywhere according to which human beings have a special part to play, still has to find its way into ethical thought.<<ref "32">>
<<<
 
	Williams contrasts Aristotle’s teleology with the Darwinism of modern science. Aristotle’s sciences are teleological, and modern science isn’t. What is so different about Aristotle’s view of the species and the view derived from Darwinism?

For Aristotle, each species has its own end, its own purpose, and a special place in the cosmos. Aristotle believed the species to be eternal; it seems reasonable that he would have opposed the possibility of evolution; it didn’t fit in his teleological framework. What is very powerful about Aristotle’s teleological and essentialist views is that there is specific definition of ‘human’ (and specific definitions for all the species), with a specific view of flourishing for the species, and individual humans could be judged on a normative gradient on the degree to which they exemplified the characteristics set out in that definition.

	Darwinism includes the concept of evolution, and denies the teleological ends and eternal definitions of species. Without these definitions, it seems that Darwinism is devoid of normative claims. My guess is that Williams prefers Darwinism to Aristotle’s teleology because Darwinism can explain the world and make it intelligible, arguably more intelligible than Aristotle’s, without having to resort to what he might consider awkward, abstract, and overly complex theories requiring the specialness of things or the ends of substances like Aristotle’s teleology. Perhaps he has employed Occam’s razor and believes Darwinism comes out on top.

	We might even argue there is a deeper question in his naturalism. Namely, what is ‘meaning’ or what is an ‘end’ in naturalism? Perhaps he believes there isn’t such a thing in naturalism. Teleology, perhaps, is beyond naturalism in some sense, and if this is the case, then, of course, as a naturalist, Williams would deny Aristotle’s teleology off the bat. Darwinism, however, is clearly reducible to naturalistic terms. 

Whatever his reasons, Williams believes that Darwinism has defeated Aristotle’s teleological worldview. As well, he thinks denying Aristotle’s teleology is a ‘hard lesson’ to be learned for those who think there is a purpose to the things in a world. Humans, as a species, aren’t working towards some perfection of an end. There is no normative conception of humanness. Humans are simply objects in a naturalistic world which do as they must, nothing more.

Williams also thinks that because humans live very dynamic and unpredictable lives you can’t say they demonstrate the same sort of regularity that other creatures in nature demonstrate. Either Hursthouse will have to restrict the viable options available to humans or say that biology lacks some explanatory power to define why there is so much variation in humanity.

Hursthouse, however, does maintain a type of Aristotelian teleology. Humans, in particular, have a very special place in the world. All the species are said to have some paradigm definition which they are attempting to attain, and to which they are compared, and from which normative claims can be made about members which partake in that definition. 

Clearly, Hursthouse as a naturalist must deny the possibility that Aristotelian teleology is in any way going to contradict the fundamental restrictions of naturalism. Her teleology must be expressible in naturalistic terms; she must claim that the only things ontologically available to her teleology are things defined by what is ordinary, natural, or observable. She must claim that ‘flourishing’ is a natural concept. The connection between the biological and the ethical will require an impressive explanation (I don’t see how she can do it). She replies to Williams’ view: 

<<<
[Darwinism] sets its own standards for what is right and wrong, and the most Darwinism could do is show that, for whatever purposes we hitherto used those standards to identify the good and the defective, we would serve them better by setting Darwinian ones.<<ref "33">>
<<<

	Hursthouse thinks she can use Darwinian terms and explanations to make moral claims about the ‘goodness’ or ‘badness’ of human beings. Hursthouse believes that the Darwinian threat is really inert at the worst; and at best, it would actually help qualify the standards and metrics of her own teleology. To her, Darwinism is not incompatible with Aristotelian teleology. She thinks the naturalistic ends she had previously laid out are reasonable measurements that even Darwinism might employ. She says:

<<<
I have found in discussion that many people imagine that Darwinian evaluations would either rely solely on the second end (continuance of the species) or replace that, as the sole end, with ‘replication of the individual’s genes’. But human being are not the only species in which the female members have a ‘characteristics life expectancy’ that extends well past the age in which they are replicating, or even nurturing, their genes…But scientific ethologists are not considering giving up on the idea that there must be something defective about a female member of such a species who dies well before her allotted span for no external cause. On the contrary, they are trying to figure out whether, and if so how, the presence of these elderly females contributes to the good functioning of the social group and thereby to the continuance of its members and thereby, as an evolutionary strategy, to the replication of the elderly females’ genes.<<ref "34">>
<<<
 
She thinks that current Darwinian standards aren’t such that her Aristotelian standards would collapse into mere ‘replication of the individual’s genes’; rather, it seems that Darwinian evaluations are pointing towards similar standards to her Aristotelian ones. If Aristotelian standards aren’t correct, then we should replace them. At this point, however, we don’t have reason to do so. So, insofar as Darwinism is compatible with Aristotelian teleology, she doesn’t seem to worry much. 

I think Williams would want to point out here that Hursthouse doesn’t make a good case for the compatibility of teleological definitions and a Darwinian view of species. What is ‘human’ if it is something which has evolved from the primordial? Where and why do you draw the lines of species? Darwinism is descriptive, rather than normative, and more capable of handling these continuums of species. A strict Aristotelian definition of species doesn’t seem capable of handling much of a continuum at all. If it can, Hursthouse really should have explained it more clearly.

Hursthouse thinks the teleological ends of humans are more complex and difficult to define than the other ends of other animals. She explains:	

<<<
If the grammatical idea behind ethical naturalism is right, namely that our terms ‘good’, ‘bad/defective’, ‘well’ do not suddenly start being used in a totally new way when we start using them in relation to ourselves, then our concept of living well, or flourishing (or eudaimonia, when we use it in relation to ourselves), is connected to our evaluations of human beings as good or bad. But that concept, used in relation to ourselves, is indubitably also connected to eudaimonia, the Good Life that we all seek, the life that is of benefit to the individual whose life it is, as it appears in thesis (i). The other animals cannot form their own conceptions of living well, cannot say to themselves ‘That’s the sort of life I want to live, the life in which . . . ‘ and consciously aim to live it; they live as nature determines. We can.<<ref "35">>
<<<

She believes eudaimonia and ‘evaluations of human beings as good or bad’ form a feedback loop; they modify each other. Somehow they are separate, but they are highly connected to each other. The other animals don’t have this loop because their species don’t have the same sort of purpose - something like human eudaimonia. This eudaimonia belongs to humans and any species which evolves to have human-like reasoning. These special properties of the complex minds of naturalistic beings imbue them with the ability to control the definition of their own ends, in some sense. Eudaimonia, to some extent, is determined by human beings who consciously decide what it can mean in some way. Given the feedback loop, human beings in some way determine the evaluations of what counts as good or bad qua human being. Likely, the notion that ‘virtues benefit their possessor’ only applies to beings that have a concept of eudaimonia. The other animals don’t have reason or the same individualistic requirements as part of their ends.

She is pointing out how Darwinism alone may fail to capture these ends and the complexity of eudaimonia in the case of human flourishing. Defining ‘human’ flourishing, eudaimonia, isn’t easy to do in Darwinism. Perhaps Hursthouse is suggesting the limits of Darwinism. I think Williams would reply that the notion of human ‘eudaimonia’ is normative, that it begs the question of teleology and normativity in an unnaturalistic manner.

Williams might not consider the diminution of Darwinian influence on the standards of eudaimonia to be a strong argument because of other reasons as well. What makes humans so special? Reason? What is reason to Williams? It is just a very complex network of chemical and electrical reactions in a brain. Why is that so special? Why does that change the normativity of humanness? It seems that the end of all species is to become the top of the food chain, to evolve into something with human-like reason. Aren’t the ends of non-human animals false? Shouldn’t other animals seek to become special like humans?

What if an evolutionary accident occurred tomorrow, whereby a strong beneficial mutation occurs in a monkey, a crow, a dolphin, or an elephant, such that this highly evolved animal has human-like reason. Wouldn’t we say that this animal (we’ll say monkey) is really better than other monkeys? That monkey, however, didn’t adhere to the definition of monkeyness; it isn’t flourishing as a monkey. This is a bad monkey, right? I’m not sure why Hursthouse can claim that the highest hope of any monkey isn’t to evolve and morph into something with human reason rather than adhere to the definition of monkeyness. This ‘ends’-based reasoning seems flawed in and of itself.

Williams provides a serious attack on the fundamental notion of human nature, the notion of its ends, and the possibility of ethics:

<<< 
The [fact] that human nature is not harmonious ‘still has to find itself into ethical thought’.<<ref "36">>
<<<
<<<
[H]uman beings are to some degree a mess, and…the rapid and immense development of symbolic and cultural capacities has left humans as beings for whom no form of life is likely to prove entirely satisfactory, either individually or socially…[T]hose who have tried to reach a naturalistic morality which transcends it have had to read the historical record, or read beyond the historical record, in ways that seek to reveal a partly hidden human nature which is waiting to be realized or perfected.<<ref "37">>
<<<

Williams believes that from an evolutionary, Darwinian perspective, human nature is flawed. Science and history present us with a very negative view of humanity. He thinks this idea is not understood by the proponents of naturalistic morality. Humanity lacks any real sense of ‘hope’ to him. It seems impossible to be ‘entirely satisfied’ as a human, and extremely unlikely (mere happenstance if it does occur) and entirely out of the hands of the agent to somehow reach or attain the status of eudaimonia. He thinks the idea of naturalistic morality rides upon an unscientific and inaccurate historical account of humanity and its nature. He would explain:

<<<
[The naturalistic concept of eudaimonia] takes for granted…’a strong view of the harmony among themselves of human capacities and need’. ‘This assumption does…seem to me more plausible if you can help yourself to Aristotelian cosmology, than if you regard it as an open question whether the evolutionary success of humanity, in its extremely brief period of existence, may not rest on a rather ill-assorted bricolage of powers and instincts.’<<ref "38">>
<<<

The naturalistic concept of eudaimonia is implausible because it assumes an unrealistic and overly optimistic ‘harmony among humans’ which is not rooted in science or history. Without the ingrained possibility of ‘harmony’, Williams thinks the notion of eudaimonia is failed from the outset, and that morality doesn’t exist.
 
Hursthouse defends her argument:

<<<
We could make [the view that virtues on the standard list benefit the possessor] ‘more plausible’ to the immoralist if there were some (unimaginable) scientific, even cosmological, facts we could appeal to…But we didn’t even try, for to do so would, yet again, be attempting to justify morality from the outside—as, in a final vestige of his earlier view that ethical naturalism is supposed to base itself on a ‘scientifically respectable account of human beings’, Williams seems to be supposing we must do if we are aiming at ‘plausibility’.<<ref "39">>
<<<

	Hursthouse thinks she doesn’t need to demonstrate the plausibility of the notion of eudaimonia. She thinks she can assume it. Her internalist leanings allow her to denounce external justification of her theory of ethics. It seems that the external view has implications for how we might come to know what counts as virtue and its naturalistic ends, but it doesn’t justify virtue. But she does take on the historical and scientific record to demonstrate a hope for ethics that Williams lacks. Then she provides her counterstrike:

<<<
Any human being who, at the end of her life, is able to look back and say, sincerely, ‘That was satisfactory; I lived well’, has been astonishingly lucky, and no inculcation of character traits, no supposedly rational plan of one’s life or attempts at supposed self-improvement or supposed improvement of our societies can make anyone one whit more likely to be lucky; all such attempts are futile…this amounts to complete moral nihilism.<<ref "40">>
<<<
<<<
The belief that harmony is possible for human beings, that we have the virtues neither by nor contrary to nature, but are fitted by (our) nature to receive them, is, I think, an essential part of the ethical outlook even of the minimally virtuous—any of us who think that being right about ethics matters…We manifest it by going in for ethical thought and talk at all.<<ref "41">>
<<<

	Honestly, this section made me chuckle because I can’t tell if this is meant to have an edge of sweet, sweet ad hominem attack or not.  Perhaps the reason behind Williams’ pessimism and moral nihilism, which are “as old as misanthropy and despair,”<<ref "43">>  is his vicious nature. If only he had some minimally virtuous outlook, he could understand why ‘being right about ethics’ matters. This does match up with a great deal of her book – of course the vicious agent, Williams in this case, can’t see the value of virtue. He lacks a belief in this harmony (a necessary component to having the outlook of one with even trace elements of virtue), thus he lacks the ethical outlook of even the minimally virtuous. It does seem as if she is claiming he doesn’t understand or agree with her argument because he is evil—that’s not something you see every day in formal philosophy.

	There is something more profound to consider - namely that ethics requires assumptions, leaps of faith. People assume that ethics exists, that value and meaning are real, that there are things actually worth pursuing in this world, else they wouldn’t continue manifesting moral beliefs in various aspects of their lives. Hursthouse finishes:

<<<
[T]he idea that we are just a mess is a particularly global form of moral scepticism, one which not only dismisses the whole ethical outlook of the (even minimally) virtuous as mere optimistic fantasy but simultaneously rejects the idea that practical rationality has anything substantial or long-term to do…As such it would be akin to other forms of global scepticism about, say the possibility of scientific knowledge (based, as it is, on the non-scientifically validated assumption that nature is intelligible), or even the possibility of knowledge of the external world or other minds.<<ref "44">>
<<<
<<<
The practice of ethical thought, as we know it, has to be based on the assumption that human beings, as a species, are capable of harmony, both within themselves and with each other. If we suppose they are not, the whole practice collapses. There is no refutation of scepticism about this assumption. But the practice is worth going in for, there is no practicable alternative for us, so we have to take the assumption on board.<<ref "45">>
<<<

Hursthouse considers Williams’ argument to be a form of global skepticism. It isn’t just ethics that requires assumptions and leaps of faith to even begin their topics. There are few topics which can survive a corresponding form of global skepticism. Given just this argument, I’m not sure why Williams simply can’t claim to make the assumptions necessary to do science and not make them for ethics.
 
Hursthouse believes that Skepticism about the objective nature of morality is partly answered by the Neurathian procedure. The hull of the boat of ethics is an assumption that the boat can exist.

''Conclusion''

I’m convinced that Williams is the much more consistent naturalist of the two. I have absolutely no idea how naturalism is compatible with any adequate theory of ethics. In my view, naturalism requires the denial of free will, moral responsibility, meaning and value in the world. I agree with Williams that if naturalism is true then teleology is really dead. Ethics is an illusion for a proper naturalist. If naturalism is true, then Williams is right. Hursthouse’s objective can’t be achieved in the naturalistic framework. Hursthouse never adequately addressed these issues.

I am not a naturalist, however, so I think Hursthouse’s objective is still a reasonable (even worthy) pursuit. I have other issues, though. Exactly why is it necessary that 'human nature is harmonious' in order to do ethics? It seems integral to assumptions about naturalistic ethics theory, but I’m not sure why this should worry the non-naturalist. I can at least claim that humans are generally disharmonious, and still claim an ‘ought’ and the reality of ethics. 

The fundamental point of this argument didn’t appear until the very end of this argument though. I appreciate what Hursthouse has to say. We naturally assume that ethics is real. This is a foundational assumption. She’s right about tackling global skepticism. You have to make some unprovable assumptions about the world to either deny or agree to the existence of ethics. 

	I think there is a slightly stronger argument to give than she did. I think value and ethics share primacy with logic and God in this world – they’ve always co-existed in some sense. The sorts of assumptions we make about ethics are parallel to assuming the laws of non-contradiction or excluded middle. 

I don’t think anyone pursues anything unless they think they want it. Whatever they want has value to them, and in this way, they think they ‘should’ pursue it. Value, by definition, is something worth pursuing, and value is really just another way of claiming ‘ought’ and reality fo ethics. Value is primitive to the world, and whatever is worth doing is really worth doing. If a person denies value, then how could they rationally pursue anything? The pursuit of anything assumes the object of pursuit is worth pursuing, that the object has value in some sense.

The fact that Williams took the time to write his paper, claiming that ‘value’ doesn’t really exist in the world, that nothing is really worth pursuing, demonstrates a contradiction with his intentions. He set out to do something; he pursued something - namely saying there wasn’t anything worth pursuing. I’m sure he pursues other things. And why does he pursue them? Because he wants something, because they are in some sense worth pursuing, because they have value to him. If ethics is an illusion, even Williams is under its spell.


-------------------------------

<<footnotes "1" "John McDowell, “Virtue and Reason” in //Virtue Ethics//, ed. Roger Crisp and Michael Slote (Oxford and New York: Oxford University Press, 1997), 148">>
<<footnotes "2" "Ibid., 148">>
<<footnotes "3" "Ibid.">>
<<footnotes "4" "Ibid., 149">>
<<footnotes "5" "Ibid.">>
<<footnotes "6" "Ibid., 150">>
<<footnotes "7" "Ibid., 150-151">>
<<footnotes "8" "Ibid., 153-154">>
<<footnotes "9" "Ibid., 150">>
<<footnotes "10" "Ibid., 151">>
<<footnotes "11" "Ibid., 153">>
<<footnotes "12" "Ibid., 144">>
<<footnotes "13" "Ibid., 157">>
<<footnotes "14" "Ibid., 161">>
<<footnotes "15" "Stanley Cavell, //Must we Mean What We Say?// (New York, 1969), 52">>
<<footnotes "16" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001), 164">>
<<footnotes "17" "Ibid., 167">>
<<footnotes "18" "Ibid., 172">>
<<footnotes "19" "Ibid.">>
<<footnotes "20" "Ibid., 173">>
<<footnotes "21" "Ibid., 172">>
<<footnotes "22" "Ibid., 174">>
<<footnotes "23" "Ibid., 176-177">>
<<footnotes "24" "Ibid., 177">>
<<footnotes "25" "Ibid., 178-179">>
<<footnotes "26" "Ibid., 180">>
<<footnotes "27" "Ibid., 181">>
<<footnotes "28" "Ibid., 187">>
<<footnotes "29" "Ibid., 190">>
<<footnotes "30" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001), 256">>
<<footnotes "31" "Bernard Williams, “Evolution, Ethics, and the Representation Problem,” in //Making Sense of Humanity//. (Cambridge university Press: 1995), 110">>
<<footnotes "32" "Ibid., 110">>
<<footnotes "33" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001), 258">>
<<footnotes "34" "Ibid., 258">>
<<footnotes "35" "Ibid., 259">>
<<footnotes "36" "Ibid., 261">>
<<footnotes "37" "Bernard Williams, “Evolution, Ethics, and the Representation Problem,” in //Making Sense of Humanity//. (Cambridge university Press: 1995), 109">>
<<footnotes "38" "Rosalind Hursthouse, //On Virtue Ethics// (Oxford: Oxford University Press, 2001),  260">>
<<footnotes "39" "Ibid., 260">>
<<footnotes "40" "Ibid., 262">>
<<footnotes "41" "Ibid.">>
<<footnotes "42" "Page 176 indicates she would agree that this is an ad hominem argument.">>
<<footnotes "43" "Ibid., 261">>
<<footnotes "44" "Ibid., 262-263">>
<<footnotes "45" "Ibid., 265">>
''[1][a]''

A mile-high definition of a contingent practical identity: “the basis of choice…a description under which you value yourself and find your life worth living and your actions to be worth undertaking.”<<ref "1">>  Truly, there is a lot packed into this notion, and I want to carefully unpack what I believe is most important about it. The three most cardinal features connected to this notion of a contingent practical identity are: Action, Agency, and Psychic Unity. Arguably, these features are larger than the notion of contingent practical identity itself, but I don’t think this is a problem. Contingent practical identity must be understood within the context of these cardinal features, and vice versa – they interdefine each other. 

	Korsgaard gives us examples of practical identities and their acquisition:

<<<
Conceptions of practical identity include such things as roles and relationships, citizenship, memberships in ethnic or religious groups, causes, vocations, professions, and offices. It may be important to you that you are a human being, a woman or a man, a member of a certain profession, someone’s lover or friend, a citizen or an officer of the court, a feminist or an environmentalist, or whatever.<<ref "2">>
<<<
	We can immediately appreciate this notion, as it seems we all have these identities, and we all spend a great deal of our lives in these sorts of roles. Clearly, practical identity is a powerful descriptive notion for anyone attempting to understand humanity. She continues:

<<<
One might think of a particular practical identity, if a little artificially, as a set of principles, the dos and don’ts of being a teacher or a citizen, say.<<ref "3">>
<<<

	For Korsgaard, the notion of a practical identity is not merely descriptive; it is has normative characteristics. Practical identities are part of the process, for each individual, of figuring out what one ought to do in a certain role. She points out the motivational implications to possessing a practical identity:

<<<
Our conceptions of our practical identity govern our choice of actions, for to value yourself in a certain role or under a certain description is at the same time to find it worthwhile to do certain acts for the sake of certain ends, and impossible, even unthinkable, to do others.<<ref "4">>
<<<

	The way in which you ‘value’ yourself in a certain description in turns serves as your motivation to act in particular ways and for certain ends which are provided, at least in large part, by a practical identity.  This leads us to Korsgaard’s contingent aspect of practical identities:

<<<
However it goes, reasoned or arbitrary, chosen or merely the product of circumstance, the sorts of identities I am talking about remain contingent in this sense: whether you treat them as a source of reasons and obligations is up to you.<<ref "5">>
<<<

The various ways in which one might acquire an identity are not the sources of its contingency (even though we can say that the acquisition might be arbitrary and contingent in some cases). Rather it is the choice, which is ‘up to you’, to continually keep and use these identities which make them contingent. Clearly, the contingency of practical identity is founded upon our free will. Commitment to a practical identity is thus vastly different from mere acquisition. 

Once an identity is chosen (or we ‘commit’ to it), it provides reasons for acting in certain ways or for pursuing certain ends.  Whether an identity is chosen (‘doctor’, for instance) or given (‘son’ or ‘American’), it remains contingent simply because ‘it is up to us’ whether or not we choose to treat it as motivating, and crucially, as a guide. This contingent aspect strengthens the normative components to practical identity. She fleshes this out further:

<<<
Forms of identification are contingent, and we can walk away from them. Their hold on us depends on our own endorsement of the laws they give us. We ratify their laws whenever we act in accordance with them.<<ref "6">>
<<<

<<<
If you continue to endorse the reasons the identity presents to you, and observe the obligations it imposes on you, then it’s you…[If not then] it’s not a form of practical identity anymore: not a description under which you value yourself. 
[Agents treat] contingent identities as the sources of absolute inviolable laws.<<ref "7">>
<<<

<<<
	The obligations and reasons for action provided by contingent practical identities aren’t arbitrary and morally neutral, as one might have initially suspected about at least some of these identities. Practical identities provide strong moral normativity – they provide moral law to their bearers.<<ref "8">>
<<<

As Korsgaard sees it, valuing oneself in a certain role or description, committing to a practical identity, is thus committing to certain moral obligations. If she is correct, then it seems that the notion of a contingent practical identity is fundamental to the construction of our moral obligations.  This leads us to the foundational practical identity so crucial to her moral theory:

<<<
Morality itself is grounded in an essential form of practical identity, our identity as rational or human beings…[We as agents make a] commitment to our own human or rational identity as a form of practical identity.<<ref "9">>
<<<

<<<
Making the contingent [practical identity] necessary is one of the tasks of human life and the ability to do it is arguably a mark of a good human being.<<ref "10">>
<<<

Korsgaard believes morality exists in virtue of this fundamental practical identity. It seems the 'moral' identity, the ‘rational’ identity, the ‘human’ identity – the identity of agency – is itself a practical identity we take on. Moral agency is the foundational practical identity upon which we construct our self-constitution. Thus, our practical ‘moral’ identity is the reason why our other practical identities are normatively empowered in some sense.  

Contingent practical identity is further developed in terms of the cardinal features. 

''Action -- [Cardinal Feature connected to CPI #1]''

<<<
But there is a reason not to abandon all of our identities. The reason is given by…the human plight. We must act, and we need reasons in order to act. And unless there are some principles with which we identify we will have no reasons to act. Every human being must make himself into someone in particular, in order to have reasons to act and to live. Carving out a personal identity for which we are responsible is one the inescapable tasks of human life.<<ref "11">>
<<<

	Action is strongly connected to the notion of identity. Korsgaard comes right out and claims that, “Human beings are //condemned //to choice and action…action is necessary…it is our //plight//.”<<ref "12">>  We are destined to have a particular contingent practical identity. We are condemned to be agents, agents who choose and perform action. Importantly, Korsgaard uses the word ‘action’ as a term of art; it is a technical term in her moral theory.

	In her first chapter, Korsgaard endeavors to synthesize major components of Aristotelian and Kantian views on the nature of action. Out of this discussion, her definition of action follows:

<<<
The basic form of a Kantian maxim is “I will do act-A in order to promote end-E.” Call that entire formulation the description of action. An action, then, involves both an act and an end, an act done for the sake of an end.<<ref "13">>
<<<

<<<
[An agent] chooses this whole package, that is, to-do-this-act-for-the-sake-of-this-end – he chooses that, the whole package, as a thing worth doing for its own sake, and without any further end.<<ref "14">>
<<<

	Vitally, ‘act’ and ‘action’ are distinguished, while ‘ends’ are configured into the equation. Action is a package deal; it includes both the deed and its purpose. Contingent practical identities provide motivation and guidance as to which actions we should choose to perform. Identity determines the ‘act + end’ combination to which are obligated. The way that action is related to the role of a ‘reason’ and identity isn’t completely squared up:

<<<
The reason for an action is not something outside of or behind or separate from the action at all, for explicating the action, and explicating the reason, are the same thing. Rather, an action is an essentially intelligible object that embodies a reason, the way a sentence is an essentially intelligible object that embodies a thought.<<ref "15">> 
<<<

	Action includes and represents a reason. Contingent practical identity is the source of these reasons, and thus it is also the source of action. It isn’t just the source of motivation and guidance then; it isn’t just an identity-bearer that is performing an action; identity is, in some sense, an expression of action. 

Odd questions arise, such as ‘What is good action?’ and ‘What is bad action?’  Korsgaard explains that, “Action is self-constitution…what makes actions good or bad is how well they constitute you,”<<ref "16">>  and “A bad action by contrast is something misshapen and defective.”<<ref "17">>   It seems that good action has to do with more than a single contingent identity.  

''Agency -- [Cardinal Feature connected to CPI #2]''

	Korsgaard’s conception of agency does a lot of her philosophical work, and it does so within the context of the notion of contingent practical identity. As I said, they interdefine each other. Exactly where one starts and the other begins isn’t so clear. It is probably safe to say that identity of agency is a special one, perhaps the least arbitrary and the most necessary. It is the one that all good humans have in common. 

At least three major concepts flow from the identity of agency: choice, responsibility and necessitation. The first two are clearly connected to practical identity in these passages: 

<<<
It is as the possessor of personal or practical identity that you are the author of your actions, and responsible for them. And yet at the same time it is in choosing your actions, that you create that identity. What this means is that you constitute yourself as the author of your actions in the very act of choosing them.<<ref "18">>
<<<

<<<
We are self-conscious in a particular way: we are conscious of the grounds on which we act, and therefore are in control of them.<<ref "19">> 
<<<

<<<
When you deliberately decide what sorts of effects you will bring about in the world, you are also deliberately deciding what sort of cause you will be. And that means you are deciding who you are.<<ref "20">>
<<<

<<<
So we are each faced with the task of constructing a peculiar, individual kind of identity—personal or practical identity…It is this sort of identity that makes sense of our practice of holding people responsible, and of the kinds of personal relationship that depend on that practice.<<ref "21">> 
<<<

<<<
To regard some movement of my mind or my body as my action, I must see it as an expression of my self as a whole, rather than as a product of some force that is at work on me or in me.<<ref "22">>
<<<

	You choose and have control over, and essentially, you construct your practical identities and in doing so you choose the obligations and actions corresponding to those identities. It seems that you cannot choose one without the other. Action, obligation, and identity are rolled into one package. You are the free author of your identity, and in making these entailed commitments, you are morally responsible. 

Korsgaard explains that the “temptation to resist the claims of our practical identities is possible.”<<ref "23">>  This is interesting, and it shows that the free will component of agency is robust, and perhaps even foundational to the other identities. The ‘agency identity’ is interesting because it seems (although, Korsgaard will deny this, I believe) that it precedes all other identities. How do you ‘decide who you are’ without having the ability to decide already? I think this suggests that free will is not sufficient (even if it is necessary) for agency in Korsgaard’s theory. 

<<<
This is where the problem of personal identity comes into the picture…in the relevant sense there is no you prior to your choices and actions, because your identity is in a quite literal way constituted by your choices and actions.<<ref "24">>
<<<

Other issues arise - for example, how one sheds agency isn’t clear (although her conceptions of unity and disunity will attempt to explicate it). It does seem to the observer, though not to Korsgaard, that the agency identity is a necessary precondition to choosing whether or not to take on, shed, keep, and use other contingent practical identities.

	This is still, however, oversimplifying the role of agency in her theory. Recall that to use one’s free will to choose an identity is to choose its obligations and its reasons and its actions, simultaneously. The (lack of a) temporal aspect of Korsgaard’s conception of agency is difficult to understand. 

	Fundamental to being an agent, and probably most important, is the way in which it is connected to the notion of contingent practical identity, via her conception of necessitation. Being subject to and bound by the normativity of law, experiencing the “psychological mechanisms of its enforcements,” is an essential feature of what it means to truly be a moral agent.<<ref "25">>   Korsgaard (borrowing from Kant) calls this psychological force //necessitation//.<<ref "26">>   It is noteworthy that it is usually believed necessitation can only be experienced by those who can fail to follow the moral law; the assumption is that you can only be subject to and bound by normativity of law if it is a real possibility that you can fail to meet those requirements. Korsgaard will certainly agree to the idea that duties and obligations belong to agents, at least to those entities who experience necessitation.

	Assuming identities are not entirely fleeting, there is a type of necessitation regarding an agent’s choice to follow a particular identity's obligations. Agents may have incentives, desires, or emotions which in some way drive them to not follow the obligations of an identity. They might, in this sense, maintain an identity and contradict its obligations and choose otherwise (I won’t exactly call this ‘action’ as she understands the word). This sort of necessitation has a small scope; the larger scope is even more important. 

	There seems to be necessitation between different identities as well.  That is, the obligations of one identity may conflict with the obligations of another.  This larger notion of necessitation of agency is vital to the contingent practical identity framework in that it calls forth her most cardinal feature, psychic unity. As she says, “I also believe it is essential to the concept of agency that an agent be unified.”<<ref "27">>  This struggle for unity, at least in part, is based upon conflicts among our various contingent practical identities. She says:

<<<
	Normative standards – as I am about to argue – are the principles by which we achieve the psychic unity that makes agency possible. The work of achieving psychic unity, the work that we experience as necessitation, is what I am going to call self-constitution.<<ref "28">> 
<<<

''Psychic Unity -- [Cardinal Feature connected to CPI #3]''

	Psychic unity is our ultimate goal. Korsgaard explains:

<<<
Identities are the sources of our reasons, but of course the idea is not just that we decide which ones we want and conform to them. We have many particular practical identities and so we also face the task of uniting them into a coherent whole.<<ref "29">>
<<<

<<<
There is work and effort – a kind of struggle – involved in the moral life, and those who struggle successfully are the ones whom we call “rational” or “good.” But it is not the struggle //to be rational or to be good//. It is, instead, the ongoing struggle for integrity, the struggle for psychic unity, the struggle to be, in the face of psychic complexity, a single unified agent.<<ref "30">>
<<<

Agency is about having a unified super-identity, a sum unity of contingent practical identities (which it is itself also therefore a contingent practical identity). Practical identities can conflict, and an agent must unify them. Of course, this again brings up the paradox she mentions, and I’m not sure how she can solve it. If she is able to solve the paradox, and she is right about our final end as unification, then we see that practical identities become even more complex, particularly as they are subject to degrees. She alludes to this:

<<<
People are more or less successful at constituting their identities as unified agents, and a good action is one that does this well. But since action requires agency, it follows that an action that is less successful at constituting its agent is to that extent less of an action. So on this conception, “action” is an idea that admits of degrees. An action chosen in a way that more successfully unifies and integrates its agent is more authentically, more fully, an action, than one that does not.<<ref "31">>
<<<

Action, identity, agency, and unity admit of degree. You aren’t necessarily 100% a teacher or 100% a father – it is possible that you are only 60% of this identity. The unification of your contingent practical identities is about making your super-identity 100% an identity. This helps us understand the forces of normativity within her theory:

<<<
Being a person, having a personal identity, being a rational agent, is in itself a form of work. And the experience of necessitation, with its elements of effort and even of pain, is the experience of the form of work. A good person, it follows, is one who is good at this work. A good person is someone who is good at being a person.<<ref "32">>
<<<

To be a good person, to be a good agent, to be a good human, to have a good identity is to be unified. It is complicated to commit to being a self.

''[b]''

	The cardinal feature of agency has some serious problems, almost all of them connected to the paradox of self-constitution. There is more attached to this paradox than she lets on (although she is probably aware of it). I see three problems arising in this paradox. 

	First, the temporal problem is the most obvious. What does it mean to choose an identity if you don’t already have at least the agency identity? It seems that such a choice isn’t the choice of an agent. It seems that in taking on any non-agency practical identity will somehow lack moral force if it wasn’t the choice of an entity which was an agent beforehand. How can we make sense of amoral entities choosing to become moral agents? It isn’t clear.

	(Further, one might imagine that agency is the sort of identity that comes to you without choice, and perhaps you can lose your agency via suicide or something akin to massive head trauma. But, outside of suicide, it doesn’t make much sense to say you can choose to shed your agency. What would that look like? Surely, she needs a powerful account of this.)

	This paradox of choosing your identity and choosing to be an agent brings with it a second problem as well, namely the idea that there are degrees of agency which you choose. Along with it come degrees of action, identity, unity, moral responsibility, and morality. It isn’t clear what a degree of some of these things will entail or how it operates. 

	Action, for example, seems modular, not like a gradient. What exactly is bad action? It seems that an action can be so bad, springing from such a great degree of disunity of identity, that it is no longer action. Further, it seems that moral responsibility only exists when there is action for which an agent is an author. Was Hitler even a moral agent at all - were his acts really ‘bad’ at all? Was Hitler morally responsible for what he did? It seems he isn’t an agent, and he isn’t morally responsible, and his acts weren’t really morally wrong given Korsgaard’s account. Even if he was minimally an agent, and he minimally had actions, and he was minimally responsible, and minimally ‘wrong’, it seems that he isn’t as responsible as the virtuous agent. In this case, Hitler’s actions don’t count as being as action-like as the virtuous agent, and they don’t count as admittedly of moral wrong in the same way that the virtuous agent’s actions are morally right. 

	It seems difficult to give examples of immoral agents in her theory. Wouldn’t we want to say that immoral agents are just as responsible for their actions as even the most virtuous of agents? Intuitively, it makes sense to  say that immoral agents are unified, and that there isn’t conflict among their various practical identities, but rather what their practical identities are all about are in themselves morally wrong. But, that is not the picture which Korsgaard paints, and that brings us to the last problem.

	 Korsgaard’s conception of agency with respect to contingent practical identities suffers from the problem of moral construction. Korsgaard is offering an account of how one ‘constructs’ morality. What counts as moral law, and whatever obligations we have, is ‘up to us’. Korsgaard has imparted too much power to agency, in this case. If an agent gets to choose identities, obligations, and what counts as ‘valuable’, and as long as the agent is perfectly unified, then it seems whatever they do is arbitrary, but also automatically morally good. Her conception of agency enables practical identity to justify behavior in a circular, subjective fashion.

''[c]''

	Korsgaard really doesn’t think this is paradoxical. As I said before, I think part of her argument will rest upon the notion that possessing all necessary capacities for being an agent is not sufficient for agency. Perhaps free will and rationality, while necessary, aren’t sufficient for agency. If this is true, then it seems that one can freely choose to commit to the agency identity. In one way, I like this argument -- moral responsibility is something you grow into.  But, this should not be confused with the idea that you can choose agency.

	I’m not sure how she would reply to the idea that a free non-agent choosing to be a free agent has moral force to it. I suspect that her constructivism would allow her to make this move. If so, you can shed agency, but retain your free will and other agency-necessary capacities.

	The degrees problem which flows from the premises of the paradox is also largely solved by her constructivism, if she wished to go that route. Without an independent, objective morality, it would seem an acceptable move to claim that ‘morality’ looks like this inside the mind and leave it at that.

	I don’t know how she would defend her constructivism other than to explain that this is the way the world is. Perhaps she might say, “Well, that’s just what it means to be a moral agent, etc.” She certainly doesn’t agree to the idea that we can shed and take up identities whimsically, which is agreeable. Korsgaard thinks her 'dedications and integrity' clause is what prevents me from 'giving up my fatherhood' as an identity at whim. However, I’m still not sure how it is not 'up to me' in some sense whether or not I can take up or drop off my practical identities. I hope she has a deeper account of this issue.
	

''[2][a]''

''[Argument #1]''

Korsgaard is a constructivist with strong elements of moral anti-realism in her theory; essentially, she denies that there are moral properties independent of the mind. The dogmatic rationalist holds that moral propositions are objective features of the world, existing independent of our minds. Given her position, her attack on the moral realism of the dogmatic rationalist makes a lot of sense (although, it is possible that it is her argument against moral realism that led her to her current position).

She explains that she is against the provision of “some sort of ontological foundation, [which posits]…the existence of certain normative facts or entities to which moral requirements somehow refer.”<<ref "33">>  Korsgaard doesn’t like the metaphysical commitments which the dogmatic rationalists make – but why? She explains:

<<<
	The rationalist account…allows instrumental reasons to function as guides, but at the price of making it impossible for us to see any special reason why we should be motivated to follow these guides.<<ref "34">>
<<<

	Korsgaard believes that the rationalist’s conception of instrumental reason, one of the three sorts of practical reason initially discussed, is assumed to be a principle which is an independent, objective feature of the world. Crucially, she claims that while this may be sufficiently guiding, it is insufficiently motivating. 

	Essentially, Korsgaard doesn’t think that an objective moral fact sitting out there in metaphysical reality is really going to be motivating to an agent, and thus, regardless of its guiding contents, it can’t serve or function as a type of practical reason.

	She is calling out the dogmatic rationalist’s framework and asking ‘why’ an agent should really care about morality. Because she believes the dogmatic rationalist can’t demonstrate motivation, their moral realism is an illusion. This is cardinal to her overall moral theory because, if she is right in criticizing the moral realist commitments of the dogmatic rationalist, and this independent objectivity is an illusion, then her constructivist theory is plausible. 

''[Argument #2]''

Korsgaard argues that the dogmatic rationalist is unable to provide a substantial, meaningful, and non-circular definition of rationality. She says:

<<<
	The dogmatic rationalist’s strategy is to first identify reasons—by asserting them to be parts of realty—and then to define rationality in terms of reasons: a rational being is by definition one who responds to reasons in the right way. This strategy necessarily leads to a purely definitional account of rationality, and can tell us nothing substantive about what function or power of the human mind rationality is.<<ref "35">>
<<<

	The relationship between reasons and rationality is misconstrued, as Korsgaard’s sees it. She draws a distinction between Rationality and Reasons. She says that dogmatic rationalists begin with reasons, and then 'go up' to rationality. She thinks we have to go from top down instead to avoid problems. In part, she’s pointing out something fishy about the dogmatic rationalist’s strategy to interdefine reasons, rationality, and the rational being. It seems tautological and analytic, but also circular and uninformative about the contents and nature of these concepts. 

	This is somewhat similar to the criticism of moral reasoning in virtue ethics as being circular; namely, the virtuous agent defines virtue, and virtue defines the virtuous agent - but in the end, we aren’t exactly sure what either one really looks like.

	Korsgaard offers a possible rebuttal which a dogmatic rationalist might give:

<<<
	There is one way in which the realist strategy still might seem to work. We could simply //define //a rational agent as one who responds in the appropriate way to reasons, whatever they are, and we could then give realist accounts of all practical reasons, including instrumental ones. There is a set of normative facts, about which reasons there are, and a rational agent is by definition someone whose actions are motivated by these reasons.<<ref "36">>
<<<

	Perhaps the dogmatic rationalist can say that insofar as agents are not motivated by independent, objective moral truth, they aren’t rational. This is an interesting approach, but I think Korsgaard still has the circularity problem. She explains:

<<<
	If all we mean is that the person is reliably caused to act in accordance with reasons, we fail to capture what is rational about the person. His actions may be rationally appropriate, but not because he sees that they are so: it seems to be a sort of accident that his motivational wiring follows the pathways of reason.<<ref "37">>
<<<

	The problem with the circular definition is that it seems accidental rather than essential. If a dogmatic rationalist would use this argument, then it isn’t just cheating on the definition, but really it fails to capture meaningful motivational requirements, in Korsgaard’s eyes.

	This criticism of dogmatic rationalism points toward a cardinal concern for Korsgaard, namely offering an account that can actually describe the contents of rationality and reasons, and essentially, she wants a non-circular account of the normative force of practical reason. If she herself can avoid making a circular argument, and she can offer a substantive account of rationality, reason, and the normative force of practical reason, then it seems she would have the more plausible theory.

	
''[b]''

''[Counter-argument #1]''

		It is unclear what it means for something to be true if it doesn’t have the independent, objective status. Just because X in your mind just doesn’t seem like a good enough reason to call X a truth. Yes, it is true that ‘X is in your mind’, but that doesn’t make it true that ‘X’. This motivational concern seems like misdirection. How can Korsgaard escape from this strong moral realist view without becoming a nihilist or relativist? I don’t know. 

	Consider, as an example, a comparison between mathematics and the categorical imperative. Let us assume (and I think Korsgaard does) both the categorical imperative and mathematics are //synthetic a priori// truths. Would Korsgaard agree to the idea that the principles and truths of mathematics are not dependent upon our minds? It seems like the truths of mathematics are not ones we socially construct, but rather discover. Surely the truth of mathematics is best handled by metaphysical commitments of the dogmatic rationalist, despite the uneasiness we might have making such strong, yet abstract and difficult to empirically point out, ontological assumptions. Are we motivated to believe and use a truth like 2+2=4? I think so. And, why?  Because it is true. I don’t think it is coincidental that I’m motivated to believe it. I think there is something wrong with being motivated to believe and use something when it isn’t objectively true. 

	Consider Goldbach’s conjecture (every even integer greater than 2 can be expressed as the sum of two primes). It is either true or false, but we don’t know which. We have good reasons to believe it is likely true, but we have no proof solution. We don’t yet know. Surely the truth or falsity of this mathematical claim does not rest upon my belief. The dogmatic rationalist is a great position to tell the story of what is happening here, and I think Korsgaard wants to agree to dogmatic rationalist story in this case. But, why can’t the same sort of objectivity story be told for moral truths?  It seems that the truth of mathematics binds us in the same way that truth of rational morality binds us.

	I’m left wondering how respect for the moral law not itself the sort of ‘special reason why we should be motivated’ to follow the moral law as a guide? Why can’t the dogmatic rationalist posit this ‘respect for the moral law’? I don’t know.

	The potency of morality and the relationship between epistemology and ontology are both at stake. It would have been prudent if Korsgaard had instead openly started with and assumed the dogmatic rationalist’s position, the position which we all would hope to pan out, only giving it up after demonstrating beyond a shadow of doubt that the position is committed to something illogical and intolerable (which she hasn’t done). There is too much at stake to do otherwise.

''[Counter-argument #2]''

	I don’t find the circularity of such a foundational topic to be terribly objectionable. We are the bottom level of philosophy, and it is here that our justifications begin to look a lot more like assumptions than proofs. At some level, we are going to beg the question, and formally include our axioms within the justification of our axioms. There is no way to justify the reflexivity principle, loosely speaking, A= A, unless one already assumed it is true, and likewise for other axiomatic propositions like the law of excluded middle. It seems these sorts of meta-ethical questions, which are at the foundational link between epistemology and ontology, are not the sort of concepts which have anything beneath them with which justify an argument. It is because of this, at least for now, I don’t see a problem with a circular definition of these concepts.

	As such, I’ll make the odd move and claim that Korsgaard’s criticism against circularity, in this case, will ‘hold-water’ if and only if she is able to present a theory which isn’t also subject to the same criticism. I’m not sure how she isn’t making, however, the similar sort of circular definition in her own theory.

	Korsgaard has an innately constructivist view of these concepts. In her theory, it seems that rational morality is what we define it to be. It seems she also employs a circular definition, not from mind to independent reality, but from the mind to itself. Even if the dogmatic rationalist doesn’t have a substantive or informative definition of rational morality, I don’t think Korsgaard does either. 

''[3][a]''

''[Aspect #1]''

Like the dogmatic rationalist, Korsgaard locates rationality internally, but rather than finding practical reasons to act externally, she also finds them internally. The internality of both rationality and reasons is a major aspect of her theory. The practical reason to act is created through the categorical imperative and the instrumental principle, which are both internal to the agent (in her opinion; she also comes to define them as the same thing, eventually). This internality demonstrates a strong relationship between rationality and the will. This is part of meeting the requirements of practical reason: being both guiding and motivating. She explains:

<<<
Kant is usually thought of as a rationalist, but the Kantian conception of practical rationality represents a third and distinct alternative. According to the Kantian conception, to be rational just is to be autonomous. That is: to be governed by reason, and to govern yourself, are one and the same thing.<<ref "38">>
<<<

<<<
By seeing what goes with [Kant’s] early presentation of the instrumental principle, we are led to the mature Kantian view, which traces both instrumental reason and moral reason to a common normative source: the autonomy or self-government of the rational agent.<<ref "39">> 
<<<

Korsgaard holds this conception of rational autonomy. Rationality and will are entwined. An agent can’t be said to have one without the other.   Rationality and the autonomous will are, in fact, the same thing – the same faculty by which one determines what actions to take in order to reach the end one has chosen. She continues:

<<<
The principles of practical reason are constitutive of autonomous action: they do not represent external restrictions on our actions, whose power to motivate us is therefore inexplicable, but instead describe the procedures involved in the autonomous willing. But they also function as normative or guiding principles because in following these procedures we are guiding ourselves.<<ref "40">> 
<<<

Rationality acts both as motivation and guidance because it is descriptive of the movements of the autonomous will. In this way, Korsgaard escapes the trap of having the instrumental principle merely describe what happens when one desires something.  It is truly the will – the faculty of choice – that drives decision making. She continues:

<<<
Kant’s version of the instrumental principle [is] formulated in terms of the will, not in terms of desire. In general or schematic form, the instrumental principle tells us that if we will an end, then we ought to will the means to that end.<<ref "41">>
<<<
<<<
Instead, the act of making a maxim—the basic act of will—conforms to the instrumental principle by its very nature…To will an end just is to will to cause or realize the end, hence to will to take the means to the end. This is the sense in which the principle is analytic. The instrumental principle is constitutive of an act of the will. If you do not follow it, you are not willing the end at all.<<ref "42">>
<<<

	By combining rationality and reason through the autonomous will, Korsgaard makes it possible to view the process as both constructivist and normative.  This is connected to the practical identity, as well – in choosing an end and committing yourself to a particular identity and its obligations, you create and accept normative moral laws:

<<<
Willing an end just is committing yourself to realizing the end. Willing an end, in other words, is an essentially first-personal and normative act. To will an end is to give oneself a law, hence, to govern oneself. That law is not the instrumental principle; it is some law of the form: realize this end. That of course is equivalent to “Take the means to this end.” So willing an end is equivalent to committing yourself, first personally, to taking the means to that end.<<ref "43">>
<<<

Korsgaard’s conception of the relationship between practical reason and rationality is necessary for the rest of her moral theory. The internalist argument she provides is of cardinal importance to the concepts of self-constitution – they are inextricably linked. The notion that rationality finds internally the reason to will and act allows her to support a constructivist view of morality. 

[Aspect #2]

	The instrumental principle is normative only insofar as the categorical imperative normatively gives us ends. The instrumental principle is not normative on its own -- it doesn’t stand alone. While the categorical imperative doesn’t specifically tell us which certain ends we have, the categorical imperative leads us to some ends, and in doing so, it grants normativity to the instrumental principle.<<ref "44">>   We see that Korsgaard is, at first, considering that the instrumental principle is in some way separate from, but not fully independent of, the categorical imperative. She points towards this:

<<<
The instrumental principle cannot stand alone. Unless there are normative principles directing us to the adoption of certain ends, there can be no requirement to take the means to our ends. The familiar view that the instrumental principle is the only requirement of practical reason is incoherent.<<ref "45">>
<<<

	The instrumental reason is dependent upon the categorical imperative. So far it seems that she is still willing to separate instrumental reason, in some sense, from the categorical imperative, but her later clarification demonstrates that it really isn’t separable. There is a unification theory of practical reason. As she changes the outline of her argument in her afterword, we see an explanation which ends up saying something profound, namely, there is only one type of practical reason, the categorical imperative. Admittedly, she originally points towards this in a footnote:

<<<
	Moral or unconditional principles and the instrumental principle are both expressions of the basic requirement of 
giving oneself a law, and bring out different implications of that requirement…I am inclined to think that the right thing to say about this parallels what I take to be the right thing to say about Aristotle’s theory of the unity of the virtues. There is really only one virtue, but there are many different vices, different ways to fall away from virtue, and when we assign someone a particular virtue, what we really mean is that she does not have the corresponding vice. In a similar way, there is only one principle of practical reason, the categorical imperative viewed as the law of autonomy, but there are different ways to fall away from autonomy, and the different principles of practical reason really instruct us not to fall away from our autonomy in these different ways.<<ref "46">>
<<<

	Korsgaard makes an important analogous explanation of the single principal of practical reason in this footnote; it is from this after thought that her change in the afterward develops.  She compares her idea to Aristotle’s conception of the single virtue.  According to Aristotle, there is only one virtue; there are, however, many vices (that is, many ways to fail to meet that virtue).  What we conceive of as many virtues, as being in some way artificially separable from the single virtue, are really various ways we can fail to fail (i.e. succeed) – they are not, in essence, separate entities from the single virtue.  Likewise, in Korsgaard’s view of the single principal of practical reason, the only true principal is the categorical imperative.  There are many ways, however, that one can fail to achieve or perhaps lose autonomy – and the various corresponding ways to fail to fail can be seen as principals of practical reason.  The instrumental principle, then, is not separate from the categorical imperative – it is merely part of the way to meet the requirements of the categorical imperative. Failure to implement the instrumental principle is but one specific way of failing to meet the categorical imperative.

	She later makes the explicit claim in her afterword:

<<<
	The instrumental principle is not a principle of practical reason that is separable from the categorical imperative: rather, it picks out an aspect of the categorical imperative; the fact that the laws of our will must be practical laws, laws that constitute us as agents by rendering us efficacious….So let me here state the conclusion of my argument properly. There is only one principle of practical reason, and it is the categorical imperative.<<ref "47">>
<<<

	By integrating the instrumental principle into the categorical imperative, she is able to explain why the instrumental principle has normative force.

''[b]''

''[Counter-argument #1]''

	Her theory does show guidance and motivation, but I think her argument does so at the cost of normative force rather than to the conclusion of it. Two issues come to mind. 

	The first is that her internalism removes the objectivity that I seek above all else. Without it, I just don’t see anything as justified. Of course, I’m defining justification as something that is outside me, and it doesn’t look like Korsgaard is willing to go that direction.

	Second, I question if it is an appropriate move to combine rationality and the will as she does. I certainly recognize that there is a strong connection between the two, but I’m not convinced that they are the same faculty. I don’t know what it means to do what is irrational or wrong in her theory. Separation of will from rationality provides room to make better sense of things like irrationality and even immorality. I don’t see why one can’t choose to will what is irrational. 

''[Counter-argument #2]''

	I’m not sure I can disagree with the idea that there is only one principle of practical reason. I think, however, that it’s a possibility with which moral realism might be able to agree. But, therein lays the difference. The relationship between the agent and the principle is where I disagree with Korsgaard the most. 

	The relationship between the instrumental principle and categorical imperative should be a strong one. Exactly how strong, I’m not sure. 

	Admittedly, in conjunction with others features of a moral theory, there are odd sorts of positions which might come about if we collapse the instrumental principle into the categorical imperative. Let us assume that only universalizable maxims count as rational ones. Aren’t there elements of rationality in non-universalizable maxims, specifically of the sort which include a proper implementation of the instrumental principle?

	If the instrumental principle is merely an integrated subset of the categorical imperative, then it seems extraordinarily difficult to talk about being rational, to any degree, in reference to a non-universalizable maxim. I believe some evil people are ‘more rational’ in their approach to being evil than others. Would not the agent who is most effective at bringing about evil ends be, in some way, more immoral than the inept agent who failed to implement the instrumental principle? I’m not convinced this sort of story can be told within Korsgaard’s framework. 

	There definitely has to be overlap between the instrumental principle and the categorical imperative. I don’t see how it is plausible that the categorical imperative includes within it the instrumental principle. It doesn’t seem to make enough room for doing what is wrong, what is against the categorical imperative, while still being otherwise quite rational.
	  
---------------------------

<<footnotes "1" "Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity //(Oxford: Oxford University Press, 2009), 20">>
<<footnotes "2" "Ibid., 20">>
<<footnotes "3" "Ibid., 21">>
<<footnotes "4" "Ibid., 20">>
<<footnotes "5" "Ibid., 23">>
<<footnotes "6" "Ibid.">>
<<footnotes "7" "Ibid.">>
<<footnotes "8" "Ibid.">>
<<footnotes "9" "Ibid., 22-23">>
<<footnotes "10" "Ibid., 23">>
<<footnotes "11" "Ibid., 24">>
<<footnotes "12" "Ibid., 1-2">>
<<footnotes "13" "Ibid., 11">>
<<footnotes "14" "Ibid., 10">>
<<footnotes "15" "Ibid., 14">>
<<footnotes "16" "Ibid., 25">>
<<footnotes "17" "Ibid., 17">>
<<footnotes "18" "Ibid., 20">>
<<footnotes "19" "Ibid., 19">>
<<footnotes "20" "Ibid.">>
<<footnotes "21" "Ibid., 19-20">>
<<footnotes "22" "Ibid., 18">>
<<footnotes "23" "Ibid., 21">>
<<footnotes "24" "Ibid., 19">>
<<footnotes "25" "Ibid., 2">>
<<footnotes "26" "Ibid., 3">>
<<footnotes "27" "Ibid., 18">>
<<footnotes "28" "Ibid., 7">>
<<footnotes "29" "Ibid., 21">>
<<footnotes "30" "Ibid., 7">>
<<footnotes "31" "Ibid., 25">>
<<footnotes "32" "Ibid., 26">>
<<footnotes "33" "Christine Korsgaard. “The Normativity of Instrumental Reason” in //The Constitution of Agency: Essays on Practical Reason and Moral Psychology// (Oxford: Oxford University Press, 2008), 29-30">>
<<footnotes "34" "Ibid., 31">>
<<footnotes "35" "Ibid., 55">>
<<footnotes "36" "Ibid.">>
<<footnotes "37" "Ibid.">>
<<footnotes "38" "Ibid., 31">>
<<footnotes "39" "Ibid., 32">>
<<footnotes "40" "Ibid., 31">>
<<footnotes "41" "Ibid., 46">>
<<footnotes "42" "Ibid., 56">>
<<footnotes "43" "Ibid., 57">>
<<footnotes "44" "Ibid., 68">>
<<footnotes "45" "Ibid., 32">>
<<footnotes "46" "Ibid., 63">>
<<footnotes "47" "Ibid., 68">>
Liam Murphy is exclusively interested in “describing a robust egalitarian conception of justice that nevertheless makes reasonable demands on people.”<<ref "1">> His assessment of ‘reasonable’ does a lot of unspoken philosophical work which shapes the rest of his argument. His debate between monism and dualism of political philosophy rests upon this aim.  Admittedly, this initial aim, prima facie, seems quite agreeable. As it shapes his discussion, however, it becomes apparent that this aim requires clarification and justification.  I’m going to briefly sketch out his argument, as well as explain his distinction between monism and dualism.   From there, we’ll be able to consider the impact of the underlying aim, and whether or not it really makes a good case for monism, and if the aim (or its denial) has influence on the viability of dualism as Murphy presents it.

A monist believes there is one set of fundamental normative principles or goals which determine both institutional requirements and personal moral requirements.  Justice is likely a subset of morality.   Whatever principles define morality also determine the subsequent principles of justice. Murphy takes monism to be the default view, such that we need good reasons to depart from it.<<ref "2">>

	A dualist believes there are two sets of fundamental normative principles or goals, one which determines institutional requirements, which is where justice begins, and another which determines personal moral requirements. For the dualist, justice isn’t activated until the institutional level. Essentially, the source of the normativity of justice does not correspond to the source of the normativity of morality. Morality and justice are separate realms of normativity.

To be clear, monists certainly aren’t against institutions. In practical terms, and in most circumstances, it seems that monistic justice demands that we create some sorts of institutions. Vitally distinguished from dualism, the justice of monism isn’t activated by the implementation or design of institutions; rather justice is active before any institutional considerations. Institutions are instrumental, but not fundamental, to the monist.

	What monistic theories have in common is simply that principles of justice are derived from the same principles of morality. Principles of justice aren’t fundamental; they can’t stand alone; they must be underwritten by moral principles. Murphy’s standard principle of morality is some variant of utility, but he thinks this isn’t important (he’s probably wrong about that). He believes that monism motivated by his aim can cover many sorts of mainstream moral theories. While I can agree that monism, in general, without regard to his motivation, is capable of catering to other moral theories, I’m not convinced his motivation for monism is the right one, nor do I think his aim remains compatible with many moral theories. It is likely the case that his initial aim is built into his moral theory, which is why it plays out in any subsequently derived theory of justice he would deem plausible. 

Importantly, Murphy believes that dualism also takes up this aim. He explains:

<<<
A main hope behind all the arguments for dualism seems to be that it will help with a fundamental problem faced by, specifically, egalitarian theories of distributive justice: the problem of the unreasonable demands such theories of justice may potentially impose on some people.<<ref "3">>
<<<

His initial aim is a motivating force behind not only his monistic theory of justice, but, in his view, that of dualists, as well. Murphy believes that many political philosophers pursue dualism because they perceive it to be better at avoiding a problem of ‘unreasonable demands of justice’. Much of his argument deals with showing why dualism is not as favorable as monism in this respect. In some sense, Murphy believes that almost all arguments in favor of dualism, particularly for the sake of this initial aim, can be more effectively captured by monism. And if he is correct, then the reasons which might drive political philosophers towards dualism, need not take us there, but can instead lead to a specific conception of monism which does the same work without as many problems. He continues:

<<<
What binds together all the arguments I will consider is an underlying concern to describe a plausible and robust egalitarian theory of distributive justice that nevertheless appears to make reasonable demands on people in just and unjust circumstances. That this Rawlsian project is worthy I take for granted; my aim is to show that dualism hinders rather than helps it.<<ref "4">>
<<<

This ‘underlying concern’, the initial aim, is part of what he thinks is a Rawlsian project (and he is probably right).  Murphy believes monism is superior to dualism in this Rawlsian project.  This initial aim is a litmus test for the plausibility of any theory of justice, regardless of whether it is monistic or dualistic; it is a test of the ‘reasonableness’ of the demands of that theory.  This he admits to taking for granted. 

It is a potent test, but I think we must question its grounds.  If he is wrong about that initial claim, then I don’t think the rest of his argument can serve as a justification for why one should maintain monism. Further, if he is correct about the motivation behind dualism, and his initial aim is unjustified, then dualism also seems unjustified. The context of his argument at large rests upon this initial aim. 

What counts as a ‘reasonable demand on people in just and unjust circumstances’?  By reasonable, he means ‘minimal’. And by minimal, we aren’t talking about whether justice can demand more than what is required (that would be injustice!).  Rather, the minimal aspect of ‘reasonable’ is that justice demands obligations of minimal size or minimal degree.  In Murphy’s view, justice has a low-ceiling on positive duties. He’s not going to consider any theory of justice which could make demands greater than his intuitive minimalism.   That assumption needs justification.

So, what is the problem with this principle of minimal sacrifice? What are the effects of assuming that there is a low ceiling to the sacrifices which justice requires? Murphy begs the question. Within the word ‘reasonable’ Murphy has inserted this principle of minimal sacrifice.  And, it just so happens that theories which meet this ‘reasonable’ requirement come pre-built with the principle of minimal sacrifice. 

Perhaps the obligations of morality and subsequently justice are such that we should sacrifice almost everything but the clothes on our backs for the sake of others. Murphy’s low ceiling is, for now, artificial, it is begged.   It might suit his intuitions or justify his way of life, but I’m far from convinced it is correct.

In part, we are roped into a discussion of the grounds of normativity.   It is clear, at least for the monist, that the moral principles dictate the principles of justice, and thus, our moral theories have profound impact on the sorts of justice theories which can be considered. He assumes certain moral principles, and that shapes justice for him. I’m fine with that, but it isn’t a great reason to be a monist in general, only to be a monist if you take his moral principles and further arguments comparing the effectiveness of dualism and monism to be true. It seems then, that he needs to justify his moral views in order to further defend his theory of justice.

Murphy is interested in achieving “our egalitarian aims without making ourselves miserable in the process.”<<ref "5">>  I think nobody wants to be miserable. But what does justice/morality have to do with my happiness?  To the egoist, everything.  To the utilitarian, it is substantially more complicated, and still not clear at all that I myself will achieve happiness.  To a virtue ethicist, it still isn’t clear in the practical world, particularly concerning moral luck and tragic dilemmas that we likely face in the real world – many virtue theorists purposely avoid the discussion of justice simply because it very often seems that the virtuous agent doesn’t directly benefit from it.   The Kantian doesn’t think personal happiness has anything to with justice or morality.   I tend to sympathize with this view; as far as I can see, what ‘I want’ has no direct connection to morality or justice.  Murphy subscribes to a variant of utilitarianism in this paper, but he mistakenly believes this argument is going to work for the other mainstream moral approaches.<<ref "6">>  Depending on the moral theory one takes us up, in monism, the sort of justice derived might be quite contradictory to Murphy’s aim.

Justice very well might call for us to make ourselves miserable. The easy example might be that misery is in some way subjective, and so it is very easy to see why some really might need to make themselves miserable for the sake of justice. But, even past this subjective point, I don’t see why it isn’t at least a possibility that justice requires we are all going to make sacrifices which will make us miserable. He continues:

<<<
If the background institutions are doing their job properly, people will not have to think too much about promoting general well-being, and this liberation is, from the point of view of beneficence, all to the good.<<ref "7">>
<<<

Pursuing our own interests and being happy is a good thing, generally speaking.   And, of course, all else being equal, the choice between a hypothetical theory of justice which doesn’t make room for our own interests, e.g. a prescription for institutions which are inefficient in maintaining our personal interests, and a theory of justice which does make room for our interests and happiness (to some extent), I’m willing to accept the latter is best.  Except, I think Murphy is really pointing out how important he thinks our ‘interests’ really are so superior in priority that the demands of justice must be bent around them. He thinks my lifestyle, my interests, my enjoyments – are to some degree fundamental to morality, and thus fundamental to justice. 

The principle of minimal sacrifice built into his moral theory plays a strong role in developing his monistic theory of justice. He seems to assume in some sense that the dualist has monist tendencies to start, but then drifts away toward dualism directly because of how they perceive the test results for reasonable obligations, essentially minimal sacrifices and maximizing happiness. Because he is a monist, if his moral principles are wrong on account of his principle of minimal sacrifice, then his principles of justice will be also. And, if he is correct about how dualism develops and what motivates their thinking, but remains incorrect about the principle of minimal sacrifice, then the dualists are also wrong. His initial assumption, if correct, might enable the rest of his argument for monism to follow, but he gives no reason to assume his initial assumption is correct.

---------------------------------

<<footnotes "1" "Liam Murphy, “Institutions and the Demands of Justice,” //Philosophy & Public Affairs//, Vol. 27 No. 4 (Blackwell Publishing: 1998), pg. 257">>
<<footnotes "2" "Ibid., 267">>
<<footnotes "3" "Ibid., 255">>
<<footnotes "4" "Ibid., 256">>
<<footnotes "5" "Ibid., 258">>
<<footnotes "6" "Ibid., 262">>
<<footnotes "7" "Ibid., 263-264">>

''[1][a]''

	Korsgaard is very careful in her definition of a “moral reason." For the most part, moral reasons stem from moral principles – for example, “the fact that an act is unjust or unkind is a moral reason against it.”<<ref "1">> In addition, she claims there is a special category of moral reasons, derived from the proper application of the categorical imperative. If a person acts according to the guidance of the categorical imperative, then he or she acts from moral reasons – or, at least, according to a moral ‘ought’. Korsgaard does not, however, claim that all actions – even those allowable by the categorical imperative – stem from moral reasons.<<ref "2">>  This is a bit confusing, because other parts of her theory suggest that actions which unify one are the only things we can call actions – and that those actions are derived from the categorical imperative, and should, therefore, be considered actions with moral reasons. 

In considering the differences in substantive and formal conceptions of morality, particularly regarding what it means to say we have a “moral reason” to do something, Korsgaard has an interest in preserving an “unconditionally binding” property of moral reason.<<ref "3">>   “Moral reasons” are products of a proper procedure or method of deliberation – it is in virtue of the procedure that moral reasons are significant and binding. The sort of procedure that Korsgaard endorses, the categorical imperative, which she believes is a formal conception of morality, produces unconditionally binding moral reasons. She wishes to dismantle procedures which don’t produce morals reasons which are unconditionally binding, such as those which might emerge from substantive conceptions of morality. 

	 Korsgaard contends with Bernard William’s explanation of “should” and “morally ought.”<<ref "4">>  It seems to him that morals reasons are a subset of all the reasons used for deliberating what we should (in a non-moral sense), in an all-things considered sense, do in general. Each subset of reasons belongs to a ‘point of view’ such as a “moral point of view,” a “self-interested point of view,” and so on.<<ref "5">>  So, the question “What should I do?” can be broken down into a sub-question from each point of view, such as “What should I do from a moral point of view?” and “What should I do from a self-interested point of view?” and so on. Each question represents a “sub-deliberation” of the general deliberation of the question “what should I do?”<<ref "6">> 

The “weighing model,” as a decision procedure, is about balancing reasons from different specific points of view to ascertain what one should do in general. <<ref "7">>  This is explicitly a procedure for figuring out whether one should or should not do some particular thing. In a decision to do one particular thing, some reasons are for one thing and some are against it. Whichever side, for or against, ultimately has the most weight (a detailed analysis of Korsgaard’s interpretation of this model can be found in part [B]) determines whether you should or should act in a certain way.

The vital point is that the deliberation of the weighing model contrasts moral reasons, which stem from the moral point of view, from other types of reasons, which stem from other points of view.<<ref "8">>  Korsgaard believes that a substantive conception of morality of the weighing model, in contrast to a formal conception of morality, particularly the operation of the categorical imperative, has built into it the pitfall of the possibility of separating the sense of ‘moral should’ from (as a subset of) the ‘general should’. The problem then is that moral deliberation takes a backseat to the deliberation of the ‘general should’. Moral reason doesn’t seem unconditionally binding within this procedure, as other sorts of reasons may override moral reason.

Korsgaard would likely agree that my moral point of view might provide strong moral reasons for me to be a good father to my children and to take proper action necessary to help them flourish. I might, on the other hand, not feel like doing this action. Perhaps some non-moral points of view offer quantitatively and qualitatively more robust reasons against this action of fatherhood (the self-interested point of view, for example, might point in this direction). By this conception of the weighing model, my moral reasons are outweighed by the reasons of my non-moral points of view. Thus, while from my moral point of view, I morally ought to do this fatherly action, I generally should not do this fatherly action. In this way, ‘moral oughtness’ loses its normative teeth; it is merely one of many points of view in domain of the ‘general shouldness’.

Avoiding that distinction between ‘moral ought’ and ‘general should’, which Korsgaard believes to be caused by employing a substantive conception of morality, is the motivation behind her preference for a formal conception of morality, in particular the Kantian “testing model.”<<ref "9">>  She explains:

<<<
The way you are supposed to deliberate is to formulate a maxim, stating the complete package of considerations that together favor the performance of a certain action…the marshaling of relevant considerations…will still go on, but now it will be part of the work of formulating the maxim. You will still do some weighing and balancing, although now it will only be of considerations that plainly are generally commensurable—we need not assume a metric that makes any possible consideration commensurable with any other. Your maxim, once formulated, embodies your proposed reason. You then test it by the categorical imperative, that is, you ask whether you can will it to be a universal law, in order to see whether it really is a reason. Universalizability is a condition on the form of a reason, and if a consideration doesn’t meet this condition, then it is not merely outweighed—rather, it is not a reason at all.<<ref "10">> 
<<<

	The categorical imperative is an oven in which you bake maxims; it is a test of the universalizability of maxims. Universalizable maxims are the cakes that come out of the oven which are worth consuming. Notice that the categorical imperative is a formal principle. Let us see if it does the work she thinks it does.

The complex part of the story begins with the formulation of the maxim. A maxim, which is a subjective principle, might usually be thought of as the set of {act, principle, end}. In this explanation of the maxim above, we are also marshaling together and adding to that set all other relevant considerations. So, the maxim as a complete package is the set {act, principle, end}∪{all other considerations}. This is our proposed reason, our proposed action even, which will be tested for universalizability by the categorical imperative.

Interestingly, Korsgaard claims that weighing and balancing of commensurable considerations is part of the formulation of the maxim. This suggests that some of work of the weighing model is done as a part of formulating the maxim, and thus the weighing model, in some sense, is incorporated into this testing model.

Only the maxims which pass the test of the categorical imperative, satisfaction being the universalizability of the maxim, can be said to be reasons for actions. If a proposed maxim doesn’t pass the test, then you can’t act on it, and you can’t use it as a reason to act, and it fails to be an action (as Korsgaard uses the word). And, so, we can see the categorical imperative essentially defines what really counts as action or true maxim or a moral reason, while the hypothetical imperative and proposed maxims play very subsidiary roles.gpg --verify check.sum.sig check.sum

This model is crucial because it seems that the products of the categorical imperative are moral reasons entirely for or entirely against specific actions. This formal conception of morality neatly packs the relevant considerations which we might be worried about including in the procedure, which the weighing model is designed to handle, while also avoiding the mistake of making moral reasons a subset of all the reasons used to deliberate about what we generally should do. So, it seems that Korsgaard can plausibly “identify the general should of deliberation with the moral ought.”<<ref "11">>  

Given Korsgaard’s remark, “we make ourselves the authors of our actions, by the way that we act,” she really must prefer the testing model over the weighing model.<<ref "12">>  By Korsgaard’s technical terms of art, in order for a person to perform an action, that person must be an agent. In order to be an agent, that agent must be unified. And, unifying yourself requires constituting yourself in accordance with the principle of practical reason, ultimately the categorical imperative. Essentially, “action requires agency, and agency requires unity,” and unity requires the categorical imperative.<<ref "13">>  Action, agency, and unity inter-define each other; all are subject to the categorical imperative; and therefore we say the categorical imperative is the constitutive principle of action. 

Thus, the categorical imperative is normative for us, it binds us.<<ref "14">>  But, since this is Korsgaard’s major thesis, and this is what she means by the above remark, then she must prefer the testing model – the test itself being the categorical imperative. The very definitions of reason, action, and agency rest upon the use of this particular testing model.

''[b]''

Intuitively, we should object to Bernard Williams’ weighing model because it allows non-moral reasons to trump moral reasons – essentially, we shouldn’t agree to the notion that ‘moral ought’ is distinct from, as a subset of, the ‘general should’. Korsgaard does point out that her description of the two models doesn’t solve this problem,<<ref "15">>  but I think she passes the argument off as being in the right direction. My intuitive objection motivates me to deny Williams’ particular weighing model, but it doesn’t motivate me to deny weighing models and take up the testing model. I think is easy to slip into making the mistake of transferring the force of the intuitive argument against Williams’ weighing model to an argument which is both against all weighing models and in favor of a testing model like the categorical imperative.

 If I were to deny, for the sake of argument, Korsgaard’s theory of self-constitution at large, and therefore lacked the crucial reasons she offers to motivate taking up a formal conception of morality, particularly the categorical imperative as a testing model, I remain unconvinced that the categorical imperative is obviously more plausible than well-constructed substantive conceptions of morality, such as utility or a plausible, non-relativistic weighing model.

With that said, my objective is to specifically defend Williams’ weighing model. The virtues of Williams’ weighing model might be slim, but I think the manner in which Korsgaard presented the model missed some of the advantages of the argument, and so I will extend and clarify her interpretation of his weighing model. Charitably and carefully presenting Williams’ weighing model in a better light will illustrate more depth to the virtues of it. So, while I might not, in the end, agree to the weighing model, my defense of the weighing model will demonstrate that Korsgaard doesn’t provide us a well-made picture of Williams’ weighing model, and that a proper account will be more coherent and (somewhat) more plausible than she implies. 
Korsgaard gives this example of the model:

<<<
You take a piece of paper, draw a line down the middle of the page, and write ‘‘for’’ on one side and ‘‘against’’ on the other, and then you start listing the relevant considerations…Then you add them all up somehow to see how strong the balance of reasons is ‘‘for’’ and how strong the balance of reasons is ‘‘against’’…On the ‘‘for’’ side you might write: ‘‘I would earn a lot of money’’ and ‘‘I would have more prestige.’’ Those, you say to yourself, are self-interested considerations. But perhaps on the ‘‘for’’ side you also write: ‘‘It would give employment to the local population’’ and on the against side you write: ‘‘It would damage the environment.’’ Those, you say to yourself, are moral considerations.<<ref "16">> 
<<<

A construction of the list she describes above likely looks something like this:
                    Figure 1

I’m taking liberties in interpreting a plausible meaning of “you add them all up somehow to see how strong the balance of reasons is ‘for’ and how strong the balance of reasons is ‘against.’”<<ref "17">>  All the reasons are stacked up on two sides of a single table, and they are balanced/weighed by adding the sum strength of reasons for and against. Notice that the number of reasons isn’t what matters; it is the weight of the reasons that decides. One really good reason for something might outweigh several less significant reasons against something.  In this case, the weighing model shows that you should not do X.

I’ve marked this as a ‘general point of view’, and we should note that the ‘moral point of view’ and all the other specific points of view are not directly demonstrated by this illustration; perhaps in her example they’ve been collapsed into the general table. I’ve artificially grouped similar types of reasons together on each of the side, but I need not do that – they could be in any order and it wouldn’t matter. We should also notice that the notion of subdeliberation appears somewhat absent from this picture. 

Unfortunately, it seems like only one giant deliberation. There is supposed to be a final deliberation, but preceding it, there should be subdeliberation(s) – and those, unfortunately, aren’t found in this illustration.

Korsgaard’s example does not mesh well with other things she explains, including:

<<<
[1] The picture seems to be that, on the way to making a decision, you marshal together the considerations of a certain common type before balancing them against considerations of another type.<<ref "18">> 
<<<
<<<
[2] If you think about deliberation this way, it is perfectly natural to talk about moral reasons and contrast them with other types of reasons.<<ref "19">> 
<<<
<<< 
[3] When you make your final decision, you might say something like: ‘‘well, there are some moral reasons against it, but they are outweighed by the moral reasons in favor of it, so on the whole morality favors it. And self-interest favors it too. Therefore, all things considered, it is what I should do.<<ref "20">> 
<<<
<<<
[4] Then you might do some subdeliberation on these various types of considerations, and then balance out the results against each other. .<<ref "21">> 
<<<

Remarks [1], [2] and [3] suggest that each point of view is its own group of considerations/reasons, and the reasons belonging to a point of view are weighed/balanced/contrasted as one collective group against another collective group. The example she gives doesn’t make sense of this. Remark [3] is especially important to modeling because it points to multiple decisions in the process, and it seems to directly show how it isn’t the reasons of one type directly intermingling with reasons of others types in a weighing process, but rather the point of view as a whole is directly weighed against another point of view as a whole. 

Remark [4] is clearly related to the other remarks, but within it there is also a vagueness which requires clarification. Bernard Williams explained part of the weighing model in this way (although he didn’t give this procedure an explicit name, he continually makes reference to a sort of ‘weighing’ throughout the book):

One can of course ask, on a given occasion, "what should I do from an ethical point of view?" or "what should I do from a self-interested point of view?" These ask for the results of subdeliberations, and invite one to review a particular type of consideration among those that bear on the question and to think what the considerations of that type, taken by themselves, support. .<<ref "22">> 

I bring Williams’ exact words up to help us make sense of an ambiguity in Korsgaard’s interpretation. She says, “Williams refers to these as questions of ‘subdeliberation,’” and “they could result in what Williams calls ‘subdeliberation,’” which leaves open the possibility that the sum of the questions results in but a single subdeliberation..<<ref "23">>  If that was the case, then there would be a single overarching subdeliberation and then a final deliberation. While this doesn’t immediately seem like it would be a worthy idea, perhaps there could a viable reason for setting the model up like this – just like subtotal and a total on some receipts. This doesn’t appear to be what Williams is saying. Intuitively, it makes more sense to say that each question results in its own subdeliberation, which I believe was Korsgaard’s intent; it wasn’t, however, explicitly stated.

So, given all these descriptors, what should an accurate model look like? We see there are some holes in Korsgaard’s example, and it doesn’t seem to nicely relate to other very important aspects of the weighing model she describes. We need to try to make sense of these details to construct an example model which makes more sense. I’m going to show a thought process involved in building a plausible example.

Admittedly, there is some level of uncertainty in how best to model. As a heads-up, my figures aren’t perfect, but I believe they’ll quickly demonstrate what I’m thinking. 

This model looks a lot closer to what Williams intended, and it makes sense of most of the descriptors which posed problems to Korsgaard’s example. Note that we now have subdeliberations of specific points of view which feed into a final deliberation from the ‘general point of view’. You can imagine that there are many more subdeliberations, I’ve only shown three for brevity’s sake.
Vitally, we need to recognize how the relationship between the subdeliberation tables and the master ‘general point of view’ table affects the outcome. In the case of Figure 2, the method of relation will result in the exact same outcome as Figure 1. Each side of each subdeliberation is summed and the results are transferred to the master table. What this amounts to is that the subdeliberations don’t really matter – having just one master table and no subdeliberations would have amounted to the same outcome. Surely this is not what is intended. Clearly, the relationship between the subdeliberations and the final deliberation won’t look like this.

As we’ll look at two more figures, let’s assume that all points are of equivalent value  because (from what I can see) any weighing model which would constructed otherwise can be shown to be convertible to an equivalence point system with no change in outcome. It is easier this way. Just to be clear, each method of relating the subdeliberation tables to the master table I’ll be showing is a unique function – there is no redundancy. The argument is that depending on how we clarify Korsgaard’s description, we arrive at weighing models of varying merit. Let’s see another.

Figure 3

I’ve kept subdeliberations the same. But, in the end, the weight of the conclusion of each subdeliberation remains the same – each gets a vote. Note that this produces a different outcome from our original method – by this account, you should do X. This model relies heavily upon Remark [3]. Subdeliberations favor one thing over another, and then all things, particularly the conclusion of each subdeliberation, are considered. Voting is a type of weighing, it strictly weighs the quantity of the conclusions of subdeliberations. We might argue that this isn’t enough; we may also need to weigh the quality of each conclusion of a subdeliberation against the others. So, let’s look at that:

Figure 4

In Figure 4 we see that the relationship between the subdeliberation tables and the master table generates a different outcome from Figures 1 and 2. The method of relation is transferring the weighted points of the ‘winning’ side of each subdeliberation to the master table. Interestingly, the qualitative weight of each conclusion is transferred for a final weighing. This makes sense to me because perhaps I only have one or two small reasons for doing X from one point of view; then it seems that the weight of that point of view is less significant than a point of view with four or five substantial reasons against doing X. If this is a problem, then we should weigh the conclusions of subdeliberations in a non-vote – which is why Figure 4 seems more plausible a model than Figure 3.

One of the weird aspects of the weighing model is figuring out what happens when both sides are equal. I’m sure a clause for the weighing model could be created to be a tiebreaker.

So, I’ve done a lot of work to show the depth of constructing a more plausible weighing model. But I’m afraid that even this isn’t satisfactory. I worry that Korsgaard’s description is still missing the point. Part of the problem is that the weighing model isn’t about “Should I do X?” but rather “What should I do?” or “How should I live?” These are substantially broader than she demonstrates with her prototype of the weighing model. If she constructed the model correctly, I think she’d need to show more explicitly how it makes sense of the last questions rather than the first. She built this weighing model to provide “yes/no” answers, similar to the categorical imperative as a testing model. But the weighing model isn’t looking for an answer as simple as a yes or a no. 

A proper weighing model will need to take into account all the possible alternatives of action available, and it will need to weigh between the various actions, using a subdeliberation/final deliberation model. There are various ways of doing this. You might, for example, imagine that there is a final vote or weight for each possible action, either a negative or positive weight (in degrees of course), which depend on whether or not your decision procedure for a particular “Should I do X?” determines whether you are for or against it, and to what degree. So, then it seems there an overarching deliberation and weighing procedure for the conclusions of the smaller “Should I do X?” and “Should I do Y?” and so on. Likely, the overall weighing model requires a detailed account of how it relates to the smaller single action deliberations and their weights.

As a side note, one possible weighing model which technically fits Williams’ model, but certainly isn’t his intent (basically, it would be cheating), would be to have the value of moral reasons to astronomically outweigh any other type of reasons (or perhaps non-moral reasons may have zero weight), to the point that moral reasons are the only sort of reasons which actually ever end up mattering in the weighing model. That would clearly be against the spirit of Williams’ original objection, but it is an example of a weighing model that determines what to do from essentially moral reasons alone (which I prefer).

Another worry I have is that it seems Korsgaard’s missing substantial principle and her robust maxims actually demonstrate her theory requires a hybrid, being both formal and substantive. But it seems that the weighing is also a hybrid. The weighing model is a formal principle; it is a way of deliberating. It is a function whose inputs are substantive arguments; but the model itself, the function of weighing inputs, seems very much like a formal principle to me. The contents which are input into the formal weighing model are substantive; they come preloaded with substantive values. But, arguably, maxims and the missing principle do something similar. Oddly, it seems as if her theory can be construed as a weighing model as well.

	Interestingly, in seems that we can also argue for a weighing procedure of the maxims which are universalized by the categorical imperative. In this case, the categorical imperative test is contained by a larger weighing model. The “Should I do X?” deliberations, with ‘yes or no’ answers (although, they might also require some mechanism for weighting), which are but one part of Bernard Williams’ weighing model, can actually be replaced by the categorical imperative (although, perhaps some additions will be necessary). But, if this is case, then perhaps some form of a weighing model might ultimately be the decision procedure at large.  

''[2][a]''

	Korsgaard investigates the nature of the Kantian hypothetical imperative. What does it mean to say “if you will an end, you must will the means to that end?”.<<ref "24">> In particular, Korsgaard is worried about the interpretation of the relationship between “taking the means to an end” and “determining yourself to cause the end” as being analytic.<<ref "25">>  But, why should she be worried about the notion that: someone fails to take the means to an end if and only if that person didn’t determine themselves to cause the end? She is interested in preventing Kant’s view from degenerating “into tautology” such that “your end would be whatever you in fact pursue.”.<<ref "26">>  If this occurs, it seems to Korsgaard that the hypothetical imperative loses its normativity – it is important to her that a person can fail to meet the requirements of the hypothetical imperative. But, further, breaking up the analytic interpretation of the hypothetical will help promote one of her majors theses. [Significant Feature #1] Significantly, Korsgaard prefers to interpret the hypothetical imperative as a “constitutive principle of willing,” whereby a “person who wills an end constitutes himself as the cause of that end.”.<<ref "27">>  

	Her view of rationality coincides with her interpretation of the hypothetical imperative. The vital feature of a rational mind is that it “acts not merely in accordance with laws, but in accordance with its own representation or conception of a law.”.<<ref "28">> This notion of rationality arguably has an element of free will attached to it. If we are merely acting in accordance with laws, then we aren’t really acting at all. We would be misrepresenting the state of affairs to claim that a rock which falls in accordance with the laws of physics was really acting in a meaningful sense – after all, it was the laws of physics causing the rock to fall. Likewise, a mind which is completely determined by laws, laws which aren’t the mind’s own conception as Korsgaard would have it, isn’t acting of its own accord. A rational mind must cause its own acts, and Korsgaard thinks it can only cause its own acts when it acts in “accordance with its own representation or conception of a law.” Korsgaard is claiming that when we generate our own maxims, we are generating our own conceptions of laws..<<ref "29">>  We act in accordance with our own conception of law. Thus, when we act upon our maxims, those acts really are ours; they are acts caused by our rational minds; we have determined ourselves; we have willed those acts. The self-determination of rationality demonstrates our responsibility and is a necessary condition to her the self-constitutive feature I highlighted above.

	Korsgaard gives an example of a rational mind using logic. She parallels the principle of modus ponens (P → Q, P ⊢ Q) as a normative principle which describes the mental process of drawing a conclusion to the hypothetical imperative as a normative principle which describes the mental process of willing an action..<<ref "30">>  It makes that she has chosen modus ponens. It is easy to see how all other rules of inference might rely upon it in a deductive system. Conjunction introduction (P, Q ⊢ P ∧ Q) in a deductive system is applied via modus ponens. If P is true, and if Q is true, then P ∧ Q is true. Since P is true, and Q is true, therefore P ∧ Q is true. Modus ponens is a well-chosen example of drawing any sort of logical conclusion. We walk away with the notion that the hypothetical imperative is “a constitutive principle for the will” in the way that modus ponens is a constitutive principle of drawing logical conclusions.<<ref "31">>

	She also tells us a psychological story (which she uses several times in the book) about how the hypothetical imperative unifies and constitutes the will. The story is basically that I, as an agent, can be in conflict over my desires and emotions, but I can choose not to conform to and ‘to be’ these desires and emotions. Only when I am overriding my desires and emotions, when I say “I am not you; my will is this,“ and when I “consciously pick up the reins, and make myself the cause of the end” can it be said that ‘I’ am willing an end rather than my desires and emotions.<<ref "32">> Without the capacity to employ the hypothetical imperative, it would be my desires and emotions which determine me; I would have not a will without the hypothetical imperative.<<ref "33">> Thus, to say that the hypothetical imperative is a constitutive principle for the will is to say that “I” willed something, in part because I’m employing the hypothetical imperative.

	Korsgaard explains that in some sense, “there is no hypothetical imperative” because the “hypothetical imperative is not really a separate principle at all; rather, it captures an aspect of the categorical imperative: the fact that the laws of our will must be practical laws.”<<ref "34">> In another sense, however, Korsgaard does artificially separate the hypothetical imperative from the categorical imperative, but at the same time the she maintain the normativity of hypothetical imperative, which means we can fail to satisfy it. [Significant Feature #2] A very significant feature arises: the possibility of instrumental irrationality.<<ref "35">> 

	An agent who is instrumentally irrational “does will the end, but cannot bring himself to take the means.”<<ref "36">> An agent who is instrumentally irrational does will an end and constitutes himself as the cause of that end, but Korsgaard believes he does it badly, because he cannot bring himself to take the means to that end. Korsgaard gives us an example:

<<<
For if someone shrinks from an agonizing medical procedure needed to save his life, it seems more plausible to say that he can’t face the means than that he doesn’t really will the end of continuing to live.<<ref "37">>
<<<

	In some sense, this man chooses not to take the means to this end, but at the same time he does will his end and he does determine himself to cause the end - he just does it badly. If this is the case, then Korsgaard might be successful in avoiding the tautological interpretation of the hypothetical imperative.<<ref "38">> I am not sure, however, if Korsgaard’s example strictly supports her own interpretation. I worry that Korsgaard needs to provide a stronger account of how degrees of agency and constitution are linked to failing to meet the normative requirements of the hypothetical imperative.

	I see two versions of this story. The above way appears to be Korsgaard’s interpretation. A person can be influenced (which isn’t necessarily being ‘determined’) by an irrational impulse. The man may know that he is going to die if he doesn’t have the medical procedure to save his life. The rational thing to do is to have the procedure if his end is to live. However, irrationally, while he really does want to live, he is inclined to deny the procedure because of an overwhelming fear of pain. So, he has an irrational incentive that overrides his reason, and causes him not to take the means to his chosen end.

	Another version of the story still supports the tautological interpretation of the hypothetical imperative. Perhaps the man really didn’t will to live at all, and that is why he didn’t have the agonizing medical procedure. He knew that willing the minimization of pain and suffering as an end was incompatible with willing to live as an end. What he really willed as his end was the minimization of pain and suffering to the exclusion of willing to live. And, he did take the means to that end. Obviously, Korsgaard doesn’t like this interpretation because it removes the normativity of the hypothetical imperative; but, it seems very plausible that we can make sense of the tautological interpretation, despite Korsgaard’s dislike of its inviolability. For now, I don’t see why we should deem her version of the story more plausible than this second version. 

	Korsgaard concludes 4.3 with the following:

To act is to constitute yourself as the cause of an end. The hypothetical imperative picks out the cause part of that formulation: by following the hypothetical imperative, you make yourself the cause. As we are about to see, the categorical imperative picks out another part of that formulation—that the cause is yourself. By following the categorical imperative, you make yourself the cause.<<ref "39">>

	Here, she wraps up what she means about how there isn’t a hypothetical imperative, in some sense. Clearly, in another sense, we can artificially extract it from the categorical imperative because of the “distinctive feature[s] of action” it captures.<<ref "40">> 

''[Criticism]''

	One of the worries I have with this reading is how it might contradict Korsgaard’s previous criticism of Dogmatic rationalists. She denies that moral propositions are objective features of the world, existing independent of our minds.<<ref "41">> This criticism is found in both “The Normativity of Instrumental Reason” and again in sections 1.1.4-1.1.5 and 4.2 of Self-Constitution. It seems that the very same criticism she makes against the Dogmatic rationalist can also be applied to her argument. If this is true, then she’ll either need to give up her criticism of the Dogmatic rationalist or she’ll need to deny the parts of her argument which are subject to the Dogmatic rationalist criticism (both of which have an enormous set of implications for her theory at large). Here is the passage from 4.3 in question:

<<<
Rationality is a power of self-determination. This is a general point, not just a point about practical reason. Consider again the case of logic. Perhaps you don’t arrive at all your beliefs through reasoning, but when you do, it’s an act of self-determination, in the sense that the activity of your own mind is part of what produces the belief in you. Suppose you believe two premises, and a certain conclusion follows. You won’t automatically believe that conclusion, because you might not notice the connection between them. But if you do notice the connection, and put the premises together in the way suggested by the connection, then you do something: you draw the conclusion. In drawing the conclusion—or, as we say, in making up your mind, in constituting your mind—you determine yourself to believe it. The principle of modus ponens describes what you do when you draw the conclusion, but it is also a normative principle. In the same way, the hypothetical imperative describes what you do when you will an action: you determine yourself to be a cause, the cause of some end. But it is also a normative principle. It is a constitutive principle for the will.<<ref "42">>
<<<

	Modus ponens is paralleled to the hypothetical imperative; the relationship between an agent’s rational psychology and the world is parallel for both sorts of principles. Problematically, this relationship, at least in the case of modus ponens, appears to be a form of representationalism which Korsgaard vehemently denies in her earlier criticism of the Dogmatic rationalist concerning moral propositions and principles.	

From the reading, we can see that the connection between two premises pre-exists any belief or awareness of its truth. That is to say, modus ponens as a rule of inference applies regardless of whether or not an agent exists or knows it to be the case. The story of rational psychology put forth is that the agent himself ‘draws the conclusion’, that modus ponens as a fact becomes introduced into the mind of the agent as a part of that agent’s willing to know the truth. Notice that what makes the internal representation of modus ponens coherent at all in the mind of the agent is its link to the objectivity of modus ponens as a rule inference in the world external to the agent. Modus ponens is not a valid rule of inference in virtue of the agent; instead, the belief of the agent is justified by its relationship to external reality; modus ponens is good rule of inference in virtue of reality. 
 
Assuming this parallel between the logic of modus ponens and the hypothetical imperative as a practical reason holds, Korsgaard’s original criticism of Dogmatic rationalism is untenable; she can’t deny that practical reasoning such as the hypothetical and categorical imperatives are objective features of the world, existing independent of our minds. The representation of the moral law in our minds is coherent and justified solely in virtue of its link to the actual, objective moral law which is external to us in the world.

Of course, Korsgaard might criticize the Dogmatic rationalist’s representationalist form of normative principles as lacking motivational force. But, she’s already said that modus ponens is a normative principle, and it is normative in virtue of being external to us – and yet we are motivated by it. The same line of reasoning should be offered for the hypothetical and categorical imperative. This view, however, has profound implications for what it means to be a self-determining and self-constituting agent in her theory.

''[b]''

Particularism eschews any kind of general rule-governed morality - reasons for acting are never based on generalities such as “don’t lie.” In a nutshell, Korsgaard answers particularism by claiming that incentives and desire can’t constitute you, but rather 'you' are over your desires. In, particularistic willing, incentives and desires dictate who you are, and thus you aren’t determining yourself. So, if we are to assume Korsgaard’s self-constitution theory, then particularistic willing isn’t willing at all.  Essentially, 'you' includes being under the operation of categorical imperative, a general rule, which is contrary to particularism. Let’s zoom in to see her argument, starting with Korsgaard’s initial concern with particularistic willing:

<<<
Particularistic willing would be a matter of willing a maxim for exactly this occasion without taking it to have any other implications of any kind for any other occasion.<<ref "43">><<<

Particularistic willing within the framework of maxims and the categorical imperative amounts to over-specified and seemingly non-universalized maxims which fit your exact particular circumstance. In the particularistic maxim, the antecedent of a maxim is specified to the point that you’ll never find yourself in that circumstance again by definition, e.g. to exaggerate the point, the time/date and your GPS coordinates could be a part of the antecedent of the maxim, such that generalizing, universalizing, or demonstrating similarities to other circumstances is impertinent or impossible and no longer the purpose of the categorical imperative as a test of universalizability. So, there is a sense in which particularistic maxims are ‘universalized’, but a maxim of this sort is so specific that it no longer possesses any general guiding powers outside of a truly unique circumstance. Hence, this is why one might say that particularistic maxims aren’t really universalized in a meaningful way. 

The categorical imperative becomes impotent in this paradigm. In a very theoretical sense, this formulation of the categorical imperative seems to provide an analytic, logically true notion of moral theory, much like how virtue and the virtuous agent are inter-defined. It comes at a cost, namely that these logically true statements of moral theory fail to provide substantial, concrete moral truths or a meaningful, practical decision procedure. While not completely explicated by Korsgaard, I believe this is part of what motivates her to deny particularistic willing.

Korsgaard gives an example of an agent with conflicting/incompatible desires, A and B. The agent has “some principle that favors A over B,” and so this agent exercises his principle and chooses A.<<ref "44">> In this case, we can see the agent regards “the principle of choice as expressive, or representative” of himself and his causality. Vitally, the principle within the agent is not some third force within him which helps A win the conflict over B; the agent’s mind is not a battleground on which he is a “mere spectator” whereby his principle is the real cause of his action. Rather, it is in the agent’s “identification with the principle of choice” on which he acts that enables us to say ‘he’ did something, not his principle. Essentially, self-determination requires self-identification with a principle on which you act.<<ref "45">> This example is parallel to the psychological story about how the hypothetical imperative unifies and constitutes the will that we saw in 4.3.

According to Korsgaard, “particularistic willing makes it impossible for you to distinguish yourself, your principle of choice, from the various incentives on which you act” because “in order to will particularistically, you must in each case wholly identify with the incentive of your action.”46 If she is correct, and a person cannot constitute himself by wholly identifying himself with his incentives, then the person who employs particularistic willing isn’t actually willing at all; thus, he is not really agent because he does not constitute himself as the cause of an end. 

This is clearly connected to her thesis in 4.3: the hypothetical imperative is a “constitutive principle of willing,” whereby a “person who wills an end constitutes himself as the cause of that end.”<<ref "47">> Particularistic willing is a determination of the self from some alien part within the person, not the person himself as a whole determining himself. Lacking self-determination prevents a person from truly willing an end and constituting himself as the cause of that end.

''[3][a]''

I am going to explain the structure of the argument in this chapter. In doing so, we’ll realize the defining qualities and the impact of Korsgaard’s conceptions of self-consciousness and reason, and then it will be obvious how the argument collapses without both of these notions. The argument in chapter 6 is expansive and very detailed; and so I’m going to explicate her argument section by section.

''6.1  Instinct, Emotion, Intelligence, and Reason''

''6.1.1''

	Korsgaard sets out to differentiate the sort of will, action, and psychology of non-rational from those of rational animals (humans). Korsgaard provides a generous account of the psychology of non-rational animals, but she wishes to show an even ‘deeper sense’ of human agency, will, action, and identity by pointing out what is ‘up to us’ and how we determine ourselves, unlike non-rational animals.<<ref "48">>

	There is a relationship between principles and incentives, namely “principles determine which incentives a creature is subject to as well as what she does about them.”<<ref "49">> Incentives seem to be the sort of thing which agents (both rational and non-rational) perceive, and the principles govern.  The principles are the laws of one’s causality. The will of non-rational animals stems from instincts because the principles of non-rational animals are instincts. Action can only be understood by how instinct determines the non-rational animal to move. Unlike non-rational animals, humans have a much stronger sense (perhaps ‘degree’) of agency in that we actually choose our principles. We are not determined by instinct. Our actions, our will, our laws of causality are ‘up to us’. 

	We will see that humans are similar to the non-rational animals, possessing primitive psychological capacities, even some elements of instinct, but we also find that humans have something more than do the non-rational animals.

''6.1.2-6.1.3''

	These sections are focused on the notion of instinct. Korsgaard believes the impact of instincts differ among non-rational and rational animals. Instincts “structure an animal’s consciousness, his conception of the world, in ways that will enable him to survive and reproduce.”<<ref "50">> Korsgaard claims that the perceptions of animals come pre-loaded with practical, teleological significance, not requiring contemplation.<<ref "51">>

<<<
	There are two senses in which “instinct” is used, the narrow and the broad. The narrow sense refers:
to an established connection between a representation (the incentive) and a certain primitively normative response, an automatic sense of the response as appropriate to or perhaps better called for by the representation.<<ref "52">>
<<<

	In considering instinctive action, Korsgaard wishes to narrow this range of connections to the sort which is less automated, “where there is room in consciousness to experience the response as called for or appropriate.”<<ref "53">>  While in non-rational animals, it seems that we can inevitably tell a deterministic story of how instinct automates behavior and psychology, the ‘knee-jerk’ reaction is not the interesting end of the spectrum which Korsgaard wishes to consider.

''6.1.4''

	This section is largely about Korgaard’s conception of emotion. She claims that emotions are “perceptions of reasons,” particularly “perceptions of practical reasons, reasons for action.”<<ref "54">> We should note that the way in which instincts operate in animals as a type of perception or emotion should be distinguished from how emotions operate, in a deeper and more complex sense, in the minds of humans.

	Importantly, emotions aren’t the sort of thing we can choose or decide to have. They are responses of agents, likely in a slightly automated sense, which we don’t possess from reason. Emotions are a weaker form of response of agency, however, than something like action, which requires reason.<<ref "55">>

	Korsgaard claims that “emotions can sometimes be judged morally good or bad, and this is in turn because an emotion is subject to standards of appropriateness and intelligibility.”<<ref "56">> This is interesting. At least some emotions aren’t ‘knee-jerk’ reactions, and that is part of what allows them to be subject to normativity. While Korsgaard isn’t clear on the matter here, I suggest that she must be maintaining that the sort of emotions in humans which can be judged as morally good or bad are not completely deterministic (hormonal, chemical, electrical impulses, etc.). If not, perhaps she is trying to relate these sorts of emotions to the type of normativity she believes belongs to the non-rational animals, but I am not convinced that works.

	Further, “to have an emotion is to stand in the presence of a normative fact.”<<ref "57">> This is related to a weak sense of normativity for animals, which is based on the teleology built into their perception.<<ref "58">>

''6.1.5-6.1.6''

	The broader meaning of instinct is explained in relation to intelligence. This broader meaning of instinct includes “learned responses”<<ref "59">> and is thus linked pretty strongly to intelligence. Intelligence is the “ability to learn from…experiences,” the ability to “extend [one’s] repertoire of practically significant representations…beyond those with which instinct (or the inventor) originally supplied,” and the “capacity to forge new connections, to increase your stock of automatically appropriate responses.”<<ref "60">> Both the non-rational animal and the human seem to possess, to some degree, some more than others, intelligence on this account.  

Crucially, we are told that both non-rational animals and humans naturally have a teleological perception of the world.<<ref "61">> Human perceptions can move beyond this natural, teleological perception of the world. Differences in the degrees of intelligence, however, do not distinguish the nature of human perception of the world from the non-rational animal in a significant way.  The scientific (non-teleological) view of the world is an abstraction unique to rational animals, but intelligence is not sufficient for the creation of this worldview. Reason is the necessary ingredient which allows humans to detach from the naturally teleologically-loaded perceptions of the world common to all intelligent animals.<<ref "62">>

Korsgaard says that reason is “the thing that makes us us.”<<ref "63">> This is somewhat a double-entendre. Clearly, reason has to be the thing which distinguishes non-rational animals from rational animals. But, further, Korsgaard’s use of the word ‘make’ is no accident – reason, as she uses the word, is central to how rational beings make their own selves, forms, and identities.

''6.1.7''

The capacity of ‘reason’ was very briefly introduced in the last section, and the capacity of ‘self-consciousness’ is strongly introduced in this one. Self-consciousness comes in different degrees and forms.<<ref "64">> Self-consciousness relates to different spaces: physical space, social space, and mental space. Self-consciousness is partly about locating the ‘self’ in a type of space, about relating and distinguishing the self from the things around it. Almost all animals are capable of the first, many the second; but it seems that only the very potent self-consciousness of agents like humans are capable of enabling an agent to locate himself in mental space.<<ref "65">>

	To locate oneself in mental space is “to locate yourself with respect to your own thoughts and emotions, and in particular to know them as your own.”<<ref "66">> ‘You’ are distinct from your thoughts and emotions. Here it becomes evident how Korsgaard wishes to employ her dual meaning of the “I.” Paradoxically, in one sense, the “I” is the whole organism, with all its thoughts, emotions, physical parts, etc., and in another sense, the “I” is the self-consciousness within the mental space that is distinct from, aware of, and contained by the surrounding capacities and parts of the rational organism. I am not sure how we are meant to make sense of this dual “I.” 

Korsgaard goes on to show the beginning of the philosophical work intended for self-consciousness:

<<<
We are aware, not only that we desire or fear certain things, but also that we are inclined to act in certain ways on the basis of these desires or fears. We are conscious of the potential grounds of our actions, the principles on which our actions are based, as potential grounds. And this, as I have argued elsewhere, sets us a problem that the other animals do not have.<<ref "67">>
<<<

 	Here is a necessary moral, rational agent-making property. Animals aren’t aware or conscious of their principles (instincts) in the way we are. Animals can’t separate themselves from their principles. And, by ‘potential’, she isn’t pointing out how humans are aware that our ‘potential grounds’ will be our grounds in the future, and that we can’t do anything about it (like seeing the potential of an oncoming train from afar). As we will see, the ‘grounds’ of action are contingent; our ‘potential grounds’ are only potential because we have free will to choose them. She continues:

<<<
For once we are aware that we are inclined to act in a certain way on the ground of a certain incentive, we find ourselves faced with a decision, namely, whether we should do that. We can say to ourselves: ‘‘I am inclined to do act-A for the sake of end-E. But should I?’’<<ref "68">>
<<<

	We get a glimpse of her terminology here. Incentives are the grounds (a type of reason) to act in certain ways. Inclinations are about having the proclivity to act in a certain way. One is aware, self-conscious, of one’s inclinations. It seems that awareness of inclinations is part of the crossroads for decision making, namely whether we will follow our inclination. We can contemplate and choose not to follow our inclination; we can refuse to act; we can refuse to use an incentive as a reason for acting in a certain way. Korsgaard explains that “self-consciousness is liberation from the control of instinct.”<<ref "69">> It seems that free will is located in our self-conscious awareness, and it is this sort of ‘control’ that differentiates us from animals. 

Humans, however, are not so different from animals in that we have escaped our instincts. To Korsgaard, it may even be the case that the source of all the grounds on which humans act is instinctual (which doesn’t seem to make us much different at all from the animals in this aspect).<<ref "70">> It is likely the case that Korsgaard takes the time to describe the similarities between the human species and other animals specifically because being an animal is part of our human identity. She’s pointing out the primitive roots from which we came, demonstrating the animal-like teleological traces still left in our human biological identity. Despite our similarity to non-rational animals, Korsgaard emphasizes what differentiates us:

<<<
But instincts no longer determine how we respond to those incentives, what we do in the face of them. They propose responses, but we may or may not act in the way they propose. Self-consciousness opens up a space between the incentive and the response, a space of what I call reflective distance. It is within the space of reflective distance that the question whether our incentives give us reasons arises. In order to answer that question, we need principles, which determine what we are to count as reasons. Our rational principles then replace our instincts—they will tell us what is an appropriate response to what, what makes what worth doing, what the situation calls for. And so it is in the space of reflective distance, in the internal world created by self-consciousness, that reason is born.<<ref "71">> 
<<<

	Here the major philosophical work of self-consciousness is established. The degree and the form of self-consciousness of humans, that which differentiates us from the non-rational animals, is the capacity to determine ourselves and not to be determined by our instincts.  In modeling the human mind, Korsgaard posits a space of “reflective distance” between our incentives and responses. Without this reflective distance and our sort of self-consciousness, human minds would be closed under determinism, leaving no room to contemplate, choose, and do otherwise.

	Self-consciousness is the locus of our free will and moral agency. The reflective distance, generated by self-consciousness, is the locus of the capacity to reason about how we will act. The principles within you, which if you so choose to, ‘replace your instinct’ providing an explanation of why you should accept one inclination rather than another. Self-consciousness of a certain degree and form, which humans possess, is a precondition to the reflective space which is, in turn, a precondition for reason. 

''6.1.8''

	So Korsgaard concludes that, “Reason, therefore, is not the same thing as intelligence.”<<ref "72">>  Arguably, reason is like intelligence in that it is concerned with contemplation, deduction, inference, etc. The difference between reason and intelligence lay in ‘where’ in the mind and ‘about what’ each capacity operates on. Intelligence can be found in many organisms (arguably even computers), largely dealing with the outward, teleologically perceived world.<<ref "73">>   Reason turns inward; and it is here that we can find the realm of normativity, in Korsgaard’s view.<<ref "74">>  In following Korsgaard’s story of the mind, intelligence is a precursor to reason, and both capacities are necessary for dealing with the normative realm and the world around us.

''6.2  The Parts of the Soul''

''6.2.1-6.2.2''

	Korsgaard covers a Kantian story of Eve, the first human to make a “free rational choice.”<<ref "75">>  In becoming self-conscious, Eve is aware of the incentives operating in her.<<ref "76">>  Both “new objects of desire” and “new kinds of objects of desire” are made available to Eve because of reason which is born in her self-consciousness.<<ref "77">> 

	Here we understand the title of the chapter - as Eve pioneers the journey of ‘being a human’, we find our species banished “from a world that is teleologically ordered by our instincts and presented as such by our incentives, a world in which we nearly always already know what to do.”<<ref "78">>  This expulsion from the garden is a shattering of our previous, albeit primitive, psychic unity that non-rational animals (which we once were, according to the story) possess. 

	Self-consciousness and reason were the catalysts of our psychic disunity; and yet, they are also the capacities which make us special; they are the capacities and arenas in which we can gain back our psychic unity, a new, human, moral, psychic unity. 

	As Korsgaard sees it, with the vast majority of our teleologically-loaded worldviews ruined, our fragmented identities, and our newly available wide-array of potential ends and actions, it is through a combination of intelligence and reason that we can “reconstruct a usable conception of the world” and construct “ethics to determine how to live our lives.” <<ref "79">>  Clearly, there is a potent method to the madness of her constructivist view of morality.

''6.2.3-6.2.5''

	We are introduced to an argument for the “parts of the soul” following Plato (and we’ll see this fleshed out in the next chapter). Non-rational animals, in some sense, don’t have “parts of a soul” because their “whole psychic system is closed and tightly knit.”<<ref "80">>  They are determined and unified, and in this way they aren’t broken into parts. Humans, however, can be said to have “parts of the soul” in this respect directly because of the psychic disunity originating from our self-consciousness and reason.<<ref "81">> Korsgaard explains the relationship of incentive to self-consciousness and reason in a compact form:

<<<
Self-consciousness is the source of reason. When we become conscious of the workings of an incentive within us, the incentive is experienced not as a force or a necessity but as a proposal, something we need to make a decision about. Cut loose from the control of instinct, we must formulate principles that will tell us how to deal with the incentives we experience. And the experience of decision or choice, the work of these principles, is a separate experience from that of the workings of the incentive itself.<<ref "82">>
<<<

	Within these experiences, we see there is a sort of work to be done: a work of making these experiences and parts work together and a work of unifying ourselves.

	Korsgaard goes on to point out a difference between mere reaction and action. Knee-jerk reactions don’t involve self-consciousness and reason. The sorts of reactions which we can contemplate and control count towards action.<<ref "83">>

	Self-consciousness not only necessitates principles of reason, but it also “transforms incentives into what Kant calls inclinations.”<<ref "84">> There is link between the deterministic, instinctual aspects of our mind, which are outside self-consciousness, and our reason, our principles, and our free will, which are inside self-consciousness.

	In transforming incentives, self-consciousness produces inclinations.<<ref "85">> Korsgaard explains that self-consciousness makes “our inclinations into mental items.” Awareness of incentives enables us to reify them into inclinations. This product, this inclination, is an object with which reason and the will can work.<<ref "86">> So, we can see that “self-consciousness is the source of inclinations as well as of reason. Self-consciousness produces the parts of the soul.”<<ref "87">>

''6.3  Inside or Outside?''

	In response to a moral realist account of value and the properties of objects, Korsgaard explains:

<<<
At the basis of every desire or inclination, no matter how articulately we can defend it, is a basic suitableness-to-us that is a matter of nature and not of reason. Value is relational and what it is related to is our nature.<<ref "88">>
<<<

The realist says that your incentive is based upon the objective properties of an object; in some sense, value is one of the properties of the object. Anti-realism disagrees with this claim. Korsgaard thinks neither the realist nor the anti-realist have the right picture. She thinks that properties of objects are not irrelevant, but rather only relevant as related to the human condition. Again, it seems that a modest teleology is vital to her constructivist views. She continues:

<<<
It is our own choices that ultimately confer value on objects, even though our choices are responsive to certain features of those objects. In choosing objects, in conferring value on things that answer to our nature in welcome ways, an agent is affirming her own value.<<ref "89">>
<<<

So, this ‘suitableness-to-us’ is connected to what is 'up to us'. Self-consciousness and reason are necessary capacities for making the sorts of choices which confer value on objects. Our self-consciousness provides the necessary distance from incentives for it to be “normatively undecided” as a mere inclination, giving us space to reason and choose what is normatively valuable.<<ref "90">> Without these capacities, values of objects and even the affirmation of one’s value (an important notion to Korsgaard) would not be possible. 

Deliberation and action are complicated notions given this mental framework. Part of what accounts for action of humans is internal to self-consciousness and reason. This section concludes that “there is never any gap between decision and action. The conclusion of a practical syllogism is an action.”<<ref "91">> This nicely explains the close-knit relationship between action and agency.

''Pull Yourself Together''

	Here, Korsgaard combines the work she’s been doing for the past sections; this section is the conclusion of the chapter. She begins it by saying:

<<<
Self-consciousness opens up a space between the experience of the incentive and what previously had been the instinctive response, and that space transforms incentives into inclinations and governing instincts into free reason. Self-consciousness is therefore the source of a psychic complexity not experienced by the other animals, and it transforms psychic unity from a natural state into something that has to be achieved, into a task and an activity. Once we are self-conscious the soul has parts, and then before we can act it must be unified. At the very same time, and for the same reason, practical deliberation becomes necessary, for free reason need not follow inclination. We must now decide what to do.<<ref "92">>
<<<

This nicely demonstrates how self-consciousness and reason are the pillars of the argument presented in this chapter. Moreover, we can see how vital this picture of mental capacities is for Korsgaard’s theory at large. Deliberation about how you will act and who you are is for the sake of unity; and this is the resulting task assigned to those who have achieved and are plagued by (as in the way it generates our plight) self-consciousness and reason.<<ref "93">> Action and identity are combined in this way, and self-consciousness and reason are the mechanisms by which incentives/inclinations are generated, judged, acted upon and part of constituting an identity.<<ref "94">> And so, given our expulsion from the non-rational kingdom and our entrance into the rational kingdom:

<<<
The work of practical deliberation is reunification, reconstitution: and the function of the principles that govern deliberation—the principles of practical reason—is the unification of the self. So we arrive again at the conclusion of Chapter 4—the function of practical reason is to unify us into agents who can be the authors of our actions.<<ref "95">>
<<<

<<<
For nature sets each human being a task: self-consciousness divides his soul into parts, and he must reconstitute his agency, pull himself back together, in order to act. And that need to reconstitute yourself introduces the necessity of exercising your freedom, and the opportunity of doing so creatively. In other words, every person must make himself into a particular person. So someone who says, ‘‘I want to make something of myself’’ is just describing the human condition. And it is because he makes himself into the particular person who he is that we hold him responsible for being who he is (1.4.3).<<ref "96">>
<<<

This work of practical deliberation, of reunification and reconstitution, of pulling one’s parts of the soul together, of choosing one’s (Aristotelian) form, all rest upon the pillars of our self-consciousness and reason. Without these things, we would be unified non-rational animals, still living in the garden, bound by our instinct, lacking free will, lacking depth and moral agency. Our plight to act, our particular sort of agency which is infused with commitments and endorsements, and our task of self-constitution are only coherent with an account of self-consciousness and reason.

''[b]''

With this organic story of our rational heritage, we can see the nature of unity and good action when Korsgaard lets us take a ‘look under the hood’ of human moral psychology. We see her picture of how incentives, inclinations, and our principles relate to our identity, self-consciousness, rationality, and our action. This is part of her providing a satisfactory account of good action. Unfortunately, I don’t see how she will be able to give a satisfactory account of evil action. That problem really clicks in this chapter.

How does someone perform evil action in this schema? What prevents a human from choosing evil principles? Why can’t an evil person be unified in their evil? It seems that my incentives and inclinations might themselves be injected with desires and inclinations to what most people call evil acts. It seems like the psychological story which Korsgaard tells about unifying our identities in good action and deliberation is the exact same psychological story which we would tell about unifying our identities in evil action and deliberation. 

Herein lies the problem - if there is evil unification, then exactly how does it count as being evil at all? According to Korsgaard’s theory, if a person is fully unified, then they, by definition, aren’t evil, but rather good. Evil seems good in this light. If there isn’t evil unification, and agency is defined in terms of unification, then who is the agent responsible for the evil? There doesn’t seem to be an agent on whom we can pin the evil action. 

On one hand, I’m willing to accept there is evil unification and that there are evil principles we can choose. Perhaps not everyone can be a murderer and be ‘unified’, but it seems there are humans who truly aren’t disunified in being a murderer. Their whole organism might really be unified while containing that murdering identity. If this is the case, following Korsgaard’s theory, it seems as though, for those humans, it is perfectly acceptable, it is morally good that they murder. 

On the other hand, if being unified is ‘by definition’ good, and we grant Korsgaard an unspoken assumption that acts like rape and murder can never be committed by a unified agent (and it isn’t clear why we must assume that at all), and true agents are only those organisms which are unified, then I don’t see how a rapist or murderer is an agent at all. According to this line of reasoning, why then do we even hold evil-doers accountable? Even if we apply the notion of degrees of agency, at best, it still seems like the rapist is only very minimally responsible. Psychic disunity seems to extend an umbrella-like plea of insanity to these evil-doing organisms in all cases of evil, even to those whom we want to say committed ‘cold-blooded, pre-meditated murder’.

The story of Eve is ironic for this discussion. Traditionally, as the story goes, Eve’s action is an evil action – the first evil human action! It initially would have made sense if Korsgaard had said that Eve achieved self-consciousness and reason, was disunified, but then went on to re-interpret the traditional story to demonstrate that Eve actually didn’t commit the first action because she was disunified and was doing evil. It was no action; Eve was disunified. In fact, a case could easily be made for the notion that Eve was at the height of disunity, having just transformed into a new being, completely new to the world of the self-conscious and rational. Korsgaard’s psychology can show how Eve was evil, but Korsgaard can’t then say that Eve was a full-blown agent that performed true action. But, of course, then it seems like we can’t hold Eve accountable as an agent.

The account Korsgaard gives us doesn’t seem evil at all. The story of Eve exemplifies an organism’s transition from non-rational to rational, it demonstrates the first disunity of humanity, but at the same time, Korsgaard claims this exemplifies the first free action. But, only good actions can be performed by agents. It seems then that Eve’s traditional evil action is actually a good one.
Either Eve was evil and disunified but didn’t perform action, or Eve wasn’t evil and rather she was unified, but didn’t perform evil action. Obviously, if Korsgaard re-interprets the story entirely, removing this traditional element evil of the first evil human action, her account can make more sense of this particular interpretation of the story. The point, however, is that Korsgaard can’t (at least so far) give an account of evil action, and the traditional story of Eve is a perfect example of why she cannot.

Part of the problem is that I’m unwilling to grant degrees of agency. Agency is modular – it is binary; you either are or you aren’t a moral agent in a given circumstance. At best, I will grant degrees of responsibility given an agent’s incentives and inclinations. It seems like a biologically compulsive liar is in some sense less responsible for lying than a regular agent. But, both are 100% agents, and if they switched circumstances, then they’d be switching degrees of responsibility of lying in this case. But, all else being equal, both agents remain equally responsible in all other circumstances. 

---------------------------
<<footnotes "1" " Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity //(Oxford: Oxford University Press, 2009), 49">>
<<footnotes "2" "Ibid., 51-52">>
<<footnotes "3" "Ibid., 49">>
<<footnotes "4" "Ibid.">>
<<footnotes "5" "Ibid., 50">>
<<footnotes "6" "Ibid.">>
<<footnotes "7" "Ibid.">>
<<footnotes "8" "Ibid., 51">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "Ibid.">>
<<footnotes "11" "Ibid.">>
<<footnotes "12" "Ibid., 45">>
<<footnotes "13" "Ibid.">>
<<footnotes "14" "Ibid.">>
<<footnotes "15" "Ibid., 52">>
<<footnotes "16" "Ibid., 50">>
<<footnotes "17" "Ibid.">>
<<footnotes "18" "Ibid.">>
<<footnotes "19" "Ibid., 51">>
<<footnotes "20" "Ibid., 50">>
<<footnotes "21" "Ibid.">>
<<footnotes "22" "Bernard Williams, //Ethics and the Limits of Philosophy.// (Hammersmith, London: Fontana Press, 1985), 6">>
<<footnotes "23" "Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity //(Oxford: Oxford University Press, 2009), 50">>
<<footnotes "24" "Ibid., 68">>
<<footnotes "25" "Ibid.">>
<<footnotes "26" "Ibid.">>
<<footnotes "27" "Ibid.">>
<<footnotes "28" "Ibid.">>
<<footnotes "29" "Ibid., 69">>
<<footnotes "30" "Ibid.">>
<<footnotes "31" "Ibid.">>
<<footnotes "32" "Ibid.">>
<<footnotes "33" "Ibid., 70">>
<<footnotes "34" "Ibid.">>
<<footnotes "35" "Ibid., 70-71">>
<<footnotes "36" "Ibid., 71">>
<<footnotes "37" "Ibid.">>
<<footnotes "38" "Ibid.">>
<<footnotes "39" "Ibid., 72">>
<<footnotes "40" "Ibid.">>
<<footnotes "41" "Christine Korsgaard. “The Normativity of Instrumental Reason” in //The Constitution of Agency: Essays on Practical Reason and Moral Psychology// (Oxford: Oxford University Press, 2008)">>
<<footnotes "42" "Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity// (Oxford: Oxford University Press, 2009), 69">>
<<footnotes "43" "Ibid., 75">>
<<footnotes "44" "Ibid.">>
<<footnotes "45" "Ibid.">>
<<footnotes "46" "Ibid.">>
<<footnotes "47" "Ibid., 68">>
<<footnotes "48" "Ibid., 110">>
<<footnotes "49" "Ibid.">>
<<footnotes "50" "Ibid., 110">>
<<footnotes "51" "Ibid., 110-111">>
<<footnotes "52" "Ibid., 111">>
<<footnotes "53" "Ibid.">>
<<footnotes "54" "Ibid., 112">>
<<footnotes "55" "Ibid.">>
<<footnotes "56" "Ibid.">>
<<footnotes "57" "Ibid.">>
<<footnotes "58" "Ibid., 113">>
<<footnotes "59" "Ibid.">>
<<footnotes "60" "Ibid.">>
<<footnotes "61" "Ibid., 114">>
<<footnotes "62" "Ibid.">>
<<footnotes "63" "Ibid.">>
<<footnotes "64" "Ibid., 115">>
<<footnotes "65" "Ibid.">>
<<footnotes "66" "Ibid.">>
<<footnotes "67" "Ibid.">>
<<footnotes "68" "Ibid.">>
<<footnotes "69" "Ibid., 116">>
<<footnotes "70" "Ibid.">>
<<footnotes "71" "Ibid.">>
<<footnotes "72" "Ibid.">>
<<footnotes "73" "Ibid.">>
<<footnotes "74" "Ibid.">>
<<footnotes "75" "Ibid., 117">>
<<footnotes "76" "Ibid.">>
<<footnotes "77" "Ibid., 118">>
<<footnotes "78" "Ibid.">>
<<footnotes "79" "Ibid., 119">>
<<footnotes "80" "Ibid.">>
<<footnotes "81" "Ibid.">>
<<footnotes "82" "Ibid.">>
<<footnotes "83" "Ibid., 120">>
<<footnotes "84" "Ibid.">>
<<footnotes "85" "Ibid., 120-121">>
<<footnotes "86" "Ibid., 121">>
<<footnotes "87" "Ibid.">>
<<footnotes "88" "Ibid., 122">>
<<footnotes "89" "Ibid., 123">>
<<footnotes "90" "Ibid.">>
<<footnotes "91" "Ibid., 125">>
<<footnotes "92" "Ibid.">>
<<footnotes "93" "Ibid., 125-126">>
<<footnotes "94" "Ibid., 126">>
<<footnotes "95" "Ibid.">>
<<footnotes "96" "Ibid., 130">>
John Rawls, in //A Theory of Justice//, offers a powerful social contractarian heuristic device for determining the principles of justice. In this paper, I attempt to defend the Rawlsian view of distributive justice by offering a stronger conceptual link between utility-maximizing agents in this device and the ‘difference principle’ it yields. The difference principle is supposedly chosen because of our innate risk aversion, but the literature on this topic remains unclear on how or why utility-maximizing agents would be interested in the distribution of primary social goods yielded by the difference principle. I will offer a justification for this risk aversion, filling in an untold gap in this story, whereby we can connect utility-maximization to the difference principle by examining the relationship between primary social goods and the economic principle of diminishing marginal utility.

The “basic structure” of society, as described by Rawls, is constituted by formal, legal, political and economic institutions. How best to configure the basic structure is a central to justice, in Rawls’ view, because it fixes the distribution of goods, services, opportunities, authorities, and rights. The basic structure is the initial subject of justice. It is here (either for the creation of a basic structure or as an assessment of one) that one can begin to question and formulate the principles of justice which normatively define the various possible configurations of the basic structure. Principles of justice design, specify, assess and justify the blueprints, arrangement and practices of these institutions and the overall basic structure. Rawls is famous for this device which formulates the principles of justice, a device he calls the “original position.” 

The original position is a type of thought experiment, an abstraction, a hypothetical instance of drawing up a social contract among members of society, and a method of thinking about justice. The parties within the original position are meant to agree upon whatever counts as the fair and correct principles of justice used to generate the basic structure to which they would find themselves subject outside of the original position. The original position structures intuitions we have about justice and how we formulate them – the original position is designed to provide an impartial justice, and render a stable society. Notably, the concern for impartiality and fairness is what leads us to the most profound and potent fixture in the original position, what Rawls calls the “veil of ignorance.”

Agents in the original position find themselves ‘behind’ a veil of ignorance. While behind this veil, “no one knows his place in society, his class position or social status, nor does anyone know his fortune in the distribution of natural assets and abilities, his intelligence, strength and the like. I shall even assume that the parties do not know their conceptions of the good or their special psychological propensities.”<<ref "1">> Agents are deprived of the knowledge of their personal particularities, what societies they come from, and their histories. Some of the attributes which count as morally arbitrary in Rawls’ eyes might be considered controversial (e.g. your religious beliefs), but let us pass this by. The essential point, to which I think we can all intuitively agree, is that differences which are arbitrary from the moral point of view don’t count with regards as to how the principles of justice treat you. 

Agents behind the veil must be detached from their actual, particular circumstances when formulating the principles of justice. Proper justice requires we answer a hypothetical question: If you couldn't know who you were, what would you choose? This makes a lot of sense - it removes bias. Thus, the principles of justice which are produced from within the original position and behind the veil of ignorance are in some sense impartial and unbiased. 

What then constitutes these agents, these amorphous creatures which have shed morally arbitrary features? Rawls believes these agents have a sense of justice, being willing to comply with what is required by justice. They are also free and equal agents. Vitally, agents behind the veil are rational, mutually disinterested utility-maximizers.<<ref "2">> These characteristics provide the motivation and mindset of agents formulating the principles of justice. They have the necessary tools and knowledge to formulate the correct principles of justice, to know what is normatively just and fair about different configurations of basic structures given their rational, mutually disinterested, utility-maximizing characters. While ignorant of particularities, agents are extremely knowledgeable about generalities. They have a commanding knowledge of general facts about human nature, psychology, sociology, political science, biology, and economics. Thus, with this knowledge, from behind the veil of ignorance, agents are able to rationally construct and agree to the principles of justice, even agreeing with principles which might not benefit them as the individuals they are outside of the original position.

Rawls is very thorough, and despite the hypothetical nature of the original position, he is also practical. He invents an apt regression test procedure used to make sure we actually agreed to the correct principles of justice. He calls this the “reflective equilibrium.” Employing the reflective equilibrium allows agents to go back and forth between the original position and reality. This method allows us to continually justify and revise (if necessary) the principles of justice. 

Interestingly, it just so happens that Rawls thinks he knows exactly which principles of justice would be chosen from within the original position. They essentially are:

# The Principle of Greatest Equal Liberty -- People are to be as free as possible.

# The Difference Principle -- Social and economic advantages should be distributed in order to maximize the shares of the most disadvantaged, those on the bottom line. Maximize the minimum.<<ref "3">>

First off, these principles are lexically ordered in priority. The first principle is the most important one, and the second merits consideration after maximally satisfying the first. Intuitively, it seems that there might be many possible basic structures which equally maximize the first principle, and the second principle does the work of assigning further normative value, effectively acting as a tie-breaker to the subset of initially acceptable basic structures generated by the first.

The first principle of justice is concerned with maximizing basic rights and liberties for all citizens, including political liberties, freedom of speech, freedom of association, religious liberty, etc. The second principle is about maximizing the wealth, material goods, and services for the lowest margins of society. For many liberal intuitions, the first principle is the least controversial. The principle of greatest equal liberty seems a very plausible product of rational utility-maximizers in the original position, particularly given classic utilitarian views on liberty. There seems to be an acceptable and ostensible story which we can tell, about how rational, mutually disinterested utility-maximizing agents in the original position, as defined by Rawls, would create and agree upon the first principle. The second principle is a particular brand of distributive justice theory, including why we should believe (as Rawls believes) that utility-maximizing agents in the original position would choose this particular principle of distributive justice. This, perhaps, is more controversial. Rational utility-maximization isn’t so clearly linked to the difference principle. Part of this story seems to be missing. In order to see why, let’s dig a bit deeper into the ramifications of the difference principle, going through an example of it as a decision procedure. 

What follows is an oversimplified example, but it will nicely demonstrate how the difference principle is generated and applied. 
Consider the following monetary table and the explanation of it which follows:

Figure 1

The table represents a hypothetical choice. Agents in the original position need to make an algorithmic, procedurally-based choice between the three possible, yet different distributions of wealth. Let us assume that each option equally satisfies the principle of greatest equal liberty; it is then up to the difference principle to decide which type of distributive structure is normatively best. A more complex table could certainly make sense of other types of units which belong to distributive justice, but let’s assume we’ve converted all such objects into monetary value. There is only one type of unit to be distributed, in this case money; let’s arbitrarily say thousands of Euros annually per person. Quartiles represent a fourth of the population, and people in each quartile make the specific annual salary determined by the respective distributive economy. Note that the totals are different, which is to be expected, as different economic structures have different sum total outcomes.

What would the agents in the original position choose? Everyone is behind the veil of ignorance; they don’t know which option will bring greatest benefit to them individually, outside of the veil. Agents behind the veil are in a game of limited information. They need a strategic formula to determine which distribution is best, particularly because they lack the knowledge of which particular quartile they will find themselves in, when outside the original position.

According to Rawls, the difference principle is the formula they would choose to apply, as it alone offers us the correct decision procedure and just distributive outcome. What does it actually do in this case? Well, maximizing the minimum requires we examine the 1st Quartile to the exclusion of everything else on the table. According to the difference principle, in this hypothetical choice, whichever distribution has the highest annual salary in the 1st Quartile determines what counts as the most just basic structure. In this case, the socialized market is what the difference principle requires us to select.

It isn’t clear, however, why we should believe Rawls’ assumption that agents behind the veil of ignorance would choose the difference principle; and furthermore, it isn’t clear why they prefer the distribution of the Socialized Market in the choice represented in Figure 1. Why should we think that a rational, mutually disinterested utility-maximizing agent with generalized knowledge would make these conclusions? There is an untold gap in the story, and it becomes clear with examples. One would like to think that Rawls isn’t begging the question; surely there are good and plausible bridges over this gap. Consider an exaggerated modification of the table:

Figure 2

	By the difference principle, the socialized market is still chosen in the question presented in Figure 2. But, now, the difference principle as a strategy seems much weaker. The economist/gambler in all of us sees the opportunity cost in selecting the socialized market, and here the difference principle doesn’t seem so reasonable. The odds are really good that you’ll be very, very rich in the feudal economy in Figure 2. Obviously, this is very hypothetical; proponents of the difference principle might argue that the feudal economy is Figure 2 isn’t a real possibility at all (a fair argument, in my view). Yet it also seems very possible to scale down the exaggeration and have plausible counterexamples, which might lead rational utility-maximizers away from the difference principle. 

Figure 2 forces us to entertain the possibility that agents in the original position wouldn't choose the difference principle. From behind the veil, not knowing to which quartile one actually belongs, it is reasonable to think that agents might employ the primitive game theory strategy of selecting the structure which provides the highest mean average salary (or look at the structure which brings about the highest sum total of salaries). Clearly, this strategy would promote the feudal economy rather than the socialized market in Figure 2. 

“But wait!” exclaims the proponent of the difference principle. Surely, we can see that you have a 25% chance to be completely impoverished in the feudal economy. The fear of ending up on the bottom carries a great deal weight, especially if the bottom quartile ends up with practically nothing, as in the case of the above feudal economy. Some proponents of Rawls' difference principle contend the bridge is based upon risk aversion, which is what enables us to rationally deny the feudal economy, greatly increasing the merits of both the socialized economy and the difference principle which selects it. 

According to this risk aversion theory, some degree of risk aversion is a characteristic derived from being a rational utility-maximizer, and thus a fundamental reason underlying the difference principle is risk aversion. It does seem that the larger the stakes, the more risk averse we become, and this choice is for all the distributive marbles, so I can strongly sympathize with the risk aversion theory. What might be the proper account of this risk aversion theory isn't clear. Is it only being risk averse to complete catastrophe, as we saw in Figure 2? And, if so, does this really support the difference principle? Imagine a modification of Figure 2:

Figure 3

Complete catastrophe is certainly avoided in both. Notice, the margin of difference between the lowest quartiles is relatively small, 500 Euros a year, but the rest of the economy is strikingly different. It seems that we can go back to the gambler strategy, which is certainly a strategy about weighing risks! If you were at the bottom quartile in the socialized market wouldn’t you spend 500 Euros per year for a 75% chance to make between 200 thousand to 1 million Euros each year instead? This is the sort of hypothetical question which suggests that the risk aversion theory might need more work if it is eventually going to point towards the difference principle. Even if this hypothetical is too exaggerated, surely we can conceive of less extreme examples which have similar worries attached. 

	What sort of risk aversion theory plausibly supports the difference principle? Part of the problem is that our discussion isn’t in the right language. For any proper theory acting as a bridge between rational utility-maximizers and whatever end principle of distributive justice is chosen, the story must be told in language of utility. Nothing we’ve seen so far really does that explicitly. As we zoom in on this utility story, we’ll see that a risk aversion theory, explained in the language of utility, very plausibly supports the difference principle.

	One does not weigh the objects of distributive justice outright; one must weigh units of utility. There is a conversion process which must occur in order for utility-maximizers to begin to normatively evaluate objects of distributive justice. Objects of distributive justice are converted into units of utility. But, since risk aversion deals with the objects of distributive justice, and it can’t weigh units of utility, clearly what counts as risk aversion must be broken down into utility values. The risk aversion theorist is claiming that the utilitarian conversion algorithm has built into it the principle of risk aversion as one of its sub-formulas. And, if this is true, then essentially utility values already have built into them the merits of risk of aversion. 

Weighing the average of some unit (however complex the formula to generate these units) has to be the only rational measurement. In this sense, the primitive strategy from the discussion of figure 2 was approaching something really important. Rational decision procedures in game theory are dominated by the notion that one must choose whichever option has the highest average utility. The primitive strategy, however, wasn’t selecting the highest average utility; it was selecting the highest average salary, its selection was based on monetary units, not utility units. These are very, very different, and that is why the risk aversion theorist may claim that the primitive strategy might fail. It is then up to the risk aversion theorist to provide an argument about utility which supports his or her own claim. 

One of the more famous economic theories, namely, the theory of diminishing marginal utility, does just this work for the risk aversion theorist.<<ref "4">> There are diminishing utility returns for each subsequent unit of any object of distributive justice, including money. The first 10k Euros will yield more utility than then next 10k Euros. This makes practical sense as well. Surely, on average, the resources necessary to survive will produce more utility for an agent than the same amount of resources added to the salary of someone who already has enough to survive. While the theory of diminishing marginal utility is not water-tight, perfectly proven, it is at least widely recognized as a plausible economic theory, something which agents in the original position very likely might hold. 

Consider the following table:

Figure 4

This example income-to-utility conversion table demonstrates marginal utility. Levels of income are converted to their respective levels of utility. While there is a massive store of literature arguing about these values and determining which empirical study is correct is beyond both the scope of this paper and my expertise, there isn’t a consensus about the exact formula which maps financial income to utility. I’ve given a very simple example just to demonstrate what diminishing marginal utility looks like. I’m providing a theoretical point - I’m not sure what the end-game empirical tables really look like (and, honestly, I doubt anyone actually has yet). I believe the above table is not representative of reality; I think the values for diminishing marginal utility are likely far more extreme and radical. The difference between surviving and not surviving (the first couple thousand Euros) seems to have a much higher utility value than the small difference in utility gained from more luxuries. If this is true, then the table should be skewed to benefit to lowest levels of income more radically than is presented.

Essentially, this notion of diminishing marginal utility is the major portion of the bridge we’ve needed – such tables are absolutely necessary in order to connect rational utility-maximizing as a method of thinking to both the end distributive principle of justice and the basic structures selected. The weight of risk aversion in our decision procedure, at least in part, is captured by diminishing marginal utility. Worries aren’t just about catastrophic outcomes; we’re actually worried about the bottom line because it has the highest marginal utility gain. In light of Figure 4, here is what happens when we convert monetary values in Figure 1 into their corresponding utility values:

Figure 5

	In weighing the averages or totals of the corresponding utility values, values which are transformatively curved by diminishing marginal utility, it is easy to see why rational utility-maximizing agents in the original position prefer the socialized market from Figure 1. Moreover, it seems that the risk aversion theorist has a very potent argument to defend the difference principle (which is what was needed in the first place). The primitive argument from Figure 2 is correct about rational decisions being determined by averages, but the argument is wrong to assume a one-to-one correspondence of monetary to utility values. Here we see that diminishing marginal utility, which is a form of risk aversion at the low end of the utility spectrum, bridges the gap between the agents as utility-maximizers and the difference principle as a substantive distributive justice schema. 

	But, isn’t this what we set out to do? This is the story we need to hear which defends the difference principle. In recognizing that objects of distributive justice must be converted into utility values for these agents to rationally make utility-maximizing choices, in conjunction with a diminishing margin utility, the notion of risk aversion emerges to support the difference principle.


--------------------------------

<<footnotes "1" "Rawls, John. //A Theory of Justice//. (Cambridge, Mass: Belknap Press of Harvard University Press, 1999.), 11">>
<<footnotes "2" "Ibid., 12">>
<<footnotes "3" "Song, Edward. “Global Justice.” Class lectures, Louisiana State University, Spring 2011.">>
<<footnotes "4" "Marginal Utility theory is found in many political and economic sources, including Aristotle’s Politics (Book 7, Ch. 1). It isn’t even a modern notion. So, I’m unsure who merits attribution of the overall, generic theory (of which there are many fine-tuned versions). ">>
''[1]''
In the Constitutional Model, from Plato, we get the analogy between the city and the soul. The claim of the analogy is that both are structured in a similar manner, particularly with respect to what it means to be a just or a good city and to be a good or well-formed person. In the city, going from the top to the bottom of the hierarchy, there is a guardian (philosopher king), next, are the auxiliaries who enforce the rule of the philosopher king, and finally, the craftsmen and workers. The guardians identify themselves with the city as a whole. They unify the city. The guardians identify their good with the good of the city as a whole. These tiered, functional classes of the city are supposed to correspond to functions and parts of the soul. Corresponding to the workers are the appetites, auxiliaries to the 'high spirited' part of the soul, and guardians to reason. 

The Constitutional Model is a powerful device in Korsgaard’s theory because if there was no constitution of the city, then it would be a mere heap. For the heap of people living in close proximity to be a city at all, they would have to be constituted or organized as a whole. Likewise, Korsgaard wants to make the same case for the soul. A similar hierarchy of psychological functions is said to take place.

The appetites make a proposal, and then reason must intervene to know what is and isn't acceptable. Once reason makes its decisions, then the spirit, which is always allied with reason (and never with appetites), executes and carries out what reason has decided. When you act, your action then is not just from the appetites or high spirit or reason, not from any of them alone, but rather from 'the whole person', from all three of these things working in concert. Thus, Korsgaard believes that the Constitutional Model analogously fits both the city and the soul.

Reason, for Korsgaard, isn’t just any type of rational capacity; it is explicitly the categorical imperative. We all seem to have innately the categorical imperative within us. Reason is not only within us, but it is also the principle by which we constitute ourselves. Odd questions arise from this initial view:

How can self-consciousness count as the "whole"? The whole doesn't seem capable of being self-conscious. What is the identity of the agent which is over and above the parts? What is the essence of the agent that allows her to say that agents can identify themselves with constitution? I don’t know how she can viably answer these questions, but they need explanations. Korsgaard believes she has synthesized (or even more boldly claiming she’s discovered a pre-existing analogy between) Kantian and Platonic views with her conception of the Constitutional Model. She says:

<<<
So if Kant does use the Constitutional Model for the soul, and the analogy holds, he is committed to rejecting the despotism of reason.<<ref "2">> 
<<<

	Does the analogy between the constitution of the state and Korsgaard’s conception of the constitution of the soul hold? If it doesn’t, then Korsgaard’s theory is obviously in trouble. I think there is a serious flaw in the analogy of the city and the soul. 

Notions of responsibility differ between the Constitutional Models of the soul and of the city. Who does the work of unifying a city? Clearly, all the agents of that will be a part of the city. Corporate responsibility exists in virtue of the individual responsibility which underlies it. Corporate agency (if exists at all) requires individual agents to constitute it. The city is unified and constituted by its many agents. But, this is a fundamental difference in the analogy of the Constitutional Model of the city with Korsgaard’s conception of the human constitution. The parts which are combined and unified in human constitution aren’t individual agents – those parts don’t choose anything. When I point to the city and say, “who is doing the work of unifying?” I can easily say that all the agents in the city are working together, that they have chosen to constitute the city. Obviously, there wasn’t a city to constitute itself before there was a city. I know who is responsible for these actions in the Constitutional Model of the city. But, this analogy doesn’t hold for the individual constitution. The various desires and ‘parts’ of the person aren’t agents, and they can’t choose to constitute themselves as a whole into a larger organism. Unification of the city is vastly different from unification of a person then. ‘Action’ of a corporate agent like a city is not really analogous to the ‘action’ of an individual person/agent either. To whom can I point and say “you are responsible” for unifying yourself? To a mass of people who aren’t yet constituted as a city, I can say, “each of you as individuals are responsible.” But, I can’t say that for the ‘parts’ of a person. Korsgaard must offer an account of agency and responsibility which pre-exists this unification and constitution.  

Does Kant actually use the Constitutional Model for the soul, and must he really be against the second version of the Combat Model?<<ref "2">>  It isn’t clear why we should think that Kant would disagree with the notion that ‘if an agent selects reason, then they can never select passion’ (roughly the second Combat Model). Korsgaard’s argument on behalf of Kant against the second Combat Model boils down to a rejection of the presupposition “that the person already identifies with reason.”<<ref "3">>  But, problematically, it seems that the same can be said against the Constitutional Model. It seems that you can't select anything or be effectively constituted by anything but reason. In Korsgaard’s Constitutional Model, the definition of person seems to presuppose identification with reason.  

But, now I’m not even really sure what she means by the ‘despotism of reason’ that wouldn’t also apply to her model. Even if (however it might work) both Kant uses the Constitutional Model and the analogy holds, is he really committed to rejecting the despotism of reason? Is this despotism of reason as bad as Korsgaard seems to think? She wants to deny that some ‘part’, inside or outside the agent, is the locus of causation, causing the agent to act and will. If this were the case, in her view, then it wouldn’t be the agent ‘as a whole’ acting and willing. But, I think there might be a bit of ‘eat your cake and have it, too’ syndrome going on here. I just don’t see a plausible account of her dual conception of “I.” I don’t see a plausible account of reason being anything other than despotic in the proper agent. If reason, inclinations and desires are equal, then why should I disagree and disregard my inclinations and desires when I need to do moral action? I can't believe that reason isn't in the ruling sphere, that inclinations don’t have to be under the jurisdiction of reason if one is going to be a moral agent. Kant doesn’t seem to be against the despotism of reason. He thinks there are no inclinations or desires in the intelligible realm because they are governed by nature.<<ref "4">>  In the Kantian picture, it isn’t clear how an agent is a proper self if he isn't identified with his reason. The example of the sad philanthropist makes so much more sense if we can accept the disunity between his desires, inclinations, and reason. Only actions performed from duty generated by reason alone rather than from any degree of inclination have moral worth.

Korsgaard continues:

<<<
True unity requires a constitution, which makes it possible for a whole to rule itself, and the merely apparent or empirical unity that is achieved when one part rules another is just a poor earthly substitute for that. That applies to the person as much as to the state.<<ref "5">> 
<<<

What is the difference between false unity and true unity? Likely, what is meant by “merely apparent or empirical unity” is what counts as false unity. I worry that false unity is outright not unity at all, in any degree. I doubt Korsgaard really wants to agree to lesser degrees of unity as possessing any true unity. But, a binary view, of true and false, does not lend itself to any meaningful degrees of unity, which is so vital to her theory.

 A charitable reading might lead us to say that at one end of a spectrum there is the one true, 100%, perfectly formed unity, and the rest of the spectrum demonstrates varying degrees of disunity, which counts as false unity or “merely apparent and empirical unity.” At the other end of the spectrum, there is 0% unity; there is a mere heap, pure anarchy. I’m not sure if it is correct to say that the mere heap is even false unity, because, in some sense, it isn’t even trying to be unified at all. 

This passage seems to imply (perhaps contrarily to the rest of the argument) that one can be falsely unified without a constitution. Can a degree of unity be achieved without a constitution? From the rest of the book, I would think that any degree of unity requires a constitution. Are there constitutions for the mere heap? I think not – mere heaps definitionally have no organization. 

Don’t we require a certain sort of constitution rather than merely ‘a constitution’? False unity, for Korsgaard, is based upon constituting oneself with the wrong principle (not the CI). Assuming there are different ways to constitute ourselves (using different principles), what makes one sort of constitution better than another? In particular, what is it about the sort of constitution using the Categorical Imperative that enables ‘true unity’ where other sorts of constitutions using other principles do not? And, if the previous question rests upon the false premise that only a constitution based on the Categorical Imperative can enable true unity, and there are many sorts of constitutions which can bring about true unity, then why should we think the constitution based on the Categorical Imperative is any better than a constitution based upon another principle? 

What about the constitution makes it possible for a whole to rule itself? Korsgaard believes that only the CI-based constitution is sufficient for true unity, and I think by implication, she would agree to the notion that only the CI-based constitution is sufficient for ‘a whole to rule itself’. But, this only brings up questions of responsibility, again. If a ‘whole isn’t ruling itself’, then why should we think that a unified, poorly constituted person (whatever ‘that thing’ is - I’m not even sure if we can seriously point to an ‘it’ in her theory) is really ruling itself in any culpable manner? At best, there are degrees of responsibility. But, then, it seems that the as we across the spectrum of good action to bad action, the less we can pin an action on a ‘so-called’ agent. That does not seem acceptable. I think cold-blooded murderers (let’s assume they are deeply disunified) are fully responsible for the act of murdering, just as I am fully responsible for the omission of murder (a good thing)!

In the end, I think Korsgaard fails to show us why there is any normative requirement for unity. I can understand reason overriding my biological desires, inclinations or passions, and in this sense I have ‘control’ over them. But this type of control is really not the same thing as the capacity to unify myself which Korsgaard is talking about. I think reason often requires us to be disunified. I don’t think we are really responsible to unify any objects which nature controls; we aren’t responsible for unifying them because we don’t possess the capacity to do it. We do have the ability to suppress them; to bypass them; to choose and act upon what reason requires of us; even when it is at odds with what we feel, and what our bodies desire.

Lastly, she says:

<<<
So for Kant, just as for Plato, reason must rule for the good of the whole, and if we identify with the voice of reason, it is only because we identify with our constitution, and it says reason should rule.<<ref "6">> 
<<<

What counts as the good of the whole person? This points to a substantive conception of the good which Korsgaard should have fleshed out (although, admittedly, she so heavily favors a formal conception that I don’t know how she could provide a substantive one). Furthermore, I’m worried that right action doesn’t necessarily lead to the good of a whole person. It might, for example, require the sacrifice of that person. Would Kant really agree to the notion that reason inside a person is ruling for the good of the whole person? Perhaps the legitimacy of reason is not that it rules for the good of the whole person, but rather that it is independently and objectively legitimate, even if it isn’t for the good of the whole person. 

I continue to worry about this analogy. Justice for a city, at least in Platonic eyes, really might not be concerned with the good of other cities. But, this is very different from a kingdom of ends perspective, whereby agents must be concerned, in some sense, with the good of other agents. 

Who is doing the ‘identifying with’ - the whole, a part, the sum of the parts? It isn’t even clear what it means to identify with our constitution. Korsgaard claims that identifying with our constitution is both sufficient and necessary for identifying with the voice of reason. But, what if you identify with a constitution which isn’t a CI-based constitution? We aren’t given a clear explanation of the manner in which a person’s constitution says reason should rule a person as a whole. It seems very possible in her theory that there can be a different (non-CI-based) constitution which says something else, something other reason, should rule a person as a whole. The only reason we believe reason should rule is because we’ve begged the question. 

''[2]''

	Good action is a well-defined and plausible concept in Korsgaard’s book //Self-Constitution//, particularly given how good action fits in with the rest of her theory. In contrast, bad action or ‘defective action’ is not a well-defined concept which fits nicely into her theory. The notion of defective action either fails to meet the expectations of our moral intuitions or it contradicts her theory at large.

	[Objection #1] Evil unification seems possible in her theory. If there is evil unification, then it doesn’t seem like it is really evil at all, as we typically understand the word. And, if evil agents can be unified, then their actions aren’t evil either because their actions are unifying them. If I’m right, then there isn’t a strong enough distinction between evil action and good action in her theory. Good and evil don’t seem to have any real meaning. Good and evil are just perceptions; they are subjective notions. Good and evil are constructions, not truths, in her theory. If they are truths, they are empirical ones about unification, but then she lacks any substantial evidence that her principle is the empirically the best one.

	She argues for degrees of unity. And if unity is the normative metric in her overall theory, then why should we care what principles of constitution get us there? If principle A unifies just as well as principle B, then they are normatively equal in this theory. And, even if principle A is not as good at unifying as principle B, as long as principle A still generates some degree of unity, then isn’t principle A good to some extent, just not as good as B? These are consequences of her theory, but not consequences to which she wants to admit. The CI might unify a person 100%, and principle A might do it 90%. It seems that principle A is almost as good as CI – it is ‘mostly’ good, right? She doesn’t want to admit that. It looks like wishful thinking to me. It seems that other principles really do have a chance at unifying us as well as the CI, and the actions which come from those other principles should be just as good because they are just as good at unifying us.

	Furthermore, the claim that the Categorical Imperative unifies us is a gigantic empirical assumption. I’m far from convinced we are unified by the Categorical Imperative. The sorts of actions which the CI compels us to do often might not be the sort which unifies us. Since unity is the normative metric of her theory, I think her choice of the Categorical Imperative as the correct principle and the definitions of good and defective action in her theory are wishful thinking, unsupported by some desperately needed evidence about how these really unify us.

	She might argue that good unity, good constitution, good agency, and good action are good ‘by definition’ and likewise evil unity, evil constitution, evil agency, and evil action are evil ‘by definition’. But this option isn’t open to her – it requires her to talk about moral truths which are independent of us. She closed herself off from that when she criticized the dogmatic rationalist. To go this route would make her subject to the very criticisms she made against the dogmatic rationalist – namely, having objective moral truths. If it is open, it is only empirically open – we don’t know what principle actually unifies us best, and whatever that principle turns out to be, we might ‘definitionally’ call the Categorical Imperative, but it might call us to perform action which is nothing like the traditional conception of the Categorical Imperative. 

I think she knows her theory is in trouble if it can’t muster any objectivity, but I think she’s waving her hands trying to make it work. Good and evil are likely fleeting constructions. Serious moral realists will undergo vertigo when trying to make sense of what she’s doing here. 

	[Objection #2] People who perform evil action aren’t technically people. They aren’t responsible – they aren’t agents – they aren’t even performing action. There is no evil action.

	Again, it seems like being unified is ‘by definition’ good in her theory, and we assume that unified people, ‘by definition’ don’t perform certain acts which we generally as a human race call ‘evil’ (like murder). If ‘by definition’ unified agents never do what is wrong – they must be perfectly virtuous, and furthermore, if a ‘heap’ happens to do what we call ‘evil’, and thus that heap isn’t fully unified, then that heap isn’t an agent. Non-agents, mere heaps, aren’t responsible. There is nothing, no ‘whole being’, there to bear responsibility. 

	Disunified people aren’t responsible. Defective actions aren’t truly actions, and those who commit them aren’t truly agents. We can’t point to any bad action, or to any bad agent and say “they did it.” Or, to the extent that we can, and to the extent that a bad action is an action, and to the extent a bad agent is an agent, they aren’t truly bad. If you can point to it, if you can say “it is more than a mere heap, there is a semblance of a whole there,” then by the normative metric of unity, it definitionally isn’t bad. 

	[Objection #3] I’m objecting to part of her defense against some of the objections I’ve already raised. Consider the following passage:

<<<
As far as tyrants are concerned, I’m not sure what to say—but then no one knows for sure what to say about the responsibility of some of the characters I’ve classified as tyrants—serial killers and addicts, for instance. But to the question whether the others become less responsible as they approach the tyrannical condition, the answer is no. There is no general principle saying that you are responsible to the extent to which you acted.<<ref "7">> 
<<<

Replace “you acted” with “you are an agent” and it becomes clearly incorrect. Agency is entirely about efficacy and responsibility. But, since the degree of action is literally a measurement of the degree to which you are an agent, then the general rule is true, at least if she is correct about the relationship between action and agency (I think it would wiser to separate these notions). She continues:

<<<
What we are going to blame you for is not that other force that was working in you or on you, but for the fact that you let it do that, that you failed to pick up the reins and take control of your own movements. And the reason we are going to do that is that making yourself into an agent, giving yourself an identity, becoming a person, is your job (1.4.9).8
<<<

If you are responsible for not being an agent, or for not being a unified agent, then who is this ‘you’? And isn’t this overarching ‘you’ that is responsible for whether or not you are an agent (in her theory) also an agent? Isn’t what we mean by agency – a type of irrevocable responsibility to act and to be in a certain way? This brings us back to the of paradox agency which she failed to solve. In the event, becoming a ‘unified agent’ is a responsibility that must necessarily lie with some agent – and that agent must, in her theory, be a unified agent in order to perform that action, making the entire thing circular; ascribing responsibility or blame for omission of an action or performance of a bad action, therefore, becomes impossible – either the agent was originally unified in a way impermissible to her theory or was disunified and, therefore, not a responsible agent. 

''[3]''

Korsgaard is worried about the ‘big mistake’ of approaching a disunified city or person as ‘one city’ or ‘one person’. She considers a problem posed by Derek Parfit.9 Parfit’s story is about a young Russian nobleman who in the future will come into his inheritance, and he wants to make sure that his future, older self will do the right thing by giving a large portion of his inheritance to the poor. The young nobleman is worried that his older self will be a different person, with different values, and in Korsgaardian terminology, he has a different set of contingent practical identities; the younger nobleman believes he will become an uptight and selfish, yet (supposedly) ‘rational’ and ‘self-controlled’ person who won’t give to the poor. The younger nobleman sets out against the older nobleman (his future self that somehow isn’t really, essentially him), trying to strategically force the older nobleman to give his inheritance to the poor. Korsgaard describes the strategy:


<<<
So he makes a contract now, to distribute the land when he gets it, which can only be revoked with the consent of his wife, and he asks his wife to promise not to revoke it then, even if he tells her then that he has changed his mind, and that she is released from the promise…Parfit portrays him as telling his wife that his younger self is his real self, that his ideals are essential to him, and that if he loses those ideals she should regard him as effectively dead. Being dead, he cannot release her from her promise, and if his middle-aged avatar claims to release her, in an effort to keep hold of the estates, she should regard him as someone else, who therefore cannot release her –almost…as a kind of impostor, posing as the continuation of his younger self.<<ref "10">> 
<<<

If the younger nobleman’s prediction about ‘who he will become’ is wrong, then she won’t need to force him to do anything. However, if his prediction is correct, then this strategy, if it works as he intends, will force the older nobleman to give to the poor, which is against the values and normal (so-called) rational choice that the older nobleman would have otherwise made, namely to keep the inheritance.

Several problems immediately arise from Parfit’s story. Is the older nobleman really being rational? Does the younger nobleman have the right to obligate his future self, and if he doesn’t, then what does that say about obligations in general? Is the younger nobleman really a different agent than the older nobleman – does his agency lack continuity through time? Is it really a bad thing for the younger nobleman to lock himself, or the older nobleman (if w-=]e read him as a different agent) into doing what is objectively the right thing?

The wife has another set of related problems. Can she really make this promise to the younger nobleman? Is she doing wrong against the younger nobleman when she ‘breaks her promise’ to him by not forcing the older nobleman to give to charity? Is she she doing wrong to the older nobleman when she fulfills her promise to the younger nobleman, but perhaps forces the older nobleman to give to charity? 

I want to make it clear that I think there is a lot at stake in this story and in answering it – a proper response comes with a lot of meta-ethical baggage. Definitions of agency, action, choice, obligation, rights, and value are exemplary issues at stake which this story brings up. There are also some powerful metaphysical and ontological questions at stake in this ethics story, including the metaphysical nature of property and social contracts, and multiple concerns about object identity and agent identity. The consequences to answering these questions incorrectly have a profound reach and impact. In some sense, I can’t hope to offer the proper (read: effective) response, which includes a comprehensive countertheory, to what Korsgaard and Parfit are doing here. I can “give you the skinny” on some of things they’ve done wrong though, which is only a glimpse of what should be said about this problem.<<ref "11">>

Parfit’s problem, a problem based on the assumption that the younger and older noblemen are two different agents, requires us to make sense of their capacities as agents to bear rights and duties, in part by trying to make sense of the wife’s (possibly differing) obligations to these two agents. Korsgaard tries to re-tell this story of ‘successive selves’,  with her own meta-ethical baggage, in terms of division of a self, an internal conflict, and ultimately, in terms of disunity and a lack of integrity on the part of the nobleman/noblemen.

In setting out to answer Parfit’s problem, Korsgaard introduces a Kantian (and traditional Judeo-Christian) conception of marriage, a joint-ownership contract whereby two spouses maintain a complete “reciprocity of possession” of each other and each other’s belongings.<<ref "12">> She emphasizes this transaction as a “unity of will” in which:

<<<
Two people who get married pledge to share one another’s lives and possessions; there is therefore a range of decisions that they pledge to make together—decisions about where they will live, decisions about the house, the car, the children, and the money—including the disposition of those inherited estates.<<ref "13">>
<<<

From this ‘unity of will’, Korsgaard claims that “the Russian nobleman’s wife cannot operate as an independent person free to choose now between two loyalties,” the loyalties of the younger and the older noblemen.<<ref "14">> These two spouses are supposed to have a unity of will. But, as Korsgaard points out, it doesn’t seem like they really have a unity of will. As this one man is actually two men, is there a unity of will between three people? That doesn’t seem to be the spirit of a marriage at all. Is she married to the younger nobleman, but not the older? Or, is she even married to either of them at all? I think it might be reasonable to say there is a difference between the Kantian marriage and a legal marriage. 

Korsgaard says “he cannot make the decision together with himself…”<<ref "15">> This decision is about what should be done with the future inheritance. If he cannot decide, then husband and wife certainly can’t decide together either. Note that it is not immediately clear who this ‘he’ might be. It could be the younger nobleman with himself, the older nobleman with himself, and/or with the younger nobleman with older nobleman. Interestingly, Korsgaard says:

<<<
The young nobleman asks his wife to commit herself, to make a promise, and to keep her promise in the future. She is to hold him, by holding herself, to giving up the estates. But if she can do this, why can’t he?<<ref "16">>
<<<

The assumption is that the wife will maintain her identity and commitments through time, even though he won’t. And, further, from Korsgaard’s theory, maintaining one’s identity is maintaining one’s contingent practical identities, one’s agency, one’s reasons for acting, one’s normative obligations and rights. In this case, it is an identity for keeping of a promise (to her husband no less) and a commitment to give to the poor which the wife is capable of maintaining, and for the husband, it is simply the will to give to the poor, which he somehow isn’t capable of maintaining. Because he lacks a capacity to maintain a commitment with himself to give to the poor, Korsgaard implies we should question his ability to make commitments or promises in general. Even the couples’ marriage vows appear in jeopardy. I think this might be too large a leap. 

By unity of will, do we mean they never disagree and that they don’t have any conflicts concerning property distribution? I don’t see any marriages that can always qualify without fail as that. If unity of will is only the singular moment where both completely agree, completely give themselves to their spouse, then it seems that this unity is fleeting. Unity of will might really be a commitment to ‘making it work’, to putting forth maximal effort to resolve disagreements in the most loving fashion possible. When both spouses are in agreement on that point, well then, I think we are really talking about marriage here. Not being capable of knowing what exactly to do with property, having a conflict with either yourself or your spouse, doesn’t seem to revoke marriage in any degree. 

Vitally, Korsgaard say about that wife: “if she approaches her husband as one person, she’ll be making a big mistake.”<<ref "17">> This can be taken in two ways. Either the nobleman is really two different noblemen (younger and older persons), and thus not one person, or the younger nobleman is simply divided and in conflict with himself, and thus the younger nobleman is really not one person. In the first way there is not ‘one person’ because there are two persons in one body over time, and in the second way, there is not ‘one person’ because there isn’t a person (let alone two). Parfit agrees to the first, and it seems that Korsgaard is tempted to head in the other direction. It makes a lot of sense in her theory if there is an immediate conflict and disunity in this younger nobleman. But, if this is the interpretation, I think she’s re-written who this ‘younger nobleman’ really is – he seems much less rational and put together in Korsgaard’s re-telling than in Parfit’s. However, there is also decent reason for her to interpret it like Parfit, and to say that the younger nobleman has one identity, and the older nobleman a different identity. But, then she is committing the same egregious mistake about lacking persistent agency that Parfit does – in some ways, this is already present in her theory, as we can shed and take on contingent practical identities, including (supposedly) our agency, and thus our moral obligations, at whim. 

Korsgaard claims that a married couple deliberates together and arrives at a shared decision.<<ref "18">> She explains: 

<<<
The aim of the shared deliberation…is to find (or construct) a shared good, the object of our unified will, which we then pursue by a shared action. And it follows from the fact that the action is shared that if either of us fails [to perform our proposed shared action]… we will both have failed to do what we set out to do. Our autonomy and our efficacy stand or fall together.<<ref "19">>
<<<

If this is true, then it doesn’t seem that the younger nobleman and his wife really have joint autonomy or efficacy. They lack unity of will and they lack shared deliberation. They aren’t married, at least not with respect to this issue (perhaps Korsgaard would argue for degrees of marriage), on this view. She sidetracks the discussion briefly by saying:

<<<
If I treat your reasons as reasons, they may change my mind about what counts as the best outcome… But if I treat your reasons as tools and obstacles, they will come into my deliberation in a different way—I will see whether I might use them as tools in the pursuit of my own ends, or if not, if they are obstacles, then I will try to determine whether I can remove them from my path.<<ref "20">>
<<<

This is a very potent statement. A whole discussion is centered around what it means to treat others as persons/agents (ends) with their reasons as your reasons vs. treating them and their reasons as tools and obstacles (means). The nature and normativity of interaction is at stake. Korsgaard relates this talk about warcraft to the story of the Russian nobleman. She says: 

<<<
And this of course is how the Russian nobleman is related to himself. He doesn’t think of his future reasons as reasons—he thinks of them as facts to contend with, as tools and obstacles, and in his case mainly obstacles—and he is therefore in a condition of war with himself. His efforts as a young man are dedicated to ensuring that his younger self wins, and his older self loses. His soul is therefore characterized by civil war, and that is why he fails as an agent, and his younger self cannot be efficacious without the help of his wife. But for the same reason he, his whole self now, is unable to interact with his wife.<<ref "21">>
<<<

It seems that one can interact with one’s present self, one can interact with one’s future self, and one can interact with other persons. In this passage, in seems that the younger nobleman is interacting (or rather, he is failing to interact as he should) with himself as an older nobleman. In one sense, Korsgaard is arguing for a persistent identity – she wants the younger and the older to be one person over time. But her argument ‘for a persistent identity’ isn’t that it is necessarily the case that they are one person (which is what I think is the only sensible thing to argue), but rather that they merely should try to be one person. She continues: 

<<<
As an embodied being [he as an agent] must take into account all of the incentives, present and future, to which [he] will be subject in the natural course of [his] embodied life: that is part of what Plato means when he talks about willing for the good of the whole.<<ref "22">>
<<<

How can you know what your future holds? How can you know (which is a precondition to taking into account) your future incentives? Interaction makes sense when it is simultaneous, but it doesn’t make sense through time. You can’t interact in any meaningful sense with your future self. I’m convinced that she is in some sense agreeing to unification through time (although, later we’ll see she doesn’t want that). Korsgaard doesn’t have the same problem I have with Parfit’s story – she agrees that his agency is in jeopardy. She continues:

<<<
The Russian nobleman fails as an agent because… he doesn’t will a law that he thinks he can commit himself to acting again later on, come what may.<<ref "23">>
<<<

<<<
His future self is just himself. He can decide to disagree with his own future attitude. But unless he is then also prepared to regard his own future attitude as one of weakness or irrationality, he is not according the reason he himself proposes to act on right now as having normative standing. For he is not making a law for himself unless he thinks of his future attitude as a violation of that law, and if he does not think he can make laws for himself then he lacks self-respect.<<ref "25">>
<<<
<<<
So his problem is not his disunity with his future self, but his disunity with himself here and now. And his problem is not disrespect for his future self, but disrespect for himself here and now.<<ref "26">>
<<<

So, the reason he is disunified in the present is he doesn’t find his future self to be irrational. I don’t think that really answers the story. A prediction that my views or values will change is not that same thing as my advocacy of their rationality or irrationality. We can fine tune the story. Perhaps he has his mind 100% made up (and unified) at time-t0 to A, and just so happens in the future to have his mind 100% made up at time-t1 to ~A.  His younger t0 self thinks that his older t1 self is wrong, irrational, and immoral. But, this doesn't sound like necessitation. That just sounds like he shed and gained a new contingent practical identity, he changed his mind. He’s not really in conflict with himself. 

[Objection #1] If Korsgaard argues for unification through time, she’s expecting the younger nobleman to know himself in the future, and unify himself through time, then she is expecting something which is impossible, something which is out of his present reach. If she argues that there isn’t unification through time, but really, he’s disunified in the present, and the older nobleman isn’t the same agent, then she’s demolished persistent agency. I can’t accept either one.<<ref "26">>

Unification through time is interesting because it maintains some semblance of a persistent identity (which I think is cardinal to the work we are doing here). But, unification through time as an action doesn’t make sense. I really don’t think Korsgaard agrees to this notion, even if she toys with it – she, herself, knows it has controversial (probably insurmountable) problems. It would also contradict aspects of her own theory at large. Unification through time basically prevents the shedding and taking on of contingent practical identities. 

If agency doesn’t persist in the case of the nobleman, then the nobleman’s life is split into (at least) 2 lifetimes, two agencies, two sets of responsibilities – he is broken into two people. But aren’t we all subject to this? We are schizophrenic, and useless through time. When we change our minds enough (where that point may be, I’m still unclear), when we shed enough contingent practical identities, we are no longer ourselves. No practical system of ethics can be made from this stance on agency. Agency must be persistent, or obligations through time are arbitrary, superfluous, and ridiculous.

Obligations through time become incoherent if we lack a consistent, stable identity/self/agency through time. Duties or rights of the person do not pass through time to whomever they 'evolve' into; whatever contingent practical identity they eventually take on, sheds all obligations. Isn’t agency the very type of thing that remains stable? It is that which enables obligations to pass through time, from one contingent practical identity to another. Agency isn't a choice, it lasts a lifetime. To say that 'killing yourself' is a way to shed your agency is tongue-in-cheek; but it isn't obvious how one might actually 'choose' to shed their agency otherwise. Agency is not a choice; it is not something which you constitute yourself as. You are innately an agent or you aren’t, it isn’t up to you. Agency is the very thing that enables you to have anything else to be ‘up to you’ – but agency as a capacity isn’t something that is up to you. Your plight is not your choice. 

How are we to treat the disunified? [Objection #2] The constitutional model she presents in this book dehumanizes and strips personhood and the rights which follow from it away from the disunified. In the case of the Russian nobleman, he is less of a person, less of an agent, not as good as a human, and less worthy of our interaction. He doesn’t deserve to be treated as well as a full-blown unified agent; he can’t actually be treated (according to her theory) that way by definition, since he lacks the capacity to be a person. In some sense, he is like the mere heap – he is rubbish, so, go ahead, dispose of him! 

By her theory, people who don’t respect themselves as people aren’t really people, and so we don’t have to (because “we can’t”) respect them either. Now, you might say I’m exaggerating the point – she does after all have a theory which comes in ‘degrees’. But, my criticism is applicable, even in degrees. The degree to which a being isn’t an agent, the degree to which he is a mere heap, is the degree to which we can’t interact with him and treat him as an end. Mere heaps, in any degree, are tools and obstacles, not ends.

So, the nobleman is, at least to some degree, disunified and, to that degree, cannot be treated as a person, as an agent. The wife, then, cannot be obligated to some degree (and perhaps to no degree) to him. Regardless of whether he is disunified through time, or disunified in the present as a younger nobleman, he’s still not worthy. I just don’t see how he is an illegitimate person to any degree. Korsgaard’s interpretation alongside her theory requires it.

----------------------------------------------

<<footnotes "1" "Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity// (Oxford: Oxford University Press, 2009), 157">>
<<footnotes "2" "Ibid., 134">>
<<footnotes "3" "Ibid.">>
<<footnotes "4" "Immanuel Kant, //Groundwork of the Metaphysics of Morals//, Ed. Mary Gregor (Cambridge: Cambridge University Press: 1997), 61">>
<<footnotes "5" "Christine Korsgaard, //Self-Constitution: Agency, Identity, and Integrity //(Oxford: Oxford University Press, 2009), 157">>
<<footnotes "6" "Ibid., 157">>
<<footnotes "7" "Ibid., 174">>
<<footnotes "8" "Ibid., 175">>
<<footnotes "9" "Ibid., 185">>
<<footnotes "10" "Ibid.">>
<<footnotes "11" "I would like to offer a better account, but that will have to be at a later time.">>
<<footnotes "12" "Ibid., 186">>
<<footnotes "13" "Ibid., 187">>
<<footnotes "14" "Ibid.">>
<<footnotes "15" "Ibid.">>
<<footnotes "16" "Ibid.">>
<<footnotes "17" "Ibid., 188">>
<<footnotes "18" "Ibid., 190">>
<<footnotes "19" "Ibid., 192">>
<<footnotes "20" "Ibid., 193-194">>
<<footnotes "21" "Ibid., 195">>
<<footnotes "22" "Ibid., 198">>
<<footnotes "23" "Ibid., 203">>
<<footnotes "24" "Ibid.">>
<<footnotes "25" "Ibid., 203-204">>
<<footnotes "26" "It is possible she is arguing for both. Her argument should have been much clearer in this respect.">>
In this paper, I explore the history and evolution of the concepts of apodicticity and objectivity in Husserl’s phenomenology. I consider: what Husserl means by and why he is interested in these concepts, and whether or not phenomenology yields apodictic and objective results. In addition, I evaluate the nature and status of logic, particularly with respect to apodicticity and objectivity. 

Husserl’s philosophical views of the world evolved over time (a good thing, presumably, as this is probably true for any intelligent person). His early work was a stepping stone to his later work, and while we can trace his line of thought, we need not assume that his early work is entirely compatible with his later work. It seems as though objectivity is a concept which evolved over the course of Husserl’s work, and his early concept may conflict with his later concept. The type of objectivity derived from Husserl’s Platonism in Logische Untersuchungen seems different from the objectivity derived from his notion of intersubjectivity in Ideen. Not only are these two conceptions of objectivity possibly in conflict, but Husserl’s later notion of intersubjectivity is unsatisfying as grounds for objectivity. 

Husserl’s notion of apodicticity may or may not have evolved over his life’s work. Probably, it did not – but the relationships between objectivity and apodicticity in Husserl’s early work and his later, arguably more phenomenological, work becomes difficult to comprehend. My essential worry is that Husserl’s late phenomenology fails to meet the criteria of apodicticity (in his initial and our generally agreed understanding of the word). I assume his phenomenology fails to be apodictic, as he originally intended, but it is likely that Husserl knew this himself. Perhaps he used the word apodicticity in his later work with a different meaning, a meaning which wasn’t going to short-circuit his systematic phenomenology.  Even if we cannot interpret him as doing this, I think a charitable reconstruction of his late work will show that Husserl’s phenomenology has very high epistemic standards, even if it is not apodictic.

Essentially, Husserl’s phenomenology is only functional if he lowers the methodological requirements below his original and supremely high epistemic standards of apodicticity and objectivity. It makes more sense to perform phenomenological research without having to meet Husserl’s original standards of apodicticity and objectivity. Instead, a healthy amount of doubt and a relatively strong (but not apodictically-based or completely objective) justificatory standard seem both prudent and fruitful in phenomenology. I conclude that charitable interpretations or reconstructions of Husserl’s phenomenology will relax these original Husserlian standards.

In //Logische Untersuchungen//, Husserl considers how knowledge is possible and what conditions must be met in order for one to have knowledge.<<ref "1">> He criticizes psychologism, which argues epistemology is naturalistically “concerned with the cognitive nature of perceiving, believing, judging, and knowing” and thus claims the status of logic requires empirical investigation and verification.<<ref "2">> This is a large error in Husserl’s view – he thinks logic and mathematics, for example, are not factual, real (in the tangible sense of the word), empirical objects; rather, they are ideal laws or structures. Consequently, our knowledge of them and the manner in which they are known is fundamentally different from how we know empirical, factual claims.  Husserl associates logic and mathematics with a sort of profound certainty, idealism, eternality, and objectivity which are epistemically superior to temporal facts and empirical investigations (which are far more subject to doubt and change). Logic and mathematics are exemplary knowledge of the highest order in Husserl’s eyes, and it remains separate from psychology and other empirical investigations. It makes sense that Husserl has used logic and mathematics as a subject to tease out foundational claims of epistemology; after all, he was a mathematician. As Stefania Centrone puts it:

<<<
[I]t is well known that Husserl’s refutation of logical psychologism leads in the Prolegomena to the identification of ‘an internally closed, independent . . . field’ of a priori truths, which constitute the domain of pure logic. Pure logic acknowledges the objectivity of contents of thinking (concepts, propositions, inferences) and studies the properties of and the logical relationships among them. It is a formal, theoretical, a priori science, independent of other sciences, and, in particular, of psychology.<<ref "3">>
<<<

Psychologism fails, in Husserl’s view, because it attempts to reduce ideal things to real, factual things (like naturalistic objects). The object of knowledge – in this case, logic or mathematics, as an ideal object – is distinguished from the act of knowing, although the two are connected (they must be if we are to know any logical and mathematical truths).<<ref "4">> Husserl believes that, in order to understand ideality and this connection between the object of knowledge and the act of knowing, we must investigate consciousness; but not as a natural and empirical examination (as psychologism would have us do). This demonstrates his preference for apodicticity and the focus on consciousness within his method of phenomenology. His view on logic also provides us a window into his early views of objectivity. Husserl says:

<<<
No truth is a fact, i.e. something determined as to time. A truth can indeed have as its meaning that something is, that a state exists, that a change is going on etc. The truth itself is, however, raised above time: i.e. it makes no sense to attribute temporal being to it, nor to say that it arises or perishes (Hua 18/87 [109-110]).

The truth that 2 + 3 = 5 stands all by itself as a pure truth whether there is a world, and this world with these actual things, or not (Hua 9/23).<<ref "5">>
<<<

It seems as though Husserl is claiming that logic (of which mathematics is a subset) is objectively true, and that it is true independent of a world and perhaps independent of us as conscious beings, as well. He is proffering a sort of Platonism in the Logical Investigations, the epitome of a theory for objectivity, in his early work. This isn’t the sort of ancient Platonism with perfect forms where objects are poor imitations. Husserl’s Platonism is still a strong view of objectivity, as truths are mind-independent. Unfortunately, it seems as though he is so vehemently against metaphysics that he can’t really hold onto this kind of objectivity in his later work. We should be mightily tempted to interpret a kind of realism in this early work, and a kind of idealism in his later work. If there is a shift from realism to idealism in Husserl’s work (which he wishes to deny in his later works), then, without a doubt, it isn’t just Husserl’s conception of objectivity which has evolved.<<ref "6">>
 
	He starts with the objectivity of Platonism, but eventually fabricates a type of objectivity out of a collective subjectivity: intersubjectivity. What exactly is this intersubjectivity, particularly as it relates to objectivity?

<<<
[I]ntersubjectivity only exists and develops in the mutual interrelationship between subjects that are related to the world; and the world must be conceived as a common and public field of experience (cf. Hua 8/505, 15/373, 13/480, Ms. C 17 33a).<<ref "7">>
<<<
<<<
According to Husserl, my perceptions present me with intersubjectively accessible being, that is, being that does not exist for me alone, but for everybody (Hua 9/431, 14/289, 390, 17/243, 6/469). I experience objects, events, and actions as public, not as private (Hua 1/123, 15/5). Husserl consequently claims that an ontological analysis, insofar as it unveils the being-sense (Seinssinn) of the world as intersubjectively valid, leads to a disclosure of the transcendental relevance of foreign subjectivity and thus to an examination of transcendental intersubjectivity (Hua 15/110).<<ref "8">>
<<<
<<<
Concrete, full transcendental subjectivity is the totality of an open community of I’s—a totality that comes from within, that is unified purely transcendentally, and that is concrete only in this way. Transcendental intersubjectivity is the absolute and only self-sufficient ontological foundation [Seinsboden], out of which everything objective (the totality of objectively real entities, but also every objective ideal world) draws its sense and its validity (Hua 9/344, transl. modified).<<ref "9">>
<<<

Intersubjectivity is a confirmation, consensus, and a construction of a group of phenomenologists concerning a phenomenon. Objects present themselves intersubjectively. It is because the community of phenomenologists commonly agrees and forms a consensus regarding the nature of an object that the object and our claims about it attain the epistemic status of objectivity. Objectivity in the sense that the world is composed of subjects and objects, the ontological perspective with which Heidegger breaks from Husserl (giving primacy to instrumentality instead), is maintained throughout Husserl’s body of work. As far as I can see, objectivity in the sense that truth and objects are mind-independent, like the sort found in Husserl’s initial Platonism, arguably a discussion of realism and idealism, is not clearly maintained throughout Husserl’s body of work. Phenomenological objectivity may lose the strength of his Platonic objectivity we hope to associate with logic and mathematics, favoring an epistemically weaker intersubjectivity. 

Highly connected to the epistemic standard of objectivity, and probably more essential to Husserl’s starting place in Phenomenology, is the notion of apodicticity. As far as I can see, objectivity is a necessary pre-condition to apodicticity in his early work, and perhaps an argument which endangers Husserl’s objectivity will also be dangerous to his apodicticity. Objectivity and apodicticity are strongly connected notions in his early work, but in his later work they seem torn apart, and I am not sure how we can put them back together (or even if we ought to put them back together). 

To know a logical truth seems to be the epitome of having certainty in Husserlian philosophy. It is intuitively obvious and evident that, for example, P = P. The opposite (~P=P) is inconceivable. When we know a logical truth, at least one as foundational and simple as this one, we have no doubt about it. We are certain about it; it is apodictically given to us. This sets the standard, as an example, for what counts as ultimate knowledge in Husserl’s philosophy.  

The root of Husserl’s phenomenology is the pursuit of certainty – apodictic knowledge. Adequacy is not enough, he seeks absolute indubitability. An apodictic evidence is not only certain evidence of its objects but is also “the absolute unimaginableness (inconceivability) of their non-being (Hua I, p. 56; 1977, p. 16).”<<ref "10">> This is a very strong conception of knowledge as fully justified belief. Husserl’s initial conception of apodicticity does not seem to admit of degrees. You either have apodictic belief or you don’t. 

We may think of certainty, or apodicticity, as an extreme epistemic property of beliefs. Even if Husserl would agree to a distinction between knowledge and certainty, he would have to argue that certainty is either the singularly highest degree of knowledge or a higher kind of knowledge. 

Phenomenology, as the apodictic science, is, theoretically speaking, an infallible method for achieving certain belief, i.e. knowledge. When we actually go out and perform phenomenological research, we come to realize that our results somehow do not immediately live up to this infallible standard. The process as a practice, the implementation of the method, however, is filled with fallibility. According to Walter Hopp, agent-fallibility should be interpreted from Husserl’s work. George Heffernan explores even further and argues that we must consider evidence-fallibility.<<ref "11">> Do these endanger the infallibility of the method? I think a charitable interpretation will claim they do not endanger the infallibility of the phenomenological method. 

These concerns are highly analogous to the epistemic foundations of logic. Logic, as a method, is said to be truth-preserving. The theoretical steps and the method itself can only take you from one truth to another truth. Phenomenology, likewise, preserves apodictic belief. In logic, we use deduction; in phenomenology, we make claims from and analyze consciousness and what is intuitively given and presented to consciousness. Just as in practicing phenomenology, the problem in practicing logic is that an agent can fail to apply it – agents are fallible. 

Unfortunately, the analogy weakens when comparing methodological requirements and metatheoretic concerns of verification. Logical deductions use small steps, clearly defined – nothing is more precise and spelled-out than logic. The steps are obviously reliable and we are certain of them. Logic is also methodologically simple, in some sense. Logic is a method that is testable by a computer – it is that mindless (I use the word with the utmost respect for logic) of an activity. Verification, proofs, and replicability are very straightforward in logic. 

Phenomenology, however, is quite the opposite of being mindless, and it is not straightforward in these respects either. Agent-fallibility does not seem to endanger logic’s truth preservation, as correcting the errors of agents is a simple task. This sort of correction and verification is not as simple in Husserl’s phenomenology. It is thus a bit harder for us to see why phenomenology is a science which is as rigorous or as replicable as logic. Phenomenology, as Husserl lays it out, is supposed to lead us to apodictic belief, but the method seems mushy. Husserl distinguishes the analogy:

<<<
Phenomenology in acts of seeing, determining, and distinguishing sense. It compares, it distinguishes, it connects, it places in relation, it divides into parts, it separates off moments. But it does all this in the act of pure seeing. It does not engage in theory or mathematical construction; that is, it offers no explanations in the sense of deductive theories. (Hua II, p. 58; 1999, p. 43)<<ref "12">>
<<<

The analogy breaks in domains as well. Husserl’s phenomenology has a larger epistemic domain than logic, being concerned not only with truth, but also with belief. Apodicticity is much larger in scope and stronger in its epistemic claim than the truth-preservation of logic, and perhaps this should afford it more charity than we might initially think is merited. 

Phenomenology, as a method, in some sense cannot be separated from agents, the steps are not as clear as they are for logic, and the verification is based on intersubjectivity. The method seems flawed because it exists and functions in virtue of agents, which is not obviously the case for logic. It seems that agent-fallibility is more problematic for Husserl’s phenomenology than it is for logic. 

Apodicticity seems to be gained by the initial phenomenological reduction, but from within this perspective not all transcendental claims appear to be apodictic. While perhaps not apodictic, these claims still seem to have a powerful epistemic status as they are claimed from within the phenomenological reduction. I think it is akin to building a house on epistemically more stable and less doubtable ground. The house itself might not be apodictic, but the grounds are apodictic. A structure built on such a stable foundation seems far less vulnerable to epistemic criticisms than structures not built upon such ground. Assuming all else being equal (neither house lives up to the standard of apodicticity), we should prefer the house built upon apodictic grounds. 

In Husserl’s phenomenology, objectivity is supposed to come from intersubjectivity. This does not necessarily make the method fallible, but it makes it much harder to see why it is infallible. Why should we believe that intersubjectivity amounts to objectivity? I do not know. A group of phenomenologists may be less fallible than an individual phenomenologist, but I see no reason to think together they are inevitably infallible or objective. 

Insofar as the method can be separated from the agents, we do not need to be worried about method fallibility, but I do not really understand what it means to separate this method its practitioners. Perhaps in the most theoretical sense, phenomenology may be infallible, but in practice it does not appear infallible – it may never, practically speaking, lead us exclusively to apodictic beliefs. Husserl appears to have known this himself, and maybe it did not bother him. My worry is that apodicticity is disconnecting from objectivity and losing its primacy as an epistemic foundation, in some sense, after performing the phenomenological reduction, but perhaps this is just fine. 

Part of the difficulty in fleshing out the differences between the notions of objectivity and apodicticity found in the early and later work of Husserl rests upon the fact that the scope of the Logical Investigations is smaller and plainly different from Ideas. Within the domain of the Logical Investigations, apodicticity and objectivity seem to be one and the same, having realist notions. What develops in Husserl is the thought that something like this can extend outside of this domain. It is a seed to Ideas, but Husserl’s later development of phenomenology grows into something quite different and arguably idealist. 

It is possible that the Logical Investigations is conducted within the natural attitude. Husserl probably did not really have the phenomenological reduction at that point in time. Once you make the move to idealism, and objectivity is constituted differently, then what does apodicticity mean and to what does it now apply? Where is apodicticity preserved in Husserl? It is preserved in the phenomenological reduction, the immanent presentation is taken to be apodictic, but the objectivities determined out of that are not necessarily apodictic. Within Ideas, a distinction is drawn between the immanent presentations and so-called transcendent objects, which are always dubious. Apodicticity is allocated to certain aspects of Husserl’s phenomenology, but not everything must meet that standard. Note that the “could always be wrong” is built into the notion of a transcendent object – we could always be wrong about the next perspective. There might be some sort of objectivity constituted about these objects, but it is a dubitable objectivity. Objectivity and apodicticity seem to go hand-in-hand within the Logical Investigations, but they seem to break apart in Husserl’s later work. 

Upon reflection, we should see that Husserl’s phenomonology is easy to salvage or perhaps is misinterpreted. Husserl himself lowered his expectations concerning objectivity, and if we lower the standard for phenomenology below apodicticity (and we can still maintain a very, very high epistemic standard even without the absolute certainty of apodicticity), then his phenomenology appears to have better form and function. 

-----------------------------

<<footnotes "1" "Zahavi, Dan. //Husserl's Phenomenology//. Stanford, Calif: Stanford University Press, 2003: 8">>
<<footnotes "2" "Ibid., 8">>
<<footnotes "3" "Centrone, Stefania.// Logic and Philosophy of Mathematics in the Early Husserl//. Dordrecht: Springer, 2010: 101">>
<<footnotes "4" "Ibid., 13">>
<<footnotes "5" "Ibid., 9">>
<<footnotes "6" "Husserl, Edmund. //Ideas Pertaining to a Pure Phenomenology and to a Phenomenological Philosophy//. The Hague: M. Nijhoff, 1980: 418">>
<<footnotes "7" "Zahavi, Dan. //Husserl's Phenomenology//. Stanford, Calif: Stanford University Press, 2003: 74">>
<<footnotes "8" "Ibid., 110">>
<<footnotes "9" "Ibid., 110-111">>
<<footnotes "10" "Hopps, Walter. “Phenomenology and Fallibility.” //Husserl Studies //25, no. 1 (2009-04-01): 4">>
<<footnotes "11" "Heffernan, George. “On Husserl’s Remark That ‘‘[s]elbst Eine Sich Als Apodiktisch Ausgebende Evidenz Kann Sich Als Ta¨uSchung Enthu¨ Llen …’’ (xvii 164 Does the Phenomenological Method Yield Any Epistemic Infallibility?: 32–33).” //Husserl Studies// 25, no. 1 (2009-04-01): 22">>
<<footnotes "12" "Hopps, Walter. “Phenomenology and Fallibility.” //Husserl Studies// 25, no. 1 (2009-04-01): 2">>


-----------------------------

''Bibliography and Works Cited''

Bell, David Andrew. //Husserl//. London: Routledge, 1990.

Centrone, Stefania.// Logic and Philosophy of Mathematics in the Early Husserl//. Dordrecht: Springer, 2010

Heffernan, George. “On Husserl’s Remark That ‘‘[s]elbst Eine Sich Als Apodiktisch Ausgebende Evidenz Kann Sich Als Ta¨uSchung Enthu¨ Llen …’’ (xvii 164 Does the Phenomenological Method Yield Any Epistemic Infallibility?: 32–33).”// Husserl Studies// 25, no. 1 (2009-04-01): 15-43

Hopps, Walter. “Phenomenology and Fallibility.” //Husserl Studies// 25, no. 1 (2009-04-01): 1-14

Husserl, Edmund. //Ideas Pertaining to a Pure Phenomenology and to a Phenomenological Philosophy//. The Hague: M. Nijhoff, 1980

Smith, Barry, and David Woodruff Smith. //The Cambridge Companion to Husserl//. Cambridge: Cambridge University Press, 1995.

Tito, Johanna Maria. //Logic in the Husserlian Context//. Evanston, Ill: Northwestern University Press, 1990.

Zahavi, Dan. //Husserl's Phenomenology//. Stanford, Calif: Stanford University Press, 2003
''ABSTRACT''

In this paper, I examine two standard theories of intellectual property, voice criticisms of each theory from within their own perspectives, and offer an alternative approach to intellectual property. In the first chapter, I explicate Locke’s original property theory and provide a modern account of Lockean intellectual property as an extension of the original theory. I argue this extension is not compatible with Locke’s original thought on property rights. In the second chapter, I dissect the mainstream economic approach to intellectual property, an approach which employs utilitarianism to justify the intellectual property regime of first world, western nations. I argue that this mainstream utilitarian economic approach fails to satisfy the principle of utility. Lastly, I offer a sketch of an alternative theory or perspective on intellectual property based on the notion of human flourishing. I argue that our obligations to develop and use our minds are so extensive that exclusive claim-type intellectual property rights are not possible. 

''CHAPTER 1. - LOCKEAN INTELLECTUAL PROPERTY THEORY''

''1.1 - Introduction''

In this chapter, I will outline Locke’s property theory, explain and distinguish various components of Lockean intellectual property theory, and voice criticisms of Lockean intellectual property theory from a Lockean perspective. I hope to show that extensions of Locke’s account to make sense of intellectual property can’t actually be very Lockean, and show where and why these extensions lack justification and compatibility with Locke’s original approach to property rights.

Locke’s property theory was originally and primarily concerned with ownership of land, water, and natural resources, but over time his interpreters have extended it to include all physical and tangible objects. Intellectual property theories, a topic about which Locke never directly writes, are very commonly made on quasi-Lockean grounds. Lockean intellectual property theorists wish contend to extend Locke’s property theory from the material realm to the immaterial realm, as they find these realms somewhat parallel.<<ref "1">> As Tom Palmer explains it, “intellectual property rights can be justified as ‘piggy-back’ rights, logical extensions of the right to own and control tangible objects.”<<ref "2">>

What is intellectual property? There is the legal aspect and a more purely philosophical aspect. In law, intellectual property is a set of loosely connected legal policies or doctrines governing the ownership, use, and distribution of abstract and intangible objects and their corresponding physical manifestations.<<ref "3">> There are separate laws concerning copyrights, patents, trademarks, and trade secrets. These separate laws are grouped together and referred to as intellectual property law because they share in common the regulation of immaterial objects and their physical manifestations. In philosophy, we justify or criticize these laws by providing the unifying, universal ethical rules for intellectual property, at least a thin view of the metaphysics underlying these intangible objects, and the mechanics for the acquisition and transfer of these properties. It is on the philosophical side of intellectual property that Locke’s property theory, which was originally concerned with only the material world, has been extended to the immaterial. 

The initial objects of intellectual property, namely ideas, designs, concepts, and models, have special characteristics because they are intangible. Unlike physical objects, which are subject to physical laws like entropy and conservation of energy, intellectual objects cannot be depleted or degraded. This brings about some interesting characteristics. For example, intellectual objects are non-rivalrous, meaning one person can consume an intellectual object without diminishing any other person’s ability to consume that object.<<ref "4">> Further, because intellectual objects are non-rivalrous, the economic notion of scarcity does not apply to them.

There are, perhaps, other special characteristics of intellectual objects which are less clearly understood or not agreed upon, but are still vital for creating, interpreting, or critiquing an intellectual property theory. For instance, we must consider whether or not intellectual objects predate our work in coming to realize them. If they exist (however it is they might exist) before we can recognize their existence, then the sort of work which enables us to realize intellectual objects results in discovery.  If intellectual objects do not, however, predate our work in coming to realize them, then perhaps we might say they come into existence because we created them. This kind of metaphysical issue does not seem be as problematic for physical objects, where we may have stronger and more stable intuitions about the discovery and creation of physical objects. The difference between discovering and creating intellectual objects may have major implications for a Lockean intellectual property theory.<<ref "5">> 

Lastly, we must question whether or not one can modify or alter intellectual objects. It is obvious to us how physical objects are modifiable, but it is far less clear if and how intellectual objects can be altered. This difference may stifle or hinder our ability to parallel physical objects to intellectual objects, possibly preventing a viable extension of Lockean property theory to the immaterial. If modifiability (such as adding value) is a necessary condition to acquiring an object as property, then this special characteristic of intellectual objects will be a threat to the acquisition of intellectual property. 

We should keep these special characteristic in mind, as they are part of the crux of the debate between paralleling material objects and immaterial objects, the necessary link for extending Lockean property theory to include intellectual property rights.

''1.2 - Locke’s General Theory of Property''

The primary component of Locke’s original property theory is the claim that people own themselves. From this claim, Locke arrives at the conclusion that people are responsible for their labor, they own their labor, and they “have a natural right of entitlement to the fruits of their labor.”<<ref "6">> This is one of the less controversial components in Locke’s original theory, and arguably the grounds upon which other components of this original theory rest. Assuming we satisfy whatever preconditions are set out, Locke believes the acquisition of previously unowned property derives from the ownership of the fruits of our labor; the ownership of the fruits of our labor is derived from the ownership of our labor; and, the ownership of our labor is derived from our self-ownership. Locke’s chain of derivative ownership satisfies certain instincts we have about the nature of property and the results of our self-ownership.

Another component of Locke’s theory is the notion that a person acquires property rights to an unowned object by mixing his or her labor with it. Locke claims, “As much land as a man tills, plants, improves, cultivates, and can use the product of, so much is his property. He by his labour does, as it were, inclose it from the common.”<<ref "7">> The labor-mixing component is more controversial than the self-ownership component. Labor-mixing is a complex problem, and Locke did not develop a full account of it for us. The precise nature of labor-mixing (and its various problems) is beyond the scope of this paper, but it is an issue which must be considered in evaluating any intellectual property extensions developed with the labor-mixing component in mind.

Another component seems to arise out of the labor-mixing theory, namely the value-adding condition. From the quote above, words and phrases such “improve” and “cultivate” and “use the product of” hint at additional conditions for property acquisition. The value-adding component of the theory is contentious and fraught with problems. What does it even mean to add value to an object? Locke does not leave us with many clues to clarify the nature of value-adding nor does he provide us a clear explanation of the priority or necessity of the component to his property theory. If an intellectual property extension is founded upon a Lockean interpretation including this component, that extension must provide an account for how intellectual labor adds value to its corresponding objects.

There remains one other crucial piece to Locke’s property theory, what Robert Nozick has dubbed “the Lockean proviso,” which is the last condition for acquisition. Locke explains: 

<<<
Nor was this appropriation of any parcel of land, by improving it, any prejudice to any other man, since there was still enough, and as good left; and more than the yet unprovided could use.  So that, in effect, there was never the less left for others because of his inclosure for himself: for he that leaves as much as another can make use of, does as good as take nothing at all. No body could think himself injured by the drinking of another man, though he took a good draught, who had a whole river of the same water left him to quench his thirst: and the case of land and water, where there is enough of both, is perfectly the same.<<ref "8">>
<<<

This is a powerful, limiting condition for property acquisition. The public good is the core priority of the proviso. Potential acquisitions which would violate the public good (what exactly counts as the public good isn’t clear) are disqualified from acquisition by the proviso. The “still enough” clause is potent, as it precludes monopolies and mass-ownership of resources which may lead to undue injury. To own the entire river, and assuming this river was the only resource of fresh water, would prevent others from being able to quench their thirsts (as they lack the rights to the river). This kind of monopoly, or even an oligarchy by which a limited number of people together monopolize a resource, would injure others because they no longer have access to that which is necessary for life.

We might be tempted to think of Lockean property rights as operating in a kind of vacuum where we need not really consider how property acquisitions affect the people around us. As we can see, Lockean property theory is not separable from substantive considerations about the public good and human welfare, as well as the context in which a potential acquisition is to be made. 
The Lockean proviso can be very radical, and it serves as a serious wild-card factor for this property theory. The proviso is clearly against ‘company towns’ in which the few actually own everything, and workers are merely ‘loaned’ residence, land, etc. People have a right to own enough to subsist (maybe even more). If Lockean property theory were correctly applied today, ownership rights would shift dramatically. Clearly, very few people actually own the things which are required to live life independently. By the proviso, we would need to significantly redistribute properties so that each person owned what was required to live life independently. Parallels between material objects and immaterial objects are subject to the proviso. In order to successfully extend general Lockean property theory (which deals in physical objects) to an intellectual property theory, that extension must satisfy the proviso. 

Each of the components has their own set of associated problems and interpretations. Not every Lockean property theorist will buy into all the components I’ve listed, nor is there agreement upon how exactly each component is defined and structured. Consequently, Locke’s theory has ambiguities and can be developed in numerous ways.

We build extensions upon the foundation of these various components of the original Lockean property theory, namely self-ownership, labor-mixing theory, value-adding theory, and the proviso.

''1.3 - The Intellectual Property Extension of Locke’s General Theory''

One of the underpinning claims of Lockean intellectual property theory, a claim which appears to enable an extension of modern interpretations of Lockean physical property theory, is the notion that the fruits of thought, design, engineering, and other intellectual labors belong to the laborer. Lockean intellectual property theorists believe this notion of physical labor and physical property acquisition extends nicely into the realm of intellectual labor and intellectual property acquisition.<<ref "9">> In the general Lockean property theory, these justifications substantiate why one acquires an unowned physical object through mixing physical labor with the object. In the intellectual property extension of this general Lockean theory, the Lockean intellectual property theorists believe these justifications also substantiate why one acquires intellectual property rights through intellectual labor.<<ref "10">>

What exactly are the fruits of intellectual labors? At first glance, it would seem as though intellectual objects are the fruits of intellectual labor. These abstract ideas and intellectual objects are intangible, immaterial things which may actually be the fruits of intellectual labor, but the intellectual property theorist must demonstrate why this type of fruit is the sort which can be owned. It is not immediately obvious that one can own such objects.

A general claim that “one’s intellectual labor should entitle one to have a natural property right in the finished product of that work, such as a novel, a computer program, or a musical composition” is compelling to many people.<<ref "11">> The claim, however, is ambiguous. It is not clear that the intellectual commons is parallel to the commons of the physical aspects of reality. 

Are we enclosing intellectual objects or the tangible expressions (the physical manifestations or representations) of those objects ‘from the commons’?<<ref "12">> It looks as if the extension of Locke’s account of property could be developed in two different ways. The strong enclosing thesis is claim that we enclose the intellectual objects themselves from the commons (this is the primitive view). The weak enclosing thesis is claim that we enclose particular physical expressions of intellectual objects from the commons, and yet somehow we gain control over access to the corresponding intellectual objects, as well.

''1.4 - The Strong Enclosing Thesis''

If we hold the strong enclosing thesis and the discovery claim, then intellectual objects are directly owned by their discoverer, e.g. algorithms, mathematical truths, and scientific notions would belong to their discoverers. If we aren’t creating intellectual objects, but only discovering them, it does not appear as if Locke’s theory would support our owning them, as we did not really mix our labor in them or add value to them. Remember, Lockean labor-mixing requires that we have added value to the object. Intellectual objects are unmodifiable and invariable – they cannot be altered. One cannot add value to these intellectual objects as one can add value to physical objects. Since intellectual labor cannot add value to intellectual objects, intellectual labor does not qualify as Lockean labor-mixing, the only sort of labor-mixing which results in legitimate Lockean property acquisition.

Because of this, it seems as if the strong enclosing may stand on firmer ground if we understand the intellectual objects to have been created by their owners. If we think about intellectual property in terms of adding value, a reasonable component to consider in this case, at first glance it appears that such creation can add value to the universe on this view.  Unfortunately, the adding value condition in Lockean thought really seems to be found in a certain type of labor-mixing which is concerned with transformation of present objects into a new object. This type of intellectual object creation does not really parallel any kind of labor-mixing in the physical world. When dealing in physical properties, there is a story we can tell about how physical objects were transformed (with value added) into new physical objects. What is unclear is how a similar story could be told for intellectual objects. The mechanics in the general Lockean property theory, which are concerned with physical objects, do not seem parallelable to the realm of intellectual objects. This is a serious problem for the combination of a creation view and the strong enclosing thesis. 

Furthermore, the Lockean proviso likely pushes us even further away from the strong enclosing thesis. For example, the public good would be deeply harmed if we were to recognize the ownership of mathematical truths. It would be difficult (perhaps even impossible) to function in life without implicitly or explicitly using math. How can we live if the rightful owner of a fundamental and vital mathematical formula (e.g. 1+1=2) does not provide consent for the rest of us to use it? A Lockean property right, when granted, is profoundly strong, and it is for this reason that the proviso is there to make sure we can live with the rights that are actually granted. The problem identified within this math example would apply to many other intellectual objects as well. Perhaps not all intellectual objects activate the proviso’s protection of the public good, but it seems as though a significant portion of intellectual objects, particularly those most important to living a human life, are protected from hypothetical acquisition by the proviso.

The strong enclosing thesis has also been criticized by Kai Kimppa who explains:

<<<
The reason ownership is needed is that material resources are scarce, and thus everyone cannot necessarily own everything they would want to. This does not hold true for the immaterial. The immaterial is unlimited, and everyone can own as much as they want to at the same time. No one is deprived of ownership in what he or she has if someone else owns the same immaterial as well…Locke needed the material to be divided amongst people because it can not be owned by many at once…the immaterial need not be owned as it can be used by as many as have a need for it.<<ref "13">>
<<<

This criticism points out why we cannot parallel the material and immaterial realms. The non-rivalrous feature of intellectual objects is precisely why we don’t need a property theory for them. Locke’s theory does not favor the ownership of intellectual objects. Because intellectual objects are non-rivalrous, they do not meet the conditions for the sort of objects for which we require a property theory. While Locke would agree that you can own a CD, the physical instance or manifestation of an intellectual object(s), he would not agree that you could own the intangible, intellectual objects represented or manifested on the CD. Locke would not have favored the strong enclosing thesis, but he could, perhaps, agree to the weak enclosing thesis.

''1.5 - The Weak Enclosing Thesis''

Although the strong enclosing thesis may be the initial and primitive view, a temptation for Lockean intellectual property advocates, enough problems emerge from the various Lockean interpretations that the weak enclosing seems to be the more common view to hold. Instead of directly owning abstract intellectual objects, one might argue that ethical rights (and, subsequently, legal rights) regulate material expressions. The weak enclosing thesis takes this path. By regulating material expressions, granting creators or discoverers a set of rights to material expression, we somehow effectively bring about a kind of ownership to the intellectual objects which correspond to these material expressions.<<ref "14">>

A Lockean intellectual property theorist holding the weak enclosing thesis will agree that there is no direct intellectual property ownership, but instead will claim there is an indirect ownership of intellectual property. The pseudo-ownership claim performs the conceptual heavy-lifting in the weak enclosing thesis. This is the claim that we can get at the indirect pseudo-ownership of intangible, intellectual objects by directly controlling all of the various possible future physical manifestations or expressions of an intellectual object which happen to be similar enough and related to the original creation or invention.<<ref "15">> There is no direct ownership of an intellectual object on this view, but indirectly the regulation and direct physical property right to any possible physical manifestation of an intellectual object entails a sort of indirect pseudo-ownership over that intellectual object. 

While the initial objects of intellectual property are the intangible, intellectual objects, by the pseudo-ownership claim, it is actually the corresponding expressions which are at the heart of Lockean intellectual property theory. The thinking is that by extending the physical Lockean property theory far enough, indirectly regulating intellectual objects, we can produce a kind of Lockean intellectual property theory. Technically speaking, since the intellectual object is not owned on this view, if there was a way to get at intellectual objects without producing, using, or distributing corresponding physical expressions, we would not be violating any weak enclosing thesis property rights. In practice, however, it appears as though indirect ownership results in the same consequences as direct ownership of an intellectual object.

When the electronic music duo Daft Punk produces an instrumental song, they are essentially discovering or creating some abstract intellectual object. The physical expression or manifestation of this original intellectual object might be a series of 0’s and 1’s on a CD or hard drive, or it may be recorded on analog cassette tapes, or it may be written down on paper in traditional music notation. Daft Punk directly owns this physical object. But, by the pseudo-ownership claim, they acquire an indirect intellectual property right to this original intellectual object. They don’t directly own the intellectual object per se, but they have the exclusive rights to produce, use, or distribute expressions of that intellectual object. This right is not over the intellectual object, but rather a right over all current and future possible expressions of that object.

Vitally, Daft Punk’s intellectual property rights indirectly protect not just one very specific intellectual object (the original), but in fact a set of them, a set of ideas which are close enough in identity for us to call them roughly the same. In essence, we are claiming that by directly discovering or creating the original intellectual object, Daft Punk also indirectly discovers or creates a set of similar intellectual objects. Exactly how similar the members of the set must be in order to maintain membership is not an exact science worked out by intellectual property theorists, legislators, or judges (they really should provide an account or heuristic device in this day and age). Daft punk does not directly own this set of ideas per se, but they have the exclusive rights to produce, use, or distribute expressions of any member of this set of intellectual objects.

Excepting expressions of the original intellectual object, the manifestation or expressions of any member of this set of intellectual objects are derivative works. By producing the original physical manifestation, Daft Punk generates the indirect intellectual property right to a corresponding set of intellectual objects. Importantly, Daft Punk directly controls and owns the current and future expressions, essentially derivatives and duplicates of the original expression, of any member of this set of intellectual objects. If I were to produce, use, and/or distribute my own rendition of this Daft Punk song, which would certainly be an expression of one of the abstract objects in this arbitrarily large set which Daft Punk discovered or created, I would be violating their right of direct ownership of all possible expressions or manifestations of the set of these intellectual objects. 

''1.6 - Critique of the Weak Enclosing Thesis''

First, it is unclear how one comes to directly own future expressions – physical objects which do not yet exist. This does not parallel the general Lockean property theory at all. Why should we make the leap made in the pseudo-ownership claim of the weak enclosing thesis? A Lockean intellectual property theory which claims agents can own future objects isn’t in line with the original thinking we see in the general Lockean property theory.

Unfortunately, the weak enclosing thesis isn’t really an intellectual property theory at all. On the weak enclosing thesis, ownership is concerned with material objects, and despite this set of objects being related to intellectual objects, no headway has been made into establishing a proper intellectual property theory. Extending the general Lockean property theory with the weak enclosing thesis does not actually extend the type of objects which can be owned -  only tangible items, including the particular expressions of intellectual objects, can be owned. Nothing abstract or intangible is ever owned or protected. This doesn’t even sound like an intellectual property theory – it really functions as an unnecessary and incompatible extension of the extended physical property theory. The extended Lockean property theory can already make sense of the physical property rights, including rights to manifestations or expressions of intellectual objects. 

If it is true that one cannot own intellectual objects, but rather only the expression of those intellectual objects, then it seems possible to create new (even if identical to other) expressions of intellectual objects without violating the so-called intellectual property rights of other expression-holders. That is, there may be multiple expressions of one intellectual object, and my rights to expression-A do not negate your rights to expression-B. Moreover, we all have “enough of” and “as good as” left over for further expressions. If this instinct is correct, then Lockean intellectual property theories and laws which employ the weak enclosing thesis are untenable. 

To put it another way, you may take a tree, chop it down, shape it into lumber, build a chair, an you come to own this chair by mixing your labor with its ingredients. It would be easy to show that you’ve violated the exclusivity rights derived from the pseudo-ownership claim. Surely, someone had to think of and build the chair - there is a form and an idea of a chair – it is an invention. Yet, even Lockean intellectual property theorists are not willing to attribute ownership of all possible expressions of the idea of a chair to the inventor. They don’t wish to apply the pseudo-ownership claim in this case, and instead we apply regular Lockean property theory. The next day, your neighbor is fully within her rights to chop down a tree, and so on, and build her own chair. She has not violated your rights to your chair, nor have either of you violated the first chair-creator’s rights to his chair. 

Why should any other invention or creation which corresponds to an intellectual object be different? For example, you may write a piece a music in clay tablets, and by even traditional Lockean property rights, you already own that tablet, as you have mixed you labor with ingredients (some you already owned and some you perhaps didn’t before mixing). You’ve added value to the clay by forming it into a tablet and further by writing music notation upon it. Why can I not do the exact same? The rewards of my labor in building either a chair or a musical clay tablet are the expressions themselves. The reward of creation, at least on the Lockean view, is not one’s ability to monopolize and preclude others from building identical or similar expressions for themselves. My production of a thing, my mixing of my labor with ingredients, does not preclude others from doing the same, even identical action. 

Furthermore, the weak enclosing thesis may be contrary to the Lockean proviso. Even if we were to accept the validity of indirect ownership and monopolies over intellectual object, the proviso would be activated, preventing the acquisitions which would lead to the indirect ownership of the most important intellectual objects. It is difficult to know which intellectual objects are protected by the proviso. At the minimum, appropriate interpretations will try to isolate which intellectual objects are necessary for subsistence, well-being, and ‘good and plenty’ conditions for the public in implementing the proviso. The chair example is a useful marker for considering this minimum protected by the proviso. The chair is not obviously necessary for subsistence, and yet it is still, by and large, protected – probably by the proviso. The Lockean proviso likely provides protection from indirect ownership to an expansive set of intellectual objects. 

''1.7 - Conclusion''

In this chapter, we’ve delved into so-called Lockean intellectual property theory. The notion that the material realm is parallel to the immaterial realm appears false. It does not seem as if a direct ownership of intellectual objects (as in the strong enclosing thesis) is possible. Indirect ownership of intellectual objects (as in the weak enclosing thesis) does not appear to be an acceptable or consistent extension of Lockean property theory, either. There are gaps in the so-called Lockean intellectual property theory which have not been justified. 

It appears as though Locke’s argument does not motivate intellectual property at all. It is fine that a so-called Lockean intellectual property theory is not purely Lockean, but advocates must still explain and justify their theory. Since they have not justified their stance on purely Lockean grounds, they must provide some other basis or foundation before one can accept their theory. 
In the next chapter, we will tackle the primary argument which has become hybridized with Lockean mechanics: utilitarian economic intellectual property theory. 

''CHAPTER 2. – UTILITARIAN ECONOMIC THEORY OF INTELLECTUAL PROPERTY''

''2.1 - Introduction and Scope''

This chapter provides an examination of the mainstream utilitarian economic theory of intellectual property rights employed by most first world, western nations. This theory claims that governments should assign strong, artificial intellectual property rights to creators, inventors, and discoverers and intensely enforce these rights against violators. This practice of assigning and enforcing strong intellectual property rights is believed to maximize the incentive to create, innovate, and discover. It is assumed that by maximizing these incentives, we will maximize the quality and quantity of social goods generated. In turn, maximizing the quality and quantity of social goods is believed to be a necessary condition for satisfying the principle of utility.

This chapter will limit its scope to the economic views (of which there are many, but notably Chicago-style, free market economics) which use utilitarian arguments to justify either the status quo or even the expansion of current intellectual property rights of inventors, creators, and discoverers in predominantly American and European intellectual property policies. Essentially, I’m examining a monolithized version of the views and perspectives of various groups and individuals in power, and I think this constructed theory represents the dominant intellectual property theory we face today. 

The mainstream theory should not be confused with utilitarian economic theories advocating diminished, but not eliminated, intellectual property rights. Diminishing intellectual property rights theories are neither mainstream nor applied in the economic and legal policies of first world, western nations. This chapter is a response to the intellectual property theory that is actually being applied in our society. Excepting a few diminishing IP rights theorists and the Pirate Party (a tiny, nearly powerless political minority), the general battle cry of American and European legislative, judicial, and corporate bodies has been one of preserving the status quo of intellectual property rights, if not escalating these rights (which we’ve seen in recent years). The theory and thought of those who are in power, both maintaining or seeking to expand the status quo, are what is being questioned in this paper.

Assuming certain side-constraints can be satisfied (such as not violating primary human rights, etc.), it seems acceptable that governments should regulate property acquisitions and transfers so as to maximally satisfy the principle of utility. I hope to demonstrate how the currently employed utilitarian economic theory of intellectual property actually fails to satisfy the principle of utility. 

''2.2 - Focusing on Incentives''

Does the mainstream utilitarian economic theory of intellectual property rights “live up” to the general utilitarian standard? First, we must consider the basic structure of the argument for the more common utilitarian economic theories of intellectual property:

#Assuming side-constraints that human rights are satisfied, society should adopt legal regimes or institutions if they are expected to yield the optimization of aggregate social welfare. 
#Legal Regime X, which does not violate fundamental human rights, is expected to generate the most incentive for the production and creation of intellectual works.
#Maximally incentivizing the production and creation of intellectual works contributes to the optimization of aggregate social welfare. 
#Therefore, Legal Regime X should be adopted.<<ref "16">>

The mainstream view believes a legal regime that provides authors, creators, and inventors with extensive intellectual property rights and control over their productions will fill in for “Legal Regime X” in the above argument. Essentially, Legal Regime X, on this view, is either the status quo or an expansion of current intellectual property right. Currently, the duration of federally regulated intellectual properties in the United States is as follows: a patent lasts from 14-22 years (depending on certain factors), and a copyright for the life of the creator plus 50-75 years (with a few rare exceptions, such as copyrighted government documents).<<ref "17">> Qualitatively, patents are the strongest type of intellectual property right, enabling very strict exclusivity rights defined both by litigation and a patent granting institution. Copyright also has extensive exclusivity rights, but within a limited scope defined by the results of litigation.  The set of objects which can be copyrighted is narrower than patents and there are fair use exceptions.<<ref "18">> These are example qualities and durations of intellectual property rights found in the status quo. We must consider whether or not this regime really satisfies the conditions in the basic argument above.

Notice that one may provide an argument in favor of intellectual property rights similar to the mainstream view without requiring rights which last the same duration or which carry the same quality of rights. For example, diminishing intellectual property rights theories claim Legal Regime X is a legal regime that provides authors, creators, and inventors with more limited intellectual property rights and control over their productions. If they are correct, and utility is maximized via less extensive (yet still extant) intellectual property rights, then the mainstream view does not live up to its general utilitarian standard. 

One fallacious argument for extensive intellectual property rights commonly offered by primitive utilitarian economists is that without intellectual property rights content creation and innovation will virtually disappear.<<ref "19">>  This is derived from a common assumption in primitive utilitarian economics that altruism does not exist – they assume human nature rules out virtually all altruistic actions, including creating and innovating for reasons that are not directly in your self-interest. But this is clearly an implausible view. Whatever effects would accompany changes to the current intellectual property regime, innovation and content creation won’t simply disappear. If that were true, then there would have been no intellectual production prior to the adoption of the current regime. 

More sophisticated utilitarian economists accept that there are other motivations for content creation and innovation beyond the monopolization of profits. Consider the Free Software movement. Within this movement, numerous authors, creators, and inventors of scripts, programs and devices demonstrate that significant innovation and content are created without economic motivation. Many choose to copyright and/or patent via GNU, Creative Commons, or the Apache licensing systems; others totally forgo involvement in the copyright/patenting process. There are people who genuinely give content away for no other reason than because it is a good thing to do. People innovate and create, essentially promoting the greater social welfare, without seeking or needing financial gain or monopolized control over intellectual objects. Artificial incentivization is not necessarily required.

The real question is this: Would there be less content creation and innovation, or even more specifically, the incentive to do these things, without the mainstream utilitarian economic intellectual property rights? It depends. If we did not replace it with anything, then it looks as though there could be less content creation and innovation. But if we replaced the intellectual property rights system with an alternative reward system, we still have artificially generated incentive to create content and innovate.  Some economists, for example, argue that we can just as effectively generate these incentives “through private patronage by tax-exempt foundations, universities, and the like, or even by government support.”<<ref "20">> 

Further, a number of economists have explained the efficacy of alternative systems. For example, one study suggests intellectual property rights are strictly inferior to at least hybridized incentive systems (made from elements of both intellectual property and reward systems) and possibly inferior to well-made reward systems in producing maximum incentives and social advantages.<<ref "21">> 

Note that we already some successful forms of the reward system in place in the form of public research (including at many universities), and this reward system could be expanded to be the exclusive option. A rewards system may very well be the appropriate Legal Regime X. Incentivization can be handled without resorting to an intellectual property system. What remains is a choice between two general systems. In an intellectual property system, intellectual objects are monopolized, and the utility generated by these objects is bottlenecked by the consent (which must be bought) of monopoly and oligopoly holders. In a rewards system, access to intellectual objects is completely open, and utility generation is not bottlenecked; everyone who wants to benefit from and use intellectual objects is free to do so. Even if the incentivization of a rewards system was less effective than an intellectual property system (which isn’t even the case), the utility generated by the rewards system might be greater than the intellectual property system because of the difference in bottlenecks. 

Furthermore, without even trying to find Legal Regime X, we can consider whether or not the general argument is even correctly postulated. Premise 3 (the claim that maximally incentivizing the production and creation of intellectual works contributes to the optimization of aggregate social welfare) is not obviously true. Maximizing incentive to produce and create intellectual properties does not obviously lead to maximizing aggregate social welfare. It may be safe to assume that some form of artificial incentivization is necessary for satisfying the principle of utility, but it isn’t clear that the sort of system which maximizes incentives is really going to lead to maximizing utility. 

Unfortunately, incentivization issues have dominated the general utilitarian economics deliberations, and distributive concerns have taken a back seat in many utilitarian approaches (with some notable exceptions like Peter Singer). The costs of incentivizing, particularly in using an intellectual property system, may be much greater than is realized, and the end distribution of goods and the sum total utility in the world may be far lower than we’ve realized. It may be that the focus on incentivization sometimes blinds us to the larger issues at stake. 

''2.3 - Globalization and Utilitarian Distributions''

When we set aside incentivization, at least for the moment, and instead focus more upon the underlying utility rationale, it seems that the policies which have shaped the status quo are not living up the utilitarian standard of welfare maximization. Today’s policies have not distributed social goods evenly enough across the global population.<<ref "22">> Wealth, including intellectual properties and the industries built on these intellectual properties, is largely held by a tiny minority. This wealth inequality is in no small part a product of our current intellectual property rights. 

Given the principle of diminishing marginal utility, the intuition is that utilitarian distributions should be fairly even, or at the very least, these distributions should likely be concerned with those who have the least. There are diminishing utility returns for each subsequent unit of a social good. The first $10,000 of wealth will yield more utility than the next $10,000 of wealth. Surely, the resources necessary to survive will produce far more utility for an agent than the same amount of resources added to wealth of someone who already has more than enough to survive. By this principle of diminishing returns, you will likely get the most utility by maximizing the wealth of the poorest. These diminishing returns are the heart of calculating the sum utility of any distribution of goods, and it is one reason why utilitarian economic thought cannot justify the status quo.

Having a small minority living in abundance while most live far below that standard, many in abject poverty, is difficult to defend from a utilitarian point of view.<<ref "23">> Economic regimes which claim to be utilitarian have the work of explaining and promoting wealth inequality cut out for them. The distribution generated from the current intellectual property system is not utility maximizing. Wealth inequality, in no small part based on intellectual property distribution, is simply too great. 

Economists may argue that wealth inequalities aren’t necessarily bad because wealth at the top eventually ‘trickles down’ to the global poor – i.e. the poor have the best distribution of all economic policies when we implement the (Chicago-style) free market and extensive intellectual property rights.<<ref "24">> This claim, however, is extremely contentious. There are many schools of economic thought which outright reject this laissez-faire, libertarian approach. The idea that vast wealth inequality is not utility maximizing is not a new one. The global poor are not receiving as much as they could under our current economic system. I contend there are better distributions of goods, including a distribution of intellectual property goods which yield more utility, available to us.  Our mainstream, extensive intellectual property regime which is currently place is a barrier to maximizing global utility. 

Unfortunately, the globality of utility is often forgotten by economists who are seeking to improve their own nation’s utility, even at the cost of the sum total global utility. Somehow, many economists seek to perform utility calculations at a national level. Utility is global, not nationalistic. <<ref "25">> This changes the practical details of economics and the legal issues at stake in a big way. The sorts of laws, such as intellectual property laws, which maximize a nation’s utility are different from the sorts of laws necessary to maximize global utility. Rich nations and wealthy people are going to need to sacrifice, giving to the poor and building infrastructure for the deprived. We need laws, including those which govern intellectual objects, which force us to give to the poor, if we truly wish to see utility maximized.

Given the nationalistic approach to utility, it is easy to see how intellectual property rights are somehow acceptable and not obviously causing so much harm within first world nations. Most of the damage is dealt to third world nations. From a global perspective, it becomes far more obvious why mainstream utilitarian economic intellectual property rights, rights conjured by first world nations, are harmful and not maximizing (global) utility.

Pharmaceuticals are the classic example of this harm. In a first world nation, a significant portion of the population (particularly in first world nations other than the United States) can afford the prices of medicines set by those who control the intellectual property rights. This is not true in third world nations. If you are making $2 a day, you can’t buy medicine with prices artificially raised to $50 for a month’s dosage, a price set by the monopoly over the intellectual property rights to a medicine. An economist will argue the efficient market hypothesis is supposed to make sense of this, explaining that price models will take into account what third world nations can pay. Unfortunately, even with drastic price reductions, many medicines won’t provide profit margins in the poorest nations. 

Economists might argue that if it is so important that we help these people, then we shouldn’t punish intellectual property owners; rather, in order to maintain their incentives, we must instead use first world national public funds to buy products from these monopoly controllers and outright give the products to third world nations. We’d have to trust that monopolies would not price gouge, which would create a gigantic inefficiency in the market (that’s a serious flaw in granting intellectual property rights). Even if intellectual property holders didn’t price gouge, this middleman process likely forms another (although slighter) market inefficiency. Essentially, public funding of this sort is just an inefficient kind of the reward system. You would see higher market efficiency in a straight-forward reward system, which would then subsequently generate higher social utility; but to do this, would necessitate relinquishing the current intellectual property system.

Setting incentives aside, the fundamental problem with intellectual property rights is the formation of monopolies. Monopolies are innately inefficient for the market. Poor distributions result from monopolies. A rewards system does not form monopolies, it does not have the same degree of inefficiencies we see in the current intellectual property system, and we’d see better distributions through a rewards system. 

If prices are kept artificially high, then demand (people willing to pay that price) will be low; subsequently, the utility produced will be low. If you choose not to allow monopolies of intellectual property objects, prices will fall exponentially, demand and the fulfillment of that demand will rise dramatically, and utility will be increased. As for the overall economy, my money is going to be spent. It doesn’t have to be spent inefficiently on goods that are artificially priced. 

In our current economic scheme, I legally have to pay for objects protected by intellectual property laws. I have finite and very limited resources, which in turn means I can only buy a very limited number of these objects. Obviously, I receive some amount of utility from each object, and because I can only buy a limited number, my potential utility is also limited.  An efficient, rational shopping strategy is currently the only legal way to maximize the utility benefit of my limited resources. Yet I am not generating nearly as much utility as I could if I had unlimited access to these objects. 

Duplication and distribution costs are virtually zero for a significant portion of objects currently protected by intellectual property laws. Prices to these goods are artificially higher than they would be in a natural market – that’s what the intellectual property law does: it creates monopolies which enable rights-holders to raise prices astronomically beyond marginal costs. The monopolization of intellectual property objects prevents society from realizing the benefits of a new digital, networked infrastructure in which duplication and distribution costs of these objects have plummeted. Old business models do not belong to this new infrastructure, nor do the laws which protect those monopolistic models. Society is being price-gouged, and utility is not being maximized.

The financial cost of artificially incentivizing innovation and creation will always be there. Do we wish to pay this cost in terms of highly abusable monopolies via an outmoded intellectual property system belonging to a time and place where duplication and distribution costs were generally a higher portion of total production costs? Or, alternatively, should we use other modes of artificially generating incentive, such as reward systems, which can produce the same degree of incentive for the same financial cost without the baggage of monopolization? It seems like the latter option generates more utility.

Consider the difference between the utility of 50 million people having a logic book on their shelf or computer to the utility of 5 billion people having a logic book on their shelf or computer – the difference in utility would be enormous.<<ref "26">> The major economic reason only 50 million people (or whatever the exact number might be) have a logic book on their shelf or computer is that demand is restricted by having a price, an artificially high price set by those who have a monopoly over its production, a monopoly granted by intellectual property rights. Without those intellectual property rights, prices would drop – the digital version would be virtually free and available to everyone with an internet connection, demand would certainly surge, and ownership rates would also rise. Imagine the utility to be gained for if all intellectual properties were released into the public domain. It wouldn’t be just copyrighted works, but patented as well, a key to technological innovation and economic mobility. The first world can give the proverbial “keys to the kingdom” to the rest of the world.<<ref "27">> This is the opportunity cost we forego, an alternative with substantially higher utility, in accepting and implementing the mainstream utilitarian economic theory intellectual property.  

''2.4 - The Prisoner’s Dilemma''

An additional, complicated aspect of distributions from a utilitarian economics perspective is the matter of how we employ predictive thinking in our models. Economists may see the distribution of goods as a gigantic prisoner’s dilemma. In this prisoner’s dilemma, multiple parties have the choice of whether or not to cooperate. As long as they all cooperate, even if it requires personal sacrifice, the highest sum total utility is attained. The problem, according to rational choice theory and an assumption of egoism, is that parties are predicted to not cooperate, and thus a lower total utility is achieved. 

The mainstream view might admit that, theoretically, a distribution of goods which generates more utility than our current intellectual property system is available in this prisoner’s dilemma, but practically, it is not really available to us because of our so-called rational selfishness and egoism. Utopia (the derogatory term for this option in the prisoner’s dilemma) is theoretically there for us, but practically it is not – too many people do evil things and that cycle is predicted to continue. The claim is that because humans are selfish egoists, any property system like socialism is morally unacceptable to pursue, as it does not, by our predictions, result in maximum utility. On this view, our current property rights system, including intellectual property rights, are the way to go.

But, notice, this system is chosen in virtue of the assumption of egoism. Economists assume altruism is not the rational choice. Selecting the selfish and egoist option in the prisoner’s dilemma seems to be the practical thing to do, perhaps even the moral thing to do, and thus we should design and use an intellectual property system which harnesses these predictions. The mainstream intellectual property system is thought to harness our predicted selfishness. Sadly, this is no longer about what we ought to do, but more about what we predict others will do. It does not give humanity the chance to do what is right. It is a game, a game in which I predict you will do what is wrong, and I do not respect your autonomy or ability to do otherwise, and I pre-emptively wrong you and others.

I remain unconvinced from a purely theoretical perspective that the intellectual property system is the result of properly employing the utilitarian model. It still may be the case that we are morally obligated to do something, to choose an action which hinges upon the synergy of others doing what is right, even if we can practically predict that other people will not do what they are morally obligated to do. If this is true, then clearly our obligations and rights are not about predicting how others will act (as in the case of the prisoner’s dilemma), but rather expecting how others should act. Consequently, it may be correct upon this very theoretical utilitarian view to not employ an intellectual property system, and if one is in place, perhaps we not obligated to obey intellectual property laws; rather, we may be obligated to pursue a type of weak socialism (a topic to which many people have become allergic without necessarily having done prior, reasonable reflection).

On this theoretical view, utility clearly selects a system which is far more utopic. Even if Utopia, or whatever is nearest to it, doesn’t come about, perhaps we are still bound to aim for it from the utilitarian perspective. If this is not true, and if we should use predictions (to what extent I do not know) to inform our normative policies, there are other serious problems for the mainstream theory. If you are unconvinced by the prisoner’s dilemma issue, the practical matter of enforcement may be yet another critique. 

''2.5 - Unenforceability''

Intellectual property rights, at least as they are granted in the current implementation of utilitarian economic theory, are not fully, and practically enforceable. We can have intellectual property laws on the books, and we can stop some infringement, but in a digital and globalized world, intellectual property rights are increasingly unenforceable. As we shall see, the issue of enforceability of intellectual property claims introduces great complexities for a utilitarian justification of intellectual property rights. 

Protecting physical property is far easier than protecting intellectual property. Fences, cages, buildings, safes, locks, physical access, transportation, and physical forensics are stable and effective means to protecting and enforcing physical property rights. Further, involving authorities in physical property theft is easy to explain and prove – it is kind of theft which we can somewhat easily make sense of in lawmaking, law enforcement, and judging law. Physical property rights are enforced fairly well. That doesn’t mean there isn’t any theft of physical goods, but seems as if we have a decent track record of maintaining the lion’s share of physical property rights at acceptable costs of enforcement.

Intellectual property, in contrast to physical property, is far more difficult to protect. Enforcing intellectual property rights is too often not possible. For example, imagine a person invented a power loom in England. No other country has one which is nearly as successful. The inventor can stop people from stealing the physical power looms themselves, but can they protect the intellectual property of this invention? Along comes Francis Cabot Lowell who travels to England, memorizes the schematics of this power loom, travels back to the United States and rebuilds from memory (with the help of a master mechanic) an identical power loom. He and everyone else like him are infringing on the inventor’s intellectual property rights to the power loom. No one could stop him. 

One side note: would we even want to stop Lowell? He is one of the fathers of the American industrial revolution. Other nations have their own fathers, many disregarding intellectual property rights. Isn’t infringement often necessary for improving the world? This scenario has been played out over and over (and over) in the history of intellectual property. It will continue. It is unstoppable. 

Consider another example: perhaps a person has a book published and printed. Printshops and bookstores have feasible, practical, and consistent means to protect the physical property rights to these physical copies of his book. Contrast these paper copies to the digital copies he also sells on Amazon.com. He’s taken the proper precautions, using Digital Rights Management (DRM) tools to attempt to stop piracy. The fact remains that in minutes, anyone can strip that DRM off a digital copy and anonymously distribute DRM-free copies of his book – infringing on his copyright. Digital media is pirated behind nearly impenetrable proxies with encryption to thwart packet shaping. There are too many clever people who are well-protected, using decentralized networks to distribute these infringed goods – infringement, even from those who have taken precautions, can’t be stopped. Even if he went so far as to not release/sell a digital copy for concerns of piracy, it wouldn’t help. A pirate can borrow a physical copy and spend an hour generating high-resolution scans of the book with an AI that translates text images into searchable ASCII (essentially reproducing the PDF the author has sitting on his hard drive). Enforcing these intellectual property rights, unlike physical property rights, is often impossible. Even where it is possible, it often isn’t feasible. The cost to intellectual property rights enforcement may be too high.

Even if one attempted to lock down society (let’s assume one somehow found a way to do it without violating human rights), it is very possible that intellectual property infringement is to some degree economically the better thing to do. There are studies and models which show that the costs of complete intellectual property infringement deterrence are not economically preferred.<<ref "28">> Infringement without guaranteed repercussion should be preferred from the enforcement perspective. Unfortunately, the mainstream view sees punishment for infringement as always being worth pursuing. Copious amounts of economic and legal resources are directed toward enforcing the utilitarian economic intellectual property rights in vain. Intellectual property rights enforcement is generally a waste of resources. Those resources should be put to better use; higher utility would be gained from not attempting to enforce what is essentially unenforceable. The solution is lowering the expected quality and duration of intellectual property rights, spending time and money enforcing only what is practical to enforce.

''2.6 - Market Inefficiencies and Barriers to Innovations from Intellectual Property Wars''

When it comes to the technology sector, a sub-economy historically dominated by intellectual property, we see a world in which intellectual properties (such as patents) are not doing the incentivization work we expect; rather they have been turned into bargaining chips in litigation. These bargaining chips are used to maintain an oligarchy of technology giants which monopolize the various regions of technological innovation space, largely preventing independent innovators from entering the market. 
Generally, technology giants are constantly violating each other’s intellectual property rights, but because each giant has a war chest of intellectual properties to levy against other giants, they stand in a litigation deadlock. Time and money are spent litigating rather than researching and developing. Patent wars slow down the innovation and creation of tech giants. The digital world is moving and changing very quickly, and our legal system is a barrier rather than a boon to innovation, even for giants.
Further, these intellectual property war chests are used to litigate (often unjustly) potential independent and smaller innovators out of the market. This oligarchy prevents the rapid change that we should be seeing from experts and inventors not employed by giants.

Google’s buyout of Motorola is a prime example of tactical patent hoarding used as defensive resources against other tech giants and as offensive tools against smaller companies. Would-be innovators are litigated out of the market. What is left is a market inefficiency of bargaining patents and litigation.<<ref "29">> Both the useless fighting amongst giants and the oligarchic, anti-trust practices against smaller competitors form major market inefficiencies, and limit the actual innovation and creation which takes place. 

Essentially, the intellectual property system we have engenders intellectual property wars, forming an obstruction to the innovation and creation we were expecting in sectors like technology. In turn, the utility principle is not being satisfied.
The innovations we do see today often exist in virtue of people ignoring (outright infringing, at times) intellectual property rights. 

The road of successful technology giants is paved with intellectual property infringement. Microsoft and Apple have a long history of it, from operating systems (Bill Gates clearly infringed upon Apple’s design), to hardware and interfaces (both companies and many others having infringed upon the innovations from Bell Labs), to devices like the touchpad (Bill Gates introduced one years before the iPad). This tradition continues between mobile device manufacturers and software producers. We see the same software, OS, and hardware mechanics at work in iPhones as we do in Android – they both have borrowed from each other. It is only by ignoring intellectual property rights that these devices have evolved so quickly.<<ref "30">> They could evolve even quicker if intellectual property did not exist. People will buy the device that implements an intellectual property (such as a patent) the best, regardless of who invented it. 

Patent wars are nothing new. The term dates back to at least to the 1920’s.<<ref "31">> Patent wars are becoming more and more prevalent, and more costly than before. This is not what was intended from intellectual property regimes, but it is the result. Intellectual property laws are highly susceptible to abuse. The rights we’ve artificially created are not doing the work we expect to them to do. Rather than incentivizing creation, they’ve pushed many who don’t have a billion dollar bankroll out of patent war-heavy markets because they can’t afford to litigate, even when justice would be on their side. As for the giants who can afford to litigate, it holds their creation and innovation back for years unless they simply continue to disregard intellectual property law. 

''2.7 - Conclusion''

I hoped to have provided doubts as to whether or not the mainstream utilitarian economic theory of intellectual property actually maximizes utility. The claim that the current intellectual property regime (or a regime which had even more extensive intellectual property rights) maximally encourages innovation or inevitably maximizes utility via innovation is extremely contentious. There are possibly alternative regimes which don’t include our current intellectual property rights which maximize incentive and utility. Further, this mainstream utilitarian economic theory appears to contribute the poverty and misery of the global poor. It is quite possible that abolishing intellectual property rights would immensely help the impoverished, and subsequently be a part of whatever economic regime actually maximizes utility. Lastly, the nature of intellectual property, in contrast to physical property, makes enforcement extremely difficult and results in inefficient use of resources. This is especially seen in the patent wars. 


''CHAPTER 3. – AN ALTERNATIVE INTELLECTUAL PROPERTY THEORY BASED ON HUMAN FLOURISHING''

''3.1 - Introduction''

This chapter is a sketch of an alternative theory or view of intellectual property based on neo-Aristotelian teleological and virtue concepts. The conclusions about intellectual property in this chapter will remain compatible with the conclusions I’ve drawn in the previous chapters, but will arrive at a similar perspective on intellectual property rights in a different way. This chapter is a sketch of a much larger project. I cannot explain or defend everything, but I hope to provide a loose framework and direction for this larger project, while pointing out major obstacles and important claims which require more explanation and justification.
 
I will offer a fairly traditional moral framework – not explicitly a virtue theory, but one with similar grounds. Within this framework I will argue for an obligation to intellectually flourish, which will be the source of particular intellectual property rights or lack thereof. 

''3.2 – Human Function and Flourishing''

The assumed framework for this chapter is a perfectionist, objective, and substantive account of the human good, our well-being, and excellence.<<ref "32">> I am not in a position to justify or even substantiate a complete account of the human good in this chapter. I rely upon teleological, aretaic, and eudaimonic concepts which I cannot wholly defend. Exactly all of what counts as human flourishing (eudaimonia) is not something I can flesh out in this mere chapter, but there are obvious examples of flourishing: nourishing ourselves, appropriately resting and sleeping, living as social creatures and citizens, and being sheltered. 

Various aspects of flourishing are less intuitive to some people. For the purpose of this chapter, which is concerned with reaching conclusions about intellectual property, I will assume and mostly focus upon the claim that being an excellent human specimen is largely predicated upon fulfilling our function as humans, a function deeply related to intellectual property.

One of the root assumptions of this chapter is that humans have a specific, shared, and species-wide function. In large part, I believe the fundamental, unchanging function of humans is the activity of thinking. Aristotle was basically right about this.<<ref "33">> We are thinking things–which is essential to who and what we are as humans. Humans exist to learn, to cultivate our minds, to ponder, to understand reality, to experience, to appreciate aesthetic beauty, to participate in political life and society, to read and watch and hear the ideas of others, to find truth, and to intellectually pursue whatever counts as being relevant and valuable. Our function is thinking, and that is the essence of being human. Fulfilling our function is a vital part of human flourishing or living well. Or one might say, following the influential work of Amartya Sen and Martha Nussbaum, that thinking is a fundamental human capability whose exercise is necessary for minimally decent human life.<<ref "34">>

I will refer to intellectual flourishing as fulfilling our function and living in accordance with reason. We might find such a perfectionist theory worrisome, in some ways. For instance, one might think we’ve boxed the human function in such a way that we lack variety or plurality of lives that can be said to be flourishing. Not everyone must fit a very specific cookie-cutter mold. There are topics about which all humans need to be literate and constantly engaging our minds (literature, math, politics, etc.). These are necessary intellectual realms. Not everyone, however, needs to learn to play a musical instrument or become a grandmaster chess player. Even music and chess, however, might sometimes be the only means to intellectual flourishing for someone. We must keep all avenues of intellectual flourishing open. Some people are suited to flourish intellectually in ways that others are not. 

Intellectual flourishing is one of the primary and necessary conditions for living well, but it is not the only condition. Human flourishing consists of some sort of balance between leading ethical lives, intellectual flourishing, and biologically thriving. The exact priority of each of these conditions to flourishing isn’t clear. It seems, however, that biologically thriving generally serves as a means to the other two, even if it is an end as well. Thinking and leading ethical lives (which may just be a subset of thinking and mental action) are primary. This line of thought is more or less aligned with Nussbaum’s approach and list of capabilities.<<ref "35">>

For one to attain eudaimonia, to maximally partake of the human good, to flourish as a human, and to live well, one must flourish intellectually. The good human life requires that we think and employ reason in the right ways, at the right times, about the right things, and to the right extent. Similar things can be said for the other conditions necessary for attaining eudaimonia. For instance, the good human life requires one to eat the right foods, in the right quantities, at the right times, and so on. 

These activities necessary for human flourishing are largely compatible with each other, often intertwined and deeply connected, and rarely at odds. There are, however, exceptions. For example, sometimes the ethical thing to do will require us to sacrifice our biological well-being. Such a sacrifice is morally right, but it does not lead to our own maximal human flourishing individually. 

Somehow we do not partake of the human good as much as we would have if we weren’t put in a position where we had to sacrifice our biological well-being. Human flourishing is not always accessible or practically available to us – sometimes it isn’t our fault that we aren’t flourishing.  Our well-being and the degree to which we partake of the human good is usually a mix between circumstances outside our control and some choices over which we do have control. Consider the following example.

Proper nourishment is a necessary condition for biologically thriving, and as such, it is a necessary condition for human flourishing. With respect to nourishment, a starving person in a third world nation is not living a good human life as effectively as a healthy, well-fed person who takes her vitamins in a first world nation.<<ref "36">> The starving person is eudaimonically impoverished; to some extent he isn’t flourishing as a human being because he isn’t biologically thriving. The well-fed person is a better human specimen in this respect. She isn’t a better human of her own volition (in large part) – rather, her flourishing and partaking of the human good is largely circumstantial. We must realize her choices about what are right and wrong are distinct from the degree to which she partakes of the human good. Circumstances, often outside our control, have a profound impact upon human flourishing. 

Being an excellent human and living the good human life likewise requires that we flourish intellectually. To not flourish intellectually is a supreme type of impoverishment. All else being equal, the man who knows algebra is a better human specimen than the man who doesn’t. Likewise, the woman who engages in systematic and disciplined thinking is living a better human life than the woman who does not engage in this activity. Humans who aren’t functioning as humans aren’t flourishing. This, of course, brings up worries. After all, do we really want classify one human being as intrinsically better than another, particularly when they had no choice in the matter?

Let us consider the case of a human with Down syndrome as a worrisome example for the eudaimonic model. A cognitively impaired human is not living the good life to the fullest extent. He lacks well-being to some degree. He cannot and does not completely partake of the human good. Since he has Down syndrome, he is not flourishing intellectually, and, therefore, he cannot fully achieve eudaimonia. I think we intuitively know this already – this is why sympathy and pity are appropriate responses toward a human with Down syndrome. Something vital is missing in the lives of the cognitively impaired.

The implications of the claim that such a person is not flourishing may cause us to cringe. All else being equal, this cognitively impaired human being is not living as well as a human who is cognitively functional. Again, assuming everything else is equal, somehow the cognitively functional man without Down syndrome is a better human specimen, leading a better human life, than the man with Down syndrome. Our impulse might be to deny such claims. Positing human inequalities, eudaimonic or otherwise, may lead us to draw false conclusions – talk of human supremacy has a very troubled past. The worry is that placing eudaimonic values on human lives, comparing each individual against an objective standard of the human good, while demonstrating that some humans are superior or more excellent than others, may somehow lead us to treat poor human specimens inhumanely and unethically. Such treatment, however, is not deducible from recognizing when, where, who, how and why various humans are better or worse human specimens, partaking of the human good in different degrees, than other humans. Eudaimonic inequality does not remove one’s fundamental human rights (or our duties to such people); as we shall see later in this chapter, eudaimonic inequality can actually bring with it many claim rights of the impoverished (to which others are obligated).

In examining the human good, we must define when, where, and to what extent a human is responsible for his or her lack of flourishing. To the extent that one is not flourishing because of Down syndrome, one is not at fault. Genetic circumstance, rather than choice, has forced this human into eudaimonic impoverishment. He is not accountable for his lack of human flourishing in this respect. Consider, however, how cognitive impairment isn’t always just a matter of circumstance – some people choose to permanently impair their minds. The person who regularly gives in to laziness (choosing not to learn and think) or habitually abuses a dangerous substance which impairs cognitive development is intellectually impoverished. These cases are different from the human with Down syndrome. The constantly lazy, or habitual users of dangerous substances, have elected to impoverish themselves intellectually, and as such, they are culpable to that extent. The issue of responsibility leads us to the next important assumption of this project.

''3.3 - Our Obligations to Flourish''

The distinction between the human good and what is morally right/wrong is essential to this theory. The standard by which we judge moral action is parasitic upon the human good. Our obligations and rights are grounded and interpreted in virtue of the human good. To partake in the human good is not always up to us, and yet sometimes it is. The degree to which others partake in the human good is not always up to us either, and yet sometimes it is. In those cases in which it is our choice to influence or determine when humans can partake of the human good (flourishing), rights and obligations are formed.

I take for granted that we as humans have extensive obligations to ourselves to flourish and to enable others to flourish. We are morally required to ensure that we as individuals are existing and growing as humans ought. Further, we should help others flourish as human beings, as well. Insofar as it is up to us, we are morally responsible to flourish as a species. 

This is not out of line with the neo-Aristotelian tradition. Our human telos, namely flourishing and living well, is not merely descriptive. It is the normative standard by which we judge the well-being of humans. These aretaic and eudaimonic concepts come pre-built with prescriptive powers. We are obligated to flourish, and as such we are obligated to take the means necessary to that end. Those conditions necessary for human flourishing form more particular obligations. We ought to lead ethical lives, we ought to thrive biologically, and we ought to flourish intellectually. A cascade of obligations flow out of these conditions for human flourishing. 

It is perhaps more intuitive to see why we have obligations to ourselves to flourish as individuals. Surely we should take care of ourselves and improve ourselves. We should not waste our lives. We are responsible for ourselves. Our obligation to flourish is almost common sense. Our obligations to others, specifically to enable others to flourish, are perhaps less clear and obvious. 
It seems easy to run into cases where interests conflict. For example, your personal flourishing is limited when you sacrifice resources to enable someone else’s flourishing. Exactly where and how we draw these lines of obligation are beyond the scope of this paper, but is an important obstacle to be dealt with when approaching my larger project. This worry of moral precision is complex. For this paper, I assume, even if I cannot justify or fully explain, that we have extensive obligations to others in virtue of their humanity.

Let us bring back our nourishment example. The starving person in a third world nation is not morally responsible for failing to flourish – there is no food available. To that extent, we cannot hold that individual accountable for not attaining or maintaining eudaimonia. The well-fed person in a first world nation, likewise, is largely not responsible for living in her circumstances, in this case, circumstances in which food is plentiful. We cannot praise the well-fed person for flourishing with respect to circumstances which are outside her control. The well-fed person, however, is responsible to eat healthily when possible and not in conflict with other duties. To that extent, the person is responsible for her personal nourishment and flourishing – she is morally praiseworthy insofar as she is responsible for her own successful flourishing and excellence. 

Each individual has responsibilities to nourish themselves, to thrive biologically, and to flourish intellectually insofar as they are capable. Being a good human, however, is not always up to us – sometimes being a good human requires others to help us, as in the case of the starving person, who requires our aid (which presumably we could provide). We who live in abundance have obligations to starving people. We must enable them to flourish. We must provide for them the means to attain the basic, vital, and essential conditions to human flourishing. We have more than just eudaimonic obligations to ourselves; we also have extensive obligations to others. Equivalently, starving people have extensive rights to receive aid and to be enabled to nourish themselves. 

Intellectual flourishing is similar. The person with Down syndrome is not morally responsible for not flourishing intellectually because of a genetic defect outside of his control. That person, however, is responsible for cultivating himself insofar as it is up to him. Furthermore, we have obligations to provide for him, to practically enable him to reach his potential. Conversely, people who are habitually too lazy to cultivate their minds or who capriciously and violently damage their minds are doing something immoral. They are responsible for these actions, and they are responsible for failing to flourish. 

Similar to the nourishment example, intellectual flourishing of our species is not just a personal obligation to ourselves, it includes an expansive set of obligations to others. Providing education (in a very broad sense of this term) and the resources necessary to flourish intellectually is our crucial and collective obligation to every human. Fulfilling our function as much as possible requires planning and infrastructure; it also requires that we invest in others. We are morally required to maximally enable our species to cultivate our minds and to fulfill our human function.

Flourishing intellectually is just as important as thriving biologically, perhaps even more important. It would be better to live as a crippled scholar than as an uneducated and willfully ignorant gymnast who has his health and is thriving biologically. Not only are we required to feed and nourish others’ bodies, we must feed and nourish their minds. We are doing something immoral by not enabling others to flourish intellectually, just as it is immoral to refuse to provide food, and/or ways to acquire food, to those who need it. 

This obligation to others has far reaching consequences. For the purpose of this paper, I wish to concentrate on the problem of obstructing others from flourishing intellectually. With some exceptions, it is generally immoral to prevent others from fulfilling their human function. It would be immoral, for example, to prevent poor children or a particular ethnicity from attending school, or reading books, or using the internet. These people are human, and like all other people, they have a right to have an education. Similarly, intellectual property rights, as we employ them today, are an obstruction to human flourishing, an obstruction for which we are morally responsible.

''3.4 – Ideas of Intellectual Flourishing as the Means to Flourishing''

The ideas protected by intellectual property claims, whatever they may be, are the ingredients and mediums of the human function. Ideas, concepts, designs, theories, books, music, movies, and whatever else is involved in intellectual property (and perhaps even more) are the very things which are necessary for intellectual flourishing. We must use and implement these ideas, many of which are artificially protected by intellectual property rights, to fulfill our function. 

These ideas are the building blocks of thinking. They are the necessary and fundamental components of fulfilling our human function. Without having the access necessary to use and implement them, we are impoverished, not just intellectually, but also biologically.

It is fairly obvious how the use and implementation of these ideas are necessary for our cognitive development. These are the primary objects of cognition. Ideas are directly used or handled in our minds. Material objects must be used or implemented to enable further cognitive development. Printed media has accelerated how we pass information and knowledge on to others. Music notation and sound recording devices have enabled us to pass on phonic art and original lectures and speeches. Video synergizes our senses, efficiently passing on cultural, aesthetic, and educational information to others. Reflect on what the abacus or computer has enabled in terms of intellectual flourishing. We would not be able to develop our minds and fulfill our intellectual telos without using and implementing objects of intellectual flourishing. 

Implementation provides other indirect benefits to fulfilling our intellectual telos as well. Take the case of Norman Borlaug, a man famous for changing agriculture around the world, many of us owe our lives to this man. Borlaug discovered or created the processes which doubled crop yields around the world. His work is not solely for academics or for the sake of Borlaug’s personal intellectual flourishing. The use and implementation of these ideas are necessary for human flourishing in other respects – directly impacting how we nourish ourselves as a species, and indirectly freeing up time and energy, while allowing us to pursue even greater intellectual flourishing. They open the gates to be better humans, individually and as a species. 

Ideas of all sorts are necessary to intellectual flourishing; they are instrumental means to our function, and also therefore to our end as human beings. To be obligated to achieve an end is to be obligated to the necessary conditions and means for that end. We are obligated to use and implement the objects of intellectual property because they are part of the necessary means to achieving intellectual flourishing. 

Granted, it isn’t clear how we know which intellectual objects are necessary as means to our flourishing, intellectually and otherwise. Some intellectual objects are clearly more relevant to our flourishing than others, and I’m unsure exactly which objects have absolutely no possible instrumental value to human flourishing. In the future, when developing my larger project related to intellectual property rights, I must address and substantiate/support the following claim: the number of objects which have no possible instrumental value to human flourishing, is exceedingly small. Some people already have this intuition, but for others, I may need to provide a wide-ranging set of cases and empirical evidence to support the claim. 

Essentially, virtually all the objects of intellectual property must be made available to humanity. Some objects are necessary for everyone (literature, math, politics, etc.), and some objects are necessary for a few (musical instruments and chess). These objects must be freely available if we are to flourish as a species. Further, we are obligated to use and implement these objects to fulfill our function. Moreover, we should enable others to use and implement these objects, and we should not impede others from accessing, using, and implementing these objects because these are the means to flourishing.

''3.5 - The Right to Flourish''

	Sen and Nussbaum’s capabilities approach is an empirical method of institutional reform that is derived from the normative claims that the freedom to achieve well-being as a human being is of vital moral importance and that this freedom can only be understood relative to the capabilities of individuals to realize it: that is, individuals must have real opportunities to live well and to flourish as human beings. 

Their approach and my sketch are rooted in the same general kind of eudaimonism and picture of the human good. An account of human flourishing or human good defined by the essential functions and characteristics of humans is needed for the capability approach to produce tangible and substantial claims on which to apply its methodology. 

	Martha Nussbaum describes her "thick vague theory of the good” as “an account of the most important functions of the human being, in terms of which human life is defined. The idea is that once we identify a group of especially important functions in human life, we are then in a position to ask what social and political institutions are doing about them.”<<ref "37">> The capability approach is a method, arguably a heuristic device for justice, built upon this teleological view of humankind. This is the approach:

[1] We assume human life has a function(s) and a set of essential features; [2] we identify those properties in terms of functions/achievements and capabilities/opportunities, and set them as a metric or standard of human flourishing; [3] we go out into the world to test and observe whether or not, and to what degree, social and political institutions (like the basic structure in Rawls) are promoting and enabling humans in their domains to flourish according to our metrics; [4] if these standards aren’t reached, if humans aren’t flourishing as they should, if our social order performs poorly to any degree on our metrics, then we look to see how to reform or revolutionize public policies of these institutions in order for them to better enable and promote human flourishing; [5] go back to step 3, rinse and repeat.

	The capability approach is not just interested in being able to describe what counts as flourishing – it wants to prescribe how we can bring about flourishing on a global scale. The sketch I’m offering in this chapter is more or less aligned with the capability approach in this goal.

	Intellectual flourishing can be found in the central human capabilities that Nussbaum outlines. She outlines the ability to use and engage our senses, imagination, thought, experience, emotions, practical reason, among others, as central human capabilities – as essential teleological features of humans.38 Intellectual property rights are certainly a matter of great interest to the capability approach.

	The capability approach is interested in measuring how public policy, including the quality and quantity intellectual property rights, generates or fails to generate circumstances in which humans maximally flourish. Current intellectual property rights do not merely interfere with our efforts to exercise our intellectual capabilities, but they generate a material circumstance for a majority of the world in which we can’t maximally exercise our intellectual capacities, and thus we fail as a species to maximally flourish.

	One of the more contentious claims of this sketch theory is that, on average, more people will flourish, and flourish to a greater degree, if we did not continue to protect intellectual property rights in such high quantities and qualities. The current intellectual property regime impinges on our ability to exercise our intellectual capacities, and essentially we are restricted from maximally flourishing because of unnecessary intellectual property protections. That is clearly an empirical question which must be answered with a tool like the capability approach. If that claim is correct, then on a eudaimonistic approach to intellectual property, we may prescribe diminished intellectual property rights. 

''3.6 - Conclusion''

Lockean and utilitarian economic theories of intellectual property try to construct a framework for extensive claim rights to intellectual objects. What I take from critiquing these theories is that their foundations – Locke’s general property theory and utilitarianism – actually lead to denying extensive and exclusive claim rights to intellectual objects. My alternative sketch of intellectual property reaches a similar and compatible conclusion.

---------------------

<<footnotes "1" "Moore, Adam.  'A Lockean Theory of Intellectual Property' (PhD diss., Ohio State University, 1997), 82., in OhioLINK, http://rave.ohiolink.edu/etdc/view?acc_num=osu1214419634 (accessed June 13, 2012).">>
<<footnotes "2" "Palmer, Tom G. 'Are patents and copyrights morally justified? The philosophy of property rights and ideal objects.' Harvard Journal Of Law & Public Policy 13, no. 3 (Summer90 1990): 817. Academic Search Complete, EBSCOhost (accessed November 24, 2011).">>
<<footnotes "3" "Fisher, William. 'Theories of Intellectual Property.' Harvard Law School. http://www.law.harvard.edu/faculty/tfisher/iptheory.html (accessed February 28, 2012).">>
<<footnotes "4" "Spinello, Richard A., and Herman T. Tavani. “Intellectual Property Rights: From Theory to Practical Implementation.”  //Intellectual Property Rights in a Networked World: Theory and Practice//. Hershey, Pa: Information Science, 2004: 1-65. 5.">>
<<footnotes "5" "Unfortunately, defending either the discovery or creation views is a very complex metaphysical and epistemological concern well beyond the scope of this paper. I cannot settle it here. ">>
<<footnotes "6" "Ibid. 7">>
<<footnotes "7" "Locke, John. //Second Treatise of Government.// Ed. C. B. Macpherson. Indianapolis, Ind: Hackett Pub. Co, 1980. 21.">>
<<footnotes "8" "Ibid.">>
<<footnotes "9" "Easterbrook, Frank H. 'Intellectual property is still property.' //Harvard Journal Of Law & Public Policy //13, (January 15, 1990): 108-118. 110.">>
<<footnotes "10" "Wolff, Jonathan. 'Libertarianism, Utility, and Economic Competition.'// Virginia Law Review //92, no. 7 (November 2006): 1605-1623. 1618.">>
<<footnotes "11" "Spinello, Richard A., and Herman T. Tavani. 'Intellectual Property Rights: From Theory to Practical Implementation.' 8.">>
<<footnotes "12" "There are three major types of expressions of intellectual objects, each being protected by a different type of intellectual property law. Expressions of intellectual objects include the actual tangible mediums of books, paper, and canvas in cases of literature, music, art – we refer to the protection of these expressions as copyrights. Expressions also include tangible machines and processes in the cases of inventions and functional ideas – the protection of these expressions are called patents. Expressions, such as images or words, which uniquely identify entities, services, or products, are protected by Trademarks.">>
<<footnotes "13" "Kimppa, Kai. 'Intellectual Property Rights in Software-Justifiable from a Liberalist Position? Free Software Foundation's Position in Comparison to John Locke's Concept of Property.' //In Intellectual Property Rights in a Networked World: Theory and Practice//. Richard A. Spinello and Herman T. Tavani.. Hershey, Pa: Information Science, 2004: 67-82.  68.">>
<<footnotes "14" "Moore, Adam.  'A Lockean Theory of Intellectual Property' (PhD diss., Ohio State University, 1997), 183-184., in OhioLINK, http://rave.ohiolink.edu/etdc/view?acc_num=osu1214419634 (accessed June 13, 2012).">>
<<footnotes "15" "Similarity is the vital relationship between the original work and derivative work regarding intellectual property rights. On this theory (and the legal practice of it) derivative works are not merely about the causal origins of a work. A new work may be transformed so far from an original work that the new bears absolutely no resemblance to the original – these works are not infringing on the original owner’s intellectual property rights. A new work which would be potentially infringing on the original without the consent of the original’s owner, a judgment based exclusively on similarity, is a derivative work. A derivative work usually has a causal chain connecting it to the original work, but vitally, a derivative work is similar enough to the original that judicial and legislative bodies require the derivative work’s producer to acquire consent of the original work’s owner.">>
<<footnotes "16" "Spinello, Richard A., and Herman T. Tavani. 'Intellectual Property Rights: From Theory to Practical Implementation.' 14.">>
<<footnotes "17" "Besen, Stanley M.and Leo J. Raskind 'An Introduction to the Law and Economics of Intellectual Property.'
//The Journal of Economic Perspectives// , Vol. 5, No. 1 (Winter, 1991):3-27. 7-11.">>
<<footnotes "18" "Besen, Stanley M.and Leo J. Raskind 'An Introduction to the Law and Economics of Intellectual Property.' 12.">>
<<footnotes "19" "Abrams, Howard B. 'Originality and creativity in copyright law.' //Law & Contemporary Problems //55, (April 15, 1992). 3-44.">>
<<footnotes "20" "Robert M. Hurt and Robert M. Schuchman. 'The Economic Rationale of Copyright.' //The American Economic Review// , Vol. 56, No. 1/2 (Mar. 1, 1966): 421-436. 426.">>
<<footnotes "21" "Steven Shavell and Tanguy van Ypersele. 'Rewards versus Intellectual Property Rights.'  //Journal of Law and Economics// , Vol. 44, No. 2 (October 2001). 525-547.">>
<<footnotes "22" "I am not claiming egalitarian distributions maximize utility, rather I’m claiming that distributions with vast wealth inequalities do not satisfy the utility principle.">>
<<footnotes "23" "I grant that criticisms of general utility, such as the utility monster, actually can lead to very unequal distributions and may result in the impoverishment of the vast majority of the populace. I am not defending utilitarianism in this paper, and I am going to assume more moderate views of utilitarianism (which set aside or are assumed to avoid objections like the utility monster) for the sake of this paper. I’m trying to temporarily grant, for the sake of argument, the viability of the general utilitarian approach.">>
<<footnotes "24" "Aghion, Philippe, and Patrick Bolton. 'A Theory of Trickle-Down Growth and Development.' //Review Of Economic Studies// 64, no. 2 (April 1997). 151-172.">>
<<footnotes "25" "Even if we considered utility at a national level, the principle of utility is not satisfied in first world western nations. Unfortunately, nationalistic approaches fail to take into account how first world nations have both directly and indirectly caused harm to the poor in third world nations. Our intellectual property system is one of the many causes of the high degree of impoverishment worldwide. The fact is that the average poor person in a third world nation is simply much, much poorer than a poor person in a first world nation, and in part, this is due to first world intellectual property system.">>
<<footnotes "26" "Of course, not everyone would read the logic book on their shelf or computer. But, I believe it is safe to assume that 5 billion people having a logic book will result in more people having read a logic book than merely 50 million having a logic book. I am also assuming that reading a logic book will result in significant utility gains. If you don’t like the example, then replace the logic book with something you believe most anyone would benefit by viewing/hearing/reading/etc.">>
<<footnotes "27" "I’m not claiming that releasing all intellectual property into the public domain would result in some celestial utopia, but I do believe it would be enormously beneficial to the world. Yes, it would cost the wealthy something, but the gains in utility would be well worth it.">>
<<footnotes "28" "Konstantinos Giannakas. 'Infringement of Intellectual Property Rights: Causes and Consequences.'  //American Journal of Agricultural Economics// , Vol. 84, No. 2 (May, 2002). 482-494.">>
<<footnotes "29" "Joseph Farrell. 'Intellectual Property as a Bargaining Environment.' //Innovation Policy and the Economy// , Vol. 9, No. 1 (2009). 39-53. ">>
<<footnotes "30" "Timothy Lee, 'If Android is a 'stolen product,' then so was the iPhone,' //Ars Technica//, February 23, 2012. http://arstechnica.com/tech-policy/news/2012/02/if-android-is-a-stolen-product-then-so-was-the-iphone.ars(accessed February 27, 2012).">>
<<footnotes "31" "//Time Magazine.// Business: Patent War. June 10, 1929. http://www.time.com/time/magazine/article/0,9171,751967,00.html (accessed February 27, 2012).">>
<<footnotes "32" "See Hurka, Thomas. //Perfectionism//. New York: Oxford University Press, 1993; and Foot, Philippa. Natural Goodness. Oxford: Clarendon, 2003.">>
<<footnotes "33" "Nicomachean Ethics I. 7, 1097b25-1098a15.">>
<<footnotes "34" "See Nussbaum, Martha. Capabilities and Human Rights, 66 Forham L. Rev 273 (1997), http://ir.lawnet.forham.edu/flr/vol66/iss2/2; and Sen, Amartya. 'Human Rights and Capabilities.' //Journal of Human Development// 6, no. 2 (July 2005): 151-166.">>
<<footnotes "35" "Nussbaum, Martha. //Capabilities and Human Rights//, 66 Forham L. Rev 273 (1997), http://ir.lawnet.forham.edu/flr/vol66/iss2/2: 287.">>
<<footnotes "36" "Sen, Amartya. 'Human Rights and Capabilities.' //Journal of Human Development// 6, no. 2 (July 2005): 154.">>
<<footnotes "37" "Nussbaum, Martha C. 'Human Functioning and Social Justice: In Defense of Aristotelian Essentialism.' //Political Theory// Vol. 20, No. 2 (May, 1992): 214">>
<<footnotes "38" "Nussbaum, Martha. //Capabilities and Human Rights//, 66 Forham L. Rev 273 (1997), http://ir.lawnet.forham.edu/flr/vol66/iss2/2: 285-288.">>

---------------------

REFERENCES

Abrams, Howard B. "Originality and creativity in copyright law." //Law & Contemporary Problems// 55, (April 15, 1992). 3-44.

Aghion, Philippe, and Patrick Bolton. "A Theory of Trickle-Down Growth and Development." //Review Of Economic Studies// 64, no. 2 (April 1997). 151-172.

Besen, Stanley M.and Leo J. Raskind “An Introduction to the Law and Economics of Intellectual Property.” //The Journal of Economic Perspectives// , Vol. 5, No. 1 (Winter, 1991):3-27.

Easterbrook, Frank H. "Intellectual property is still property."// Harvard Journal Of Law & Public Policy// 13, (January 15, 1990): 108-118. 

Farrell, Joseph. “Intellectual Property as a Bargaining Environment.” Innovation Policy and the Economy , Vol. 9, No. 1 (2009). 39-53.

Fisher, William. “Theories of Intellectual Property.” Harvard Law School. http://www.law.harvard.edu/faculty/tfisher/iptheory.html (accessed February 28, 2012).

Foot, Philippa. //Natural Goodness//. Oxford: Clarendon, 2003.

Giannakas, Konstantinos. “Infringement of Intellectual Property Rights: Causes and Consequences.”  //American Journal of Agricultural Economics //, Vol. 84, No. 2 (May, 2002). 482-494.

Hurt, Robert M. and Robert M. Schuchman. “The Economic Rationale of Copyright.” //The American Economic Review// , Vol. 56, No. 1/2 (Mar. 1, 1966): 421-436. 426.

Hurka, Thomas. //Perfectionism//. New York: Oxford University Press, 1993.

Kimppa, Kai. "Intellectual Property Rights in Software-Justifiable from a Liberalist Position? Free Software Foundation's Position in Comparison to John Locke's Concept of Property." //In Intellectual Property Rights in a Networked World: Theory and Practice//. 

Richard A. Spinello and Herman T. Tavani.. Hershey, Pa: //Information Science//, 2004: 67-82. 

Lee, Timothy. “If Android is a 'stolen product,' then so was the iPhone,” //Ars Technica//, February 23, 2012. http://arstechnica.com/tech-policy/news/2012/02/if-android-is-a-stolen-product-then-so-was-the-iphone.ars(accessed February 27, 2012).

Locke, John. //Second Treatise of Government//. Ed. C. B. Macpherson. Indianapolis, Ind: Hackett Pub. Co, 1980. 

Moore, Adam D. “A Lockean Theory of Intellectual Property.” PhD diss., Ohio State University, 1997. In OhioLINK, http://rave.ohiolink.edu/etdc/view?acc_num=osu1214419634 (accessed June 13, 2012).

Nussbaum, Martha. //Capabilities and Human Rights//, 66 Forham L. Rev 273 (1997), http://ir.lawnet.forham.edu/flr/vol66/iss2/2.

Nussbaum, Martha C. “Human Functioning and Social Justice: In Defense of Aristotelian Essentialism.” //Political Theory //Vol. 20, No. 2 (May, 1992):

Palmer, Tom G. "Are patents and copyrights morally justified? The philosophy of property rights and ideal objects." //Harvard Journal Of Law & Public Policy// 13, no. 3 (Summer90 1990): 817. Academic Search Complete, EBSCOhost (accessed November 24, 2011).

Sen, Amartya. "Human Rights and Capabilities."// Journal of Human Development// 6, no. 2 (July 2005): 154.

Spinello, Richard A., and Herman T. Tavani. “Intellectual Property Rights: From Theory to Practical Implementation”.  I//ntellectual Property Rights in a Networked World: Theory and Practice//. Hershey, Pa: Information Science, 2004: 1-65. 

Shavell, Steven and Tanguy van Ypersele. “Rewards versus Intellectual Property Rights.”  //Journal of Law and Economics// , Vol. 44, No. 2 (October 2001). 525-547.

Time Magazine. Business: //Patent War//. June 10, 1929. http://www.time.com/time/magazine/article/0,9171,751967,00.html (accessed February 27, 2012).

“While Drafting SOPA, the U.S. House Harbors BitTorrent Pirates.” //TorrentFreak//. Entry posted December 26q, 2011. https://torrentfreak.com/while-drafting-sopa-us-house-harbors-bittorrent-pirates-111226/ (accessed December 26, 2011).

Wolff, Jonathan. "Libertarianism, Utility, and Economic Competition." //Virginia Law Review// 92, no. 7 (November 2006): 1605-1623. 







In the article, “Freedom within Reason,” author Susan Wolf is concerned with three different views or justifications of our moral responsibility. She provides a brief chronology of arguments concerned with the link between autonomy and moral responsibility. Wolf starts with the incompatibilist intuition, what she refers to as the Autonomy View, offers criticisms of it, and moves on to examine what she considers to be a more favorable compatibilist position called the Real Self View. Wolf finds this view unsatisfying, and offers her own compatibilist position, the Reason View, as the successor. She believes her theory justifies and explains our moral responsibility. 

In this paper, I will carefully outline and consider her arguments as an incompatibilist. I will try to defend incompatibilism where I can, offer clarifications to several of Wolf’s objections, providing lines of reasoning she did not offer in her own article, and evaluate the strengths and weaknesses of her position.

Wolf’s starting justification is what she refers to as the Autonomy View. She explains:

<<<
The Autonomy View of responsibility…is the view that beings are responsible just insofar as they are autonomous… I shall say that a person is autonomous when, and only when, his actions are governed by his self, and there is nothing behind or beyond his self, making it govern actions the way he does.<<ref "1">>
<<<

This is the incompatibilist view of agency and moral responsibility. Wolf takes this to be the starting point for a discussion of moral responsibility, as she believes it to be the most clearly connected to common instincts and initial perspectives on the topic. Wolf juices our intuitions, describing why both laymen and philosophers might find the Autonomy View so compelling:

<<<
[People] fear the absence of power and of ultimate control. If their lives or their individual acts are not theirs to create in whatever image they choose, this seems to rob their lives of significance, their acts of any meaning…Among the things we feel to be licensed by the ordinary assumption that we are in control of our lives and our acts is the appropriateness of holding ourselves and each other responsible for how we live and what we do…Our attitudes and affections rest on the assumption that what people do expresses and reveals qualities that are especially and deeply attributable to them. If freewill is an illusion and we are not calling the shots, then these attitudes appear to be inappropriate and unjustifiable, and so do the practices of reward and punishment, of credit- and discredit-giving that reflect and express these attitudes.<<ref "2">>
<<<

I take this to be a fair representation of the incompatibilist’s thinking on the matter. It doesn’t seem as if we can hold an agent responsible for actions which don’t originate from that person. If an action isn’t up to the agent in a significant sense, for example, if the laws of physics can reducibly describe or determine what an agent does or does not do, then it seems, at least to the incompatibilist, that agent is not morally responsible.

A solid analogy would be that in a determined world, agents are essentially robots. Robots, which are programmed and determined to do what they do and effectively cannot, by definition, do otherwise, are not morally responsible. I haven’t much to add to Wolf’s description of the primary incompatibilist intuition, the Autonomy View. 

Note, the Autonomy View outlines the conditions for moral responsibility and no more. Here we find a second intuition that Wolf wishes to implicitly add to the Autonomy View. The second intuition is simple: most of us are morally responsible. Wolf takes this intuition as a given (as, it seems, do most people). In fleshing out why people are compelled to the Autonomy View, Wolf points toward this second intuition, but it is not explicitly a part of the Autonomy View, and for good reason. One might hold the first intuition and not the second. Such a person is an incompatibilist skeptic of moral responsibility. 

Wolf agrees to the second intuition, and so she doesn’t dissect the incompatibilist skeptic’s perspective. Rather, she is more interested in dismantling the libertarian view. In the context of Wolf’s paper, the brief libertarian argument is this: 

# A being without autonomy (libertarian free will) is not a morally responsible being.3  
# Most humans are morally responsible beings. 
# Therefore, most humans have autonomy (libertarian free will).

Clearly, premise (1) is the first intuition, the Autonomy View, and premise (2) is the second intuition. 

In order to deny the conclusion, incompatibilist skeptics of moral responsibility can deny the second premise, and compatibilists who assume the second premise can deny the first. Indeed, the primary enterprise or goal of Wolf’s article is the preservation and provision of an account of the second premise without agreeing to the libertarian’s conclusion. Further, as she thinks, a compatibilist should explain why people feel initially compelled toward the Autonomy, demonstrating what is right and/or wrong about the Autonomy View.

Wolf provides two excellent criticisms of the libertarian argument. The first criticism is an attack on the first premise of the libertarian argument via a reductio. Wolf’s argument is that when we employ the Autonomy View, as far as she can tell, we arrive at the conclusion that nobody is morally responsible (in contradiction with premise 2). She explains:

<<<
If responsibility does require autonomy, it is questionable whether any of us is ever responsible for anything. For autonomy requires that our actions be governed by our selves and that our selves not be governed by anything beyond our control. Now, it is undeniable that many of our actions are governed by our selves – that is, they result from our own decisions and choices. Moreover, it is fairly rare that these decisions and choices are overtly caused or determined by such obviously external forces as a gunman or a hypnotist or the wind or a seizure. But neither do our choices or decisions or selves arise spontaneously out of nothing. Though the factors that shape who we are and what we value, and consequently that shape how we respond to the circumstances that confront us, are rarely so easy to point to as they are in the examples of what I called “special circumstances,” it is plausible that such factors are always operative nonetheless, calling into doubt the assumption that even the strongest candidates for autonomous action really are as autonomous as they appear.<<ref "4">>
<<<

I find the ‘undeniable’ qualifier puzzling. These external shaping factors which supposedly defeat autonomy suggest that it isn’t deniable, at least from the libertarian’s perspective.  I’m not sure what Wolf means by this. It is clear, however, Wolf believes that, on the Autonomy View, the ever-present, external shaping factors negate our responsibility.

Wolf offers what I will refer to as the Systematic Manipulation Objection to historical autonomy. The claim is that the world around us is filled with ordinary and common external forces which influence us in the same way as (although more subtly than) traditional, special autonomy and/or responsibility defeating circumstances such as a gunman, hypnotist, or OCD. From the perspective of the Autonomy View, this is a serious objection because nobody is autonomous if we are all systematically determined by external forces and, consequently, nobody is morally responsible. 

Nobody will deny that the world influences us. Being “shaped” and “influenced” by external forces, of course, is not the same as being causally determined by something external to us. The issue is whether or not that influence is manipulation beyond our control. I think the libertarian has an obvious counter to the Systematic Manipulation Objection: the agent endorsed those influences. Insofar as those influences are endorsed, one is still autonomous, and thus still responsible. The idea is that one can choose to be shaped by these external forces, and thus they do not manipulate one in the same way that a hypnotist manipulates an individual. If this is true, then these ordinary, external shaping forces which are endorsed by the agent are neither autonomy defeating nor responsibility defeating.

An example of this systematic manipulation, which Wolf offers much later (not regarding the Autonomy View), is the illustration of a racist who is so deeply conditioned by the people surrounding him that he didn’t have a chance to not be a racist. In the example of the racist, the libertarian would say the individual did have a chance to not be racist. The racist’s free will provides endorsement or resistance to his racist conditioning. Granted, this particular racist may not be as responsible as one who didn’t endure such conditioning, but he still seems responsible to some extent. The libertarian may even agree that, at some point, it may no longer be up to the racist whether or not he will be a racist; but at some point in time, it was up to the racist to question, resist, or endorse the conditioning and racist claims of those around him. Hence, the racist is still culpable, and this is the kind of story the libertarian can use to explain why systematic manipulation is not so problematic.

A more striking version of the problem that Wolf may be (or should be) offering is what I call the Poisoned Origins Objection. The starting assumption is that one is not born with autonomy, and rather one grows to become fully autonomous. Presumably, a baby does not have autonomy, and yet, that baby is still shaped by his genetics, environment, and various external forces. This baby will grow up, passively soaking up values, desires, and beliefs without active endorsement. The original authentic self of this child (a concept which Wolf, unfortunately, did not make much room for in her section on libertarianism) seems completely determined by external forces, and not by the child himself. At whatever stage this child is supposed to gain some measure of autonomy, we must contend with the claim that the original version of “who this child really is” isn’t shaped by the child, but by forces external to this newly minted autonomous being. How does the child grow into an autonomous being from a nonautonomous foundation? If one has a predetermined authentic self, then even after the acquisition of autonomy, it seems as though the autonomous agent is tainted. It is not clear how one overcomes these tainted origins. Just as it remains unclear as to how an agent completely manipulated by a neuroscientist could ever reclaim his autonomy after such radical manipulation, it seems unclear as to how one could gain autonomy in the first place from nonautonomous origins. 

A libertarian might reject this Poisoned Origins Objection by claiming the authentic self is not determined in any degree. One might argue that the realm in which you are the only force of will (whatever that may be), is the realm of the real you. The idea is that your libertarian free will, which is undetermined or untainted by external forces, is the only authentic you. A young child without autonomy just wouldn’t have the relevant kind of authentic self in question, and when the child became autonomous (acquired free will), her authentic self would begin. Essentially, there would be no conditioned, nonautonomous origins, and thus our moral responsibility can be maintained.

Moving past many of the metaphysical concerns, there seem to be at least two solid problems with such a view. The first problem is that this seems to go against our intuitions that “who we are” is at least in part a function of our genetics, environment, and other external forces. For example, deaf people might consider being deaf an essential characteristic of their authentic selves. The fact that a person loves pizza or reading or whatever, which seems to be, at least in part, a product of forces external to her, might also be a part of her authentic self. Many things which are determined by forces external to us seem to be important to us; we take them as defining who are, to some extent. It isn’t clear how a libertarian could resolve this problem.

The second problem, related to the first, is that this unpoisoned, metaphysical authentic self seems to require some kind of system of beliefs and desires. How could it make decisions otherwise? What are the origins of those beliefs and desires? These beliefs and desires can’t be determined by external forces. The libertarian, it seems, needs an account of the origins of the beliefs and desires of this untainted authentic self.<<ref "5">> 

None of the options look particularly good. It is not clear, however, that these concerns absolutely can’t be overcome, and thus I’m not convinced this first objection is absolutely fatal. Dialectically, however, the libertarian seems to have his work cut out for him. Interestingly, it seems that many compatibilist theories of autonomy (I’m momentarily parting with Wolf’s definition here) may also be susceptible to the Poisoned Origins Objection. Dialectically, it may be the case that any who believe in autonomy (whether compatibilist or incompatibilist) must take into account the historicity of the authentic self, have their work cut out for them. 

Let us move and examine Wolf’s second criticism of libertarian autonomy. She explains:

<<<
The second problem with the autonomy view is perhaps more purely philosophical. It is that even if autonomous action is possible, even if we are, most or all of the time, autonomous agents, it remains disturbingly opaque why or how this should make us responsible agents. That is, it seems easy enough to grasp why nonautonomous agents might not be responsible for what they do. If their actions are governed by their selves, but their selves are governed by something outside their control, then it is not really they who are calling the shots; they are not in ultimate control. But if being autonomous means that instead of one’s self being a product of external forces, one’s self is a spontaneous, undetermined entity, it is hard to see why one should be any more responsible for the decisions, choices, and actions that flow out of that. One is in no more control of a self that has arisen out of nothing than one is if one’s self has arisen out of something. An undetermined self seems no more responsible than a determined self.<<ref "6">>
<<<

The second objection is more intriguing than the first. Instead of employing a reductio, the first premise is outright called into question. Wolf provides a countering intuition. Your “freewill,” the autonomous you, is comprised of spontaneity, undetermination, and seeming randomness, and is thus thought to be arbitrary and irrelevant to moral responsibility. Such an entity is too chaotic to be a responsible thing. How can the libertarian demonstrate that an undetermined self is any better than rolling dice? We might rephrase it as: assuming indeterminism, what makes the “real you” (the autonomous, authentic, libertarian-based you) better than mere dice? Unlike the first objection, this second objection strikes at the heart of libertarian autonomy, while leaving the compatibilist autonomy untouched. 

Honestly, I don’t know, but I do have a worry about the objection’s position in the dialectic, and I believe compatibilism fairs no better. Funnily enough, the incompatibilist has been posing a remarkably parallel problem to the compatibilist: assuming determinism, what makes the “real you” any better than a mere pile of mechanistic atoms? 

Isn’t it intuitively obvious that the “real you” (whatever that might be) is a responsible being who is better or more significant than undetermined dice and a determined pile of mechanistic atoms? We are forced to either accept that at least one or the other problem can be solved. But, it is unclear how moral responsibility apologists, be they compatibilists or incompatibilists, can provide intuitively obvious reasons for why or how this is true. We beg the question of responsibility and seem to be working backwards trying to explain it. This is a kind of transcendental argumentation. It seems to me that both the incompatibilist and compatibilist sit in the dialectical boat. 

Assuming that alternative objections (such as Wolf’s first objection to the Autonomy View) do not hold, the libertarian’s response to the second objection is simply to agree with compatibilists that we are morally responsible and then claim the problem posed by being reduced to robots or piles of mechanistic atoms has more intuitive force than the dice problem. I reckon that isn’t satisfying. In this respect, the compatibilist, however, doesn’t appear to be able to offer any other kind of argument either. As blind believers in moral responsibility, we are stuck. This is likely the result of what Wolf refers to this as “the dilemma of autonomy.”<<ref "7">>

Question begging, dogmatism, and intuition, of course, are very rarely acceptable kinds of evidence or argumentation in philosophy. You really are at the foundation of a branch of philosophy when such a practice can be accepted. In facing the skeptic of moral responsibility, I submit that we are at the foundation of ethics, and that such a practice is epistemically justified and acceptable.

After levying her objections to incompatibilism, Wolf moves towards compatibilist arguments. She takes the task of proper theory of compatibilism to be twofold: (1) explaining how we are morally responsible in a deterministic world, and (2) making sense of (yet still denying) our initial intuitions about the necessity of autonomy for moral responsibility, particularly regarding these special responsibility-defeating circumstances.<<ref "8">> Before sketching out her own compatibilist theory, Wolf offers what she believes to be the second (after her own) most compelling compatibilist theory of moral responsibility.

Wolf returns to the “various ways in which special circumstances lead us to exempt people from responsibility and blame” in order to locate “the source of their unfreedom” which the libertarian supposedly failed to find.9 In trying to make sense of experiences and circumstances that led us to the Autonomy View from the compatibilist perspective, Wolf explains:

<<<
[The] difference between a person who is pushed and someone who bumps into another person intentionally is that in the latter case but not in the former the person’s behavior is determined by his will. Hypnotism is not quite like being pushed, for the hypnotist typically works on the will rather than circumvents it. But of the person acting under hypnosis, we can say that, though he moves according to his will, his will is not determined by his own desires.<<ref "10">>
<<<

It makes sense that the wind circumvents the will rather than on it. Hypnosis is trickier but has the same sort of problem, thinks Wolf: an agent not acting on his own desires can’t be responsible. The compatibilist might think this can explain away the initial leap to the Autonomy View. The compatibilist, at least naïvely, can argue that a person is responsible “when, and only when, his behavior can be governed by his will and his will can be governed by his desires” without having to posit libertarian free will.<<ref "11">> Wolf does not name this perspective, but she briefly walks through some of the problems of vagueness associated with it. She claims it may be too broad, and that it fails to “differentiate between relevantly different desires.”<<ref "12">> She worries that a naïve compatibilism will be too overreaching, falsely demonstrating that very young children and even lower animals are morally responsible. Vitally, Wolf believes this naïve compatibilism fails to account for the fact that some desires we have “are desires we would just as soon be without.”<<ref "13">> This leads us to her second justification of moral responsibility, what she calls The Real Self View. She explains:

<<<
Desires, or, more generally, other features of our character, we cherish – we claim them for our own, whether we have cultivated them by design or approved them after we had come to see them as parts of us, and we would go to considerable length, not just to satisfy these desires, but to preserve them. These latter desires may be referred to as comprising our systems of value. These are what we think of as constituting our deepest selves.

In light of the distinction between values and other “mere” desires, or between one’s whole, partly superficial, partly alienated self and one’s deeper or real self, we can improve on the earlier proposal to understand freedom in terms of the ability to do what one wants. The kind of freedom necessary for responsibility, it might be suggested, is the freedom to do what one really wants – that is, the freedom to do what one’s core, deep, or real self wants, which may be different from what one’s strongest desires would urge upon one. To put it another way, the freedom necessary for responsibility on this account consists in the ability not just to behave in accordance with one’s will and to will in accord with one’s desires, but more specifically in the ability to govern one’s will (and so one’s actions) in accordance with the specific set of desires that constitute one’s system of values.<<ref "14">>
<<<

There seem to be many virtues of the Real Self View. First off, these claims seem intuitively right. Our psychology is complex, and moral responsibility does seem to require that we take into account the distinction between what is authentically our selves and what is inauthentic to our selves. Further, it shows why very young children and lower animals aren’t morally responsible, as they lack the depth required to have a system of value, an authentic self, and the ability to do what one really wants. 

Interestingly, as far as I can tell, the Real Self View isn’t clearly a compatibilist argument. Libertarians may hold all this to be true as well, and even claim that the ability to get at what one really wants requires libertarian free will. In fact, the Autonomy View seems far more capable of making sense of authenticity than compatibilism. Libertarianism has more tools to distinguish the real you from everything else. Setting that aside, we must consider whether or not a compatibilist interpretation of the Real Self View provides a sufficient account of our moral responsibility. 

At first glance, the Real Self View does seem to explain these special responsibility-defeating circumstances. Using Wolf’s examples, the Real Self View seems to explain why I am not responsible when the wind pushes me, circumventing my will and causing me to behave not in accordance with my will. Further, the Real Self View seems to explain why I am not responsible when hypnotism acts upon my will, manipulating my will so that I do not will in accord with my real desires. 

All of that said, while the Real Self View appears to explain Wolf’s examples of responsibility-defeating circumstances, it isn’t clear that it serves as a positive account of why we have moral responsibility. Even if the Real Self View isn’t a sufficient theory or justification of moral responsibility, however, at the very least, it does seem to be a necessary component of a sufficient theory of moral responsibility. Both compatibilists and incompatibilists can admire the insightfulness of the Real Self View. 

Wolf does not find the Real Self View satisfactory, even though she finds it compelling. She claims it has a serious flaw. She explains:

<<<
What makes the Real Self View a distinctively nonautonomous account of free will is its insistence that one’s status as a free and responsible being lies not in whether but in how one’s actions are determined. Specifically, freedom and responsibility are held to depend solely on whether one’s behavior can be governed by the dictates of one’s real self – never mind where one’s real self came from or why it came to dictate the behavior that it does. But it is not at all clear that we should nevermind where one’s real self comes from in evaluating one’s status as a free and responsible agent.<<ref "15">>
<<<

The Real Self View seems to be able to answer the special circumstances of the wind and the hypnotist. But the objection might be that these were manipulations of behavior and the will, not one’s true and deepest self. Examples of this deeper manipulation may help us understand exactly why the Real Self View, as a stand-alone justification of moral responsibility, might be flawed. The flaw would be that having the wrong kind of past can generate authentic selves which we intuitively don’t think are morally responsible (intuitions which Wolf is interested in explaining and justifying), but end up being morally responsible on the Real Self View (against our intuitions, and thus failing to meet the requirements Wolf sets out). 

Consider the case of the neuroscientist who manipulates the real me, my deepest desires, my system of values. We assume that the neuroscientist’s manipulation is a responsibility-defeater. Unlike the wind and the hypnotist, this special circumstance, isn’t merely manipulation of behavior or will, it is outright manipulation of the authentic self. Can the Real Self View match out intuitions, adequately describing the ways in which I won’t be morally responsible, or will it fail to match our intuitions? 

When the neuroscientist modifies those deepest desires and beliefs of an agent, the Real Self View seems to have two reasonable objections to the agent’s moral responsibility. The first objection would be that insofar as a manipulated being’s will derives from any remnants of the old authentic self, the remaining deepest desires, and essentially, to the degree that the ‘real self’ still exists, he remains morally responsible, but insofar as the manipulated being’s will derives from the deep desires implanted by the neuroscientist (and not the original, real self), the being is willing, and thus behaving, inauthentically, and thus responsibility is defeated. The second approach is a bit more extreme, but also plausible. The Real Self View might also suggest that the modified being is an entirely different entity, and so the original individual would not be responsible; rather, the new person which emerges (if a new authentic self emerges at all) from this manipulation would be responsible. 

Whether the neuroscientist’s manipulation splits an authentic self into a hybrid of an authentic and inauthentic self (as in the first objection) or ends the original authentic self (possibly creating an entirely new authentic self), the Real Self View seems to have reasonable outs to initial historical problems of manipulation of the authentic self.  

Wolf uses the example of the racist to pressure the Real Self View. The man in our example was raised and conditioned to be a racist. He has the complex psychology required to have an authentic self.  Racism is a part of his system of values, and it is either an expression of or a part of the deeper values which comprise his authentic self. Wolf claims:

<<<
It seems to me highly questionable that the man is responsible –and thus blameworthy – for his racist activities. For although these activities are governed by his values, his life – at least so I am imagining – had no room in it for questioning, for coming to see the reasons why racism is wrong. He didn’t have a chance to not be a racist, and so it seems unfair to blame him for acting out and expressing a racism he had no choice but to have.<<ref "16">>
<<<

In general terms, the case of the racist exemplifies those cases in which an agent’s behavior is determined by the agent’s values (or real self), but the agent’s values (real self) are themselves inescapably determined by forces external to the agent’s control. The flaw in the Real Self View is that it takes such cases to be unproblematic cases of responsible behavior. Many people share my view that these may not be cases of responsible behavior at all. Even if they are cases of responsible behavior, we must be given some explanation of why they are – of why an agent is more responsible for actions that are governable by his values than he is for actions that are governed by his nonvalued desires, if his values are no more within his control and are no more products of his choice than are the mere desires for which he is recognized not to be responsible.<<ref "17">>

Thus, I conclude that the Real Self View is unsatisfactory. What is particularly troublesome, however, is that the objection that led to this conclusion seems to force us straight back to the Autonomy View, a view that we have seen is riddled with problems of its own. If the racist, the Nazi, the victim of the deprived childhood are not responsible for their behavior because their behavior is governed by values that are shaped by forces beyond their control, aren’t we all deprived responsibility on the same grounds? After all, we are as much a product of our cultures as these individuals are of theirs. Is there any way to solve the problem of the Real Self View without returning to the problems of the Autonomy View?<<ref "18">>

That is an interesting perspective. I don’t take this circumstance to be completely responsibility defeating (with respect to his racism). That’s not my intuition at all. The wind, the hypnotist, and the neuroscientist seem to impose a kind of manipulation which bypasses an agent’s consent (perhaps there are things you can’t consent to) or endorsement, while the racist seems to have, at least to some degree, the sort of consent and endorsement that makes one responsible. Perhaps I’m disagreeing with the claim that it is even possible for a modern homegrown racist to have no room to question his conditioning. I think he may be pardoned to some extent for his racism, but I don’t see how he is entirely nonresponsible. How can we make sense of her intuition?

Note that Wolf thinks her objection to the Real Self View is distinct from her objections to the Autonomy View. I’m not convinced this is really the case, however, and I think we can make sense of her intuition by realizing that we’ve seen this objection before. Although she does not claim it, I believe Wolf is employing versions of the Systematic Manipulation Objection or the Poisoned Origins Objection (which she levied against the Autonomy View) against the Real Self View. To say that “the racist didn’t have a chance not to be a racist” is to call into question the historical validity of the racist’s authentic self, to deny the lineage and origins of his authentic self, which presumably defeats the racist’s responsibility. The authentic self of the racist, in this case, is determined by external forces, and that’s taken to be a problem. 

Not all compatibilists will be swayed by Wolf’s criticism. After all, the criticism seems only to hold merit if we are willing to accept that being determined by external forces which systematically manipulate or has poison one’s origins would be an authenticity or responsibility defeater. Accordingly, Wolf’s reason to deny the compatibilist interpretation of the Real Self View rests upon or stems from seemingly incompatibilist intuitions. I can see some compatibilists not finding those objections to have much merit at all. 

Wolf believes there is a way out for the Real Self View other than returning to the Autonomy View. This path turns out to be the third justification of moral responsibility, her own theory, the Reason View. She explains: 

<<<
When we reflect on the sources of these people’s [good] values or of their courage and commitment and integrity, we are not so concerned or upset by the thought that they are products of their environments…Focusing on cases of good-acting agents suggests that it is no obstacle to responsibility that one acts on values that themselves have been formed by forces external to the agent’s control. Reflecting on bad-acting agents, however, seem[s] to lead us to the opposite conclusion.<<ref "19">>

The relevant difference between the good-acting agents, shaped, say, by inspiring role models, whom we view as responsible and praiseworthy, and the bad-acting agents, shaped, say, by horrible role models or by the absence of role models or by brutal and impoverished upbringing, whom we exempt from responsibility and blame, is that the former have been led through reason, perception, good sense, and good data to adopt their values and live by them, while the latter have been shaped in ways that have kept reason and truth out.<<ref "20">>

It is by being rationally persuaded that these values are good ones that the agent makes them her own in a way for which she is responsible. But there is no analogous story to be told of the agent who acquires bad values from his culture. We cannot say that the racist is responsible for his racism if it results from his understanding of what is good about racism – for there is nothing good about racism for him to understand.<<ref "21">>
<<<

The doorway to the Reason View is an intuition that special circumstances which lead to bad values, beliefs, and actions are responsibility-defeating, while parallel circumstances which lead to good values, beliefs, and actions are not responsibility-defeating. Wolf wishes to qualify the Real Self View with the claim that moral responsibility is a result of employing one’s rationality. 

It is only in those cases in which an agent’s are determined by their rationality and an epistemic environment conducive to reason, that an agent could be held morally responsible. Those who have good values, beliefs, desires, and actions which are “formed, or revised or affirmed, in accordance with their reason and perception…have exercised all the powers of self-determination it is sensible to want.”<<ref "22">> The authentic self is a rational self. Reason makes us responsible. Employing reason is not only necessary for responsibility (most can agree), but it is sufficient for responsibility (this is the contentious claim).

On the Reason View, in these special circumstances, we excuse those who are determined by irrationality. People who could not but have bad values, beliefs, and actions are not morally responsible because they have “been pushed blindly along a path that, through no fault of their own, they could not recognize as undesirable or wrong.”<<ref "23">> Wolf is arguing that, by definition, one cannot have an authentic self, or any particular aspect of that authentic self, which is determined exclusively by influences of unreason. 

Before I offer any criticisms of further thoughts on Wolf’s view, we need to examine her disclaimer, as she believes many critics get her theory wrong. Let us give the Reason View the charity and justice it deserves. Wolf clarifies her view for us: 

Some people have understood my view to be too free to give praise – to imply, in particular, that anyone who acts well and does so on the basis of values she has gained from her culture or her upbringing can fairly be held responsible and praiseworthy for it. Still more have been concerned with the thought that my view automatically excuses virtually all criminals and exempts from blame anyone whose wrongful behavior can be traced to bad influences in his culture or upbringing. But these inferences rest on a misunderstanding.

Although I believe that there is an important disanalogy between good-acting agents and bad-acting agents, the disanalogy is quite specific: It is that a good-acting agent may have been irresistibly drawn to accept good values as a result of the exercise of good reason, whereas this can never be said of the agent who acts in a blameworthy way. It may be precisely because a person holds the values of her society up to reflection and questioning that she has no choice but ultimately to affirm (or reject) them. But if a man is irresistibly led to affirm bad values, this can only be because he was deprived of the ability to appreciate the reasons why those values are bad. This stress on the ability to appreciate reasons – reasons why one set of values deserves affirmation, while another set ought to be reconsidered and revised– is all-important. It is the possession or lack of this ability, and not the desirable or undesirable nature of the acts or the values themselves, that, on my account, makes the difference between responsible and nonresponsible agency.

Thus, according to the Reason View, a person who does the right thing for the wrong reasons deserves no more praise than a person who doesn’t do the right thing at all. Moreover, a person who does the right thing on the basis of values she doesn’t understand (a person whose acceptance of good values, in other words, is as blind and unreasoned as the acceptance of the racist’s values in our earlier example) is as little responsible for what she does as those whose paths lead to more objectionable behavior. 

Moreover, a person who does the wrong thing, though it must be for bad reasons, is not necessarily exempt from responsibility and blame. It is crucial to establish whether the person in question had reasons to act better available to him. In the cases I dwelt on, we imagined people who could not but have acquired bad values or false beliefs and so could not but have made bad decisions on the basis of them. But it is a real and difficult question how often such cases occur. If a person acts badly despite his ability to appreciate the reasons for acting better, then he is fully responsible and blameworthy for his choice. If, therefore, as some people believe, almost anyone is able to tell good values from bad (whatever her cultural or subcultural background), then almost anyone will be blameworthy should she choose a bad path.<<ref "24">>

I’d first like to offer the claim that the asymmetrical doorway to the Reason View isn’t obviously true. Wolf believes that when most people reflect on good values in people, they aren’t worried about the source or origin of those values, but when they reflect on bad values, they are worried about the source or origin. Wolf believes this asymmetry in folk-thought is the intuition which should drive us toward the Reason View. While I grant that folk-thought may have those differences, I don’t believe it is because they’ve thought much about it and decided there was actually a relevant and significant difference. Most people probably think (and perhaps they are mistaken in thinking) they have more important things to worry about than the source of good values in other people. Moreover, I would say the reason there is asymmetry is that, for whatever reason, people are naturally more interested in attributing blame than in attributing praise, and so naturally we tend to gloss over virtue and focus upon vice, even in matters of moral responsibility. I suspect that the asymmetry in folk-thought is not really a deeply inspected intuition, and that upon such inspection, people would be far more inclined to see symmetry instead. I take this as worrisome for Wolf’s argument because one of the primary goals of this article, according to Wolf, is to make sense of our intuitions about this topic. I don’t think Wolf nailed down the right intuition in this case, and in light of her goal, I worry it may not be an acceptable doorway to the Reason View. 

More importantly, Wolf suffers from Christine Korsgaard’s problem in that, at first glance, her theory provides unsatisfying answers to certain questions. What is a bad person? What is bad action? How can a person be responsible for doing wrong? Responsible persons seem, by definition, to be good and reasonable, and by definition exclude those who are wrong and unreasonable. The Reason View seems to cherry pick those who will and won’t be responsible by an asymmetrical standard which frankly seems unintuitive. Why can’t an authentic self be evil and responsible for irrationality and for choosing to be irrational? Wolf knows what’s coming. Does she dodge the bullet? 
 
From her clarification, the ability to rationally appreciate and understand why a value, belief, or action is right or wrong is the key to dodging this bullet. There seems to be two cases in which one can be held responsible for screwing up: 

# Doing the right thing or having the right value, desire, or belief for the wrong reason while having access to the right reason.
# Doing the wrong thing or having the wrong value, desire, or belief when one had access to the right reason to do a better thing or have a better value, desire, or belief.<<ref "25">>

Deontologists and Virtue ethicists explicitly seek the first. One might take this as checkmark in favor of Wolf’s view of moral responsibility.  The second is the more important case to solving the controversy. I must admit, Wolf hits upon something that is patently true to me in the second case. The question it forces us to ask goes something like this: How could we hold a person responsible for not understanding something was wrong (or bad), and consequently for being a person with wrong values, beliefs, desires, and/or actions, when the person did not have the necessary epistemic grounds upon which to generate the reason that it was wrong? There seems to be a potent kernel of truth in Wolf’s approach to moral responsibility. Just as I suggested before in the case of the Real Self view, it seems likely we must capture whatever it is in the Reason View, in light of Wolf’s clarification, that is necessary for moral responsibility.<<ref "26">> Our work is not finished, however, as I have three remaining questions for the Reason View:

# While we can make sense of an agent being responsible for bad action, can we make sense of an authentically bad people?
# Does the Reason View make sense of our initial intuitions which led to us to the Autonomy View while ultimately remaining compatibilist? 
# Does the Reason View survive the historical objections levied against the Autonomy View and the Real Self View? 
To the first question, exactly what counts as an authentically bad person may be a bit different than we would initially expect. An authentically bad person is a person who consistently fails to take the morally best option for the right reason, with the assumption that they had access to the right reason. Having access to the right reasons is odd. Exactly what counts as being rational and what it means to be motivated by rationality is a serious worry I have for Wolf’s theory. Rationality requires context. Lots of tricky and weird things seem to fall out of this fact.

For example, I think it takes a pretty complicated and unintuitive epistemic theory to show why racism or sexism in all cases and circumstances is not even minimally rational (don’t misunderstand me; I certainly think modern racists/sexists generally are being irrational in their racism/sexism). In fact, it seems very likely to me that someone who had access to only a limited amount of information (it may even be the “best data” available at the time) might actually be rational in accepting an unfortunately discriminating view. Perhaps one of the reasons racism and sexism have taken so long to be considered bad things is because they aren’t, epistemically-speaking, conclusions which are rationally as easy to arrive at when compared to other ethical issues (e.g. genocide, killing young children for sport, direct forms of slavery).
 
Take Aristotle’s misogyny. He might have been the most brilliant human to ever live. If any human could be called rational, it would have to be Aristotle, right? Yet, we can look back after thousands of years (with the benefit of billions of lives of consideration of these ethical issues which Aristotle didn’t have) and see that he made mistakes, his misogyny being one of them.

Do you really want to look at Aristotle’s misogyny (or his racism) which are products of his environment and his reasoning, and claim he was obviously irrational in this respect? It’s possible, I admit. Maybe gender equality is that obvious (it feels like it is to us today). If so, then surely Aristotle was rational enough to know misogyny was wrong, but decided not to be guided by that moral reason, and hence is morally responsible for his misogyny. 

It seems to me, however, that we can easily tell a plausible story about why gender equality was not obvious or accessible to Aristotle. Perhaps a deeply unfortunate self-fulfilling prophesy occurred in his culture. For whatever reasons, men thought or acted as if women were stupid, overly emotional pieces of property (as did many future generations, unfortunately), so women were treated and conditioned that way. Due to this conditioning, women’s development was stunted, and they ended up mirroring the social expectations. That vicious sociological cycle, however, may not have been readily apparent to Aristotle, and from what he could tell from his own limited experience, using what evidence he had, his unfortunate generalizations about women may have been epistemically justifiable, i.e. rational. 

To say that Aristotle “could not but have been a misogynist” is just to say that it was rational for him to be a misogynist. He was not morally responsible for drawing a conclusion he couldn’t have drawn, and hence is not morally responsible for being a misogynist. Yet, it seems like we should praise him, if rationality is the mark, for doing the best he could with what he had. Wolf’s racist (bypassing my earlier objection) seems to be the same. I don’t see why we would claim that a rational person, drawing rational conclusions, being motivated by rational reasons, should be held nonresponsible on Wolf’s theory. 

	What if we could describe every bad belief, desire, act, or conclusion drawn as being rational? What does it take to be irrational? Reasons guide you to do whatever you do on Wolf’s theory. If one reason wasn’t salient or relevant enough to an agent, then is it really the agent’s fault if he isn’t motivated by it? In order to explain the authentically bad person or even wrong action, Wolf needs to provide a plausible account of how one can possess the right sorts of reasons, but not be motivated by them. If we don’t have libertarian free will, it seems like having the right reason, but not being motivated by it is just being irrational. An authentically bad person is a person who consistently fails to take the morally best option for the right reason, with the assumption that they had access to the right reason, just is a consistently irrational person. 

But, if that is true, I fear that nobody can be at fault on Wolf’s theory. Rationality, after all, seems to be that which makes a person morally responsible. Wolf may not have dodged the bullet after all.

I’m hoping I’ve made a big mistake here. I have a lot of sympathy for her view. I think there has to be something fishy going on in the worry I presented, but I can’t seem to put my finger on it. Exactly why Wolf can dodge the bullet isn’t coming to me. For now, however, I’m not convinced we can really make sense of authentically bad people, nor am I sure that we can make sense of screwing up, as I defined earlier. 

In light of my response to the first question, I propose the last two questions are asking the same thing, even though it wasn’t obvious at first glance. To the second question, regarding historical objections, the Reason View has added the rational qualifier to the Real Self View in order to dodge the historical objections. If her theory dodges the bullet, and it can explain away the Autonomy View intuitions which ground the historical objection, then I see no reason why the Reason View doesn’t defeat the historical objections. 

Does the Reason View make sense of our Autonomy View intuitions? Perhaps it does. Again, it all rests upon whether or not Wolf’s theory dodges the bullet. The problem, of course, is that I think the reason her theory might not dodge the bullet is directly because of our incompatibilist intuitions. 

Just as I said before that a libertarian may actually (and probably does) employ the Real Self View alongside the Autonomy View, it seems as though the Reason View has something to it which may also be worth employing for the libertarian.

-------------------------------

<<footnotes "1" "Wolf, Susan. "Freedom within Reason." //Personal Autonomy: New Essays on Personal Autonomy and Its Role in Contemporary Moral Philosophy//. Ed. James Stacey Taylor. New York: Cambridge UP, 2005: 261">>

<<footnotes "2" "Ibid., 259">>

<<footnotes "3" "According to Wolf, autonomy just is libertarian free will. This is not a widely accepted definition, but I happen to be very sympathetic to that definition. Wolf’s primary goal is to provide an account of our moral responsibility, and she seems willing to jettison many standard definitions of autonomy to reach that goal. ">>

<<footnotes "4" "Ibid., 261">>

<<footnotes "5" "I’m only pointing to the tip of the iceberg for this problem due to space constraints in this paper, but rest assured, it is an iceberg of a problem for the libertarian. For example, the standard regress problem appears to be alive and well in this iceberg. ">>

<<footnotes "6" "Ibid., 261-262">>

<<footnotes "7" "Ibid., 262">>

<<footnotes "8" "Ibid., 263">>

<<footnotes "9" "Ibid.">>

<<footnotes "10" "Ibid.">>

<<footnotes "11" "Ibid.">>

<<footnotes "12" "Ibid., 264">>

<<footnotes "13" "Ibid., 264-265">>

<<footnotes "14" "Ibid., 265">>

<<footnotes "15" "Ibid.">>

<<footnotes "16" "Ibid., 266">>

<<footnotes "17" "Ibid., 266-267">>

<<footnotes "18" "Ibid., 267">>

<<footnotes "19" "Ibid., 267-268">>

<<footnotes "20" "Ibid., 269">>

<<footnotes "21" "Ibid.">>

<<footnotes "22" "Ibid., 270">>

<<footnotes "23" "Ibid.">>

<<footnotes "24" "Ibid., 271-272">>

<<footnotes "25" "Presumably, there may be degrees of rightness and wrongness in Wolf’s model.">>

<<footnotes "26" "I fear that I cannot quite put my finger on it just yet. It will require more thought.">>
In “The Pyrrhonian Problematic,” Markus Lammenranta elucidates various approaches or versions of the Pyrrhonian Problematic. He considers three interpretations of it. He argues that the first two interpretations are not problematic at all, as they do not ordinarily and on a wide-scale “induce suspension of belief,” but that the last interpretation actually does pose a significant skeptical challenge to modern philosophers.<<ref "1">>

The first interpretation points to the impossibility of finite beings having justified beliefs via the regress problem found in the five modes of Agrippa.<<ref "2">> The second interpretation, what Lammenranta calls the “Practical Problem,” claims that because all opposing arguments are equipollent (have equal force or merit), one can’t decide which arguments should be believed, and thus one should suspend all beliefs.<<ref "3">> The third interpretation, the “Dialectical Problem,” stems from the worry that we cannot resolve disagreements in the dialectic without resorting to question begging, a practice which he considers to be normatively and/or rationally unacceptable, and thus the dialectic becomes at least unsatisfactory if not outright impotent.<<ref "4">>

I can’t hope to provide my thoughts on Lammenranta’s arguments concerning each of these interpretations in the space I have, so I will concentrate on the first interpretation. I’m going to explicate Lammenranta’s argument, offer questions of various steps along the way, and consider whether or not he is right in thinking that the regress problem fails to pose a serious skeptical challenge because it does not ordinarily induce wide-scale suspension of belief.

Naively, the broad version of the skeptical problem goes:

# If we are not justified in believing anything, then we should suspend our beliefs and not believe anything.<<ref "5">>
# We are not justified in believing anything.
# Thus, we should suspend our beliefs and not believe anything.

Before we can even get to why one would agree to the controversial second premise, and essentially before the nuts and bolts of this argument (which support the premises) can be pieced together, we should be worried already about the overall goal and nature of the argument. Obviously, this broad argument is self-refuting, as by the conclusion, the propositions themselves are not to be believed. Our initial inclination may be to dismiss any attempt to make this broad argument in virtue of the self-refutation alone.

Instead of dumping the argument entirely, Lammenranta points out that this is part of the dialectic strategy of the Pyrrhonian skeptics, who merely employ the argument using propositions and arguments that we, the dogmatists, are willing to accept. Supposedly, this dialectical move does not pose a problem for the skeptic, but does pose a problem or paradox for the dogmatist who may be willing to accept the premises and the form of the argument, but not the conclusion. 

Does the dialectical move really not pose a problem for the skeptic? If so, does it matter? Is the regress problem possibly like a “ladder that we throw away once we have climbed up it?”<<ref "6">> This self-refuting move reminds me of standard, introductory interpretations and criticisms of relativism. Admittedly, I don’t see why one would engage in the dialectic at all as a skeptic, and yet perpetual inquiry does seem to be at the heart of Pyrrhonianism. What reasons or justified beliefs could they give for inquiry and engaging in the dialectic? I don’t know. 

Further, even when we might be inclined to suspend all of our beliefs, it may be part of the ordinary human condition that we form and hold beliefs. In this case, the skeptic may argue that we sit in a cycle whereby we toggle between the suspension of beliefs and the formation of beliefs. Perhaps the skeptic is in the business of building, climbing up, and disposing of ladders. As Lammenranta points out, even if we are caught in some skeptical cycle, it would be plenty destabilizing to our beliefs and a serious epistemic challenge.

Perhaps these concerns don’t really matter, as ultimately the dogmatist should be most worried about whether or not the argument is really challenging his own view, without considering how it impacts or works for the skeptic. If the skeptic is right, it doesn’t really matter how it works for the skeptic, does it? 

Even if we don’t agree or accept this broader argument, we can at least hope to gain some insight into which theories of justified belief are in a better position to explain the force of this skeptical argument and perhaps where it goes wrong. Since the form of the broad argument is valid, let us set aside the self-refutation issue and focus upon the premises. Why should we agree to the first premise? 

One should only hold a belief which is justified. It isn’t clear exactly how we should understand “should” here. Is it an ethical obligation, an epistemic obligation, or both?<<ref "7">> For example, maybe we have an epistemic duty not to hold an unjustified belief, but ethically we do. I don’t know. Admittedly, several interpretations of this premise are very compelling. Unjustified beliefs seem arbitrary, unuseful, and both practically and theoretically unacceptable. This premise may not get as much attention or support as it deserves, and that’s probably because we have strong intuitions which favor it.

In support of the second premise of the broad argument, the Pyrrhonian skeptic employs the narrower regress problem. Lammenranta explains:

# In order to be justified in believing something, one must believe it on the basis of good reasons.
# Good reasons must themselves be justified beliefs.
# Therefore, in order to be justified in believing something, one must believe it on the basis of an infinite number of good reasons.
# No human being can have an infinite number of good reasons.
# Therefore, it is humanly impossible to have justified beliefs.<<ref "8">>

This regress argument provides compelling support for the second premise of the broader skeptical argument. Defeating the regress argument is important, and many theories try to resolve the problem. Coherentists do not need to agree to the third premise, agreeing to infinitism because beliefs and reasons are justified through a finite circularity. Foundationalists deny the first premise because the chain of justification ultimately boils down to basic beliefs which don’t themselves require further justification. Lammenranta claims that epistemic contextualists can deny the second premise because “the chain of good reasons can terminate in beliefs that are not themselves justified.”<<ref "9">> Of these three approaches, the contextualist’s denial remains the only confusing one to me.  Lammenranta’s explanation of why the contextualist can deny the second premise seems to be just the outright denial of the second premise. 

Perhaps I just don’t understand contextualism.<<ref "10">> Contextualism doesn’t exactly seem to be a theory of justified belief in quite the same way as coherentism and foundationalism, but rather a theory of semantics and the use of language in attributing knowledge. In this theory, claims to knowledge are true or false based upon the context in which they are uttered. So, while the proposition “X knows p” in context S1 may be true, the same claim may be false in context S2. 

The contextualist’s response to this problem of skepticism seems to be that within the context of skepticism, which has very high epistemic standards, all (or most all) propositions “X knows p” are indeed false. However, in other contexts which don’t have such high epistemic standards, which may be most contexts, propositions of the sort “X knows p” can be true. 

Beliefs are justified in virtue of the context in which they are considered. I don’t think the contextualist is claiming that in all contexts the second premise should be denied, unlike the denial of the first premise by the foundationalist or the third premise/conclusion by the coherentist. In the context of skepticism, premise two seems acceptable, and thus the regress may hold, and thus the broader argument may also hold. The contextualist avoids skepticism in most contexts by embracing skepticism only in the context of skepticism and disregarding it in other contexts. The second premise seems to be denied only most of the time, but not always. Generally, good reasons are not justified by other beliefs but rather by the context.
In any case, these theories address the regress by denying premises which allow them to deny what Lammenranta calls infinitism. He believes it is the skeptic’s job to show why infinitism (regarding this chain of justification) is plausible at all.

In our ordinary “practice of giving and asking for reasons,” we find that justification is finite. It isn’t appropriate or normal to continue asking ad infinitum “Why?” and “What justifies that belief?” in the everyday sort of language game.<<ref "11">> The skeptic, however, is convinced that we should continue asking for justification, even when ordinarily we don’t. Hence, the skeptic pushes for infinitism. Lammenranta also considers the possibility that a skeptic may find infinitism true even in the case of foundationalism. 

Lammenranta concludes that because the skeptic isn’t adhering to ordinary practices of giving and asking for reasons, and because our usual justificational practice isn’t concerned with the skeptic’s standards at all, we should not take seriously the skeptic’s inappropriately high epistemic requirements. Essentially, at least from Lammenranta’s perspective, the Pyrrhonian regress problem should not induce wide-scale suspension of belief because our ordinary epistemic practices aren’t concerned with the skeptic’s inquiry. 

I don’t know if he is right about this. Just because the regress problem does not ordinarily induce wide-scale suspension of belief does not clearly demonstrate that it isn’t a serious skeptical challenge. Why isn’t a serious challenge for a philosopher, which the regress problem seems to be if the various possible solutions (e.g. foundationalism) don’t work, not also a serious challenge for ordinary folks? Also, just because skeptical arguments don’t, as an empirical fact, actually cause us to suspend all our beliefs doesn’t mean that we shouldn’t suspend all our beliefs. What we ‘should do’ and what we ‘actually do’ are different, and I think the skeptic is pointing out what we should do, while Lammenranta is pointing toward what we actually do. Perhaps Lammenranta is ultimately, although not explicitly, employing a contextualist sort of argument. 

------

<<footnotes "1" "Markus Lammenranta, 'The Pyrrhonian Problematic,' in //The Oxford Handbook of Skepticism//, ed. John Greco (Oxford: Oxford University Press, 2008): 9-10">>
<<footnotes "2" "Ibid. 10">>
<<footnotes "3" "Ibid. 13">>
<<footnotes "4" "Ibid. 18">>
<<footnotes "5" "Ibid. 10">>
<<footnotes "6" "Ibid. 11">>
<<footnotes "7" "We need to consider how those pieces fit together as well.">>
<<footnotes "8" "Ibid. 11">>
<<footnotes "9" "Ibid. 11-12">>
<<footnotes "10" "Be patient and lenient with me, please.">>
<<footnotes "11" "Ibid. 12">>
An intention is the aim, plan, or purpose of an action. Intentions demonstrate the “for the sake of which” of an action. While actions can fail or succeed, intentions don’t admit of failure or success in the same way. An intention seems to be an expression of our motivations. Ultimately, an intention is the result of a choice concerning what one will pursue and why, and it is obviously a significant, practical aspect of moral philosophy.

 In standard forms of utilitarianism, intentions are morally irrelevant, as only the results of action have any value. In virtue theories, intentions are morally relevant to some extent, as they are crucial to the psychology of the virtuous agent. I’m going to explore whether and to what extent (if any) intentions are morally relevant in Kant’s ethics. In order to answer this question, we will investigate what Kant has to say about the good will, action, and duty. 

Kant begins the Groundwork by priming our intuitions about the nature of the good will. He says only a good will is good and nothing else is absolutely good without limitation.<<ref "1">> In contrast to the good will, other mental talents, inclinations, and psychological characteristics can be desirable (even encouraging the good will), being contingently and circumstantially good, but they aren’t necessarily and always good because they can be used for evil and by an evil will. Even actions have conditional moral value.<<ref "2">> Only a good will is necessarily, unconditionally, and always good.

A good will is not good because it causes some other end, rather it is an end in itself. Even a will which isn’t efficacious is still good, shining by itself like a jewel.<<ref "3">> This is a key consideration for answering our question concerning the moral relevance of intentions in Kant’s theory. Note that whether or not action bears the sort of fruit we expected, as sometimes it doesn’t, a good will underlying that action remains unblemished and just as morally potent and worthy. In contrast to utilitarianism (a theory which Kant seems to have anticipated), Kant’s theory is far less concerned with consequences of actions, and far more concerned with the will which expresses action.<<ref "4">> In this light, good intentions seem to have similar characteristics to the good will, and thus intentions seem morally relevant in Kant’s theory.

We come to realize that the good will is unconditionally valuable because it is determined by reason and the moral law.<<ref "5">> Obviously, action need not be determined by reason or the moral law. We may act from our inclinations, our instincts, and other sentiments. Actions, unlike the good will, are suspect. To be clear, I am not saying that actions cannot be valuable or have merit. Actions certainly can have moral worth according to Kant’s theory, but only under certain conditions. Our duty, which springs from the moral law, is essential to understanding the relationship between good will and action. 

We must act from, not merely in accordance with, duty.<<ref "6">> An action has moral worth only when it is selected by the moral law and executed out of respect for the moral law. The intentions behind our actions matter. If we intend to do action X for the sake of desire satisfaction or mere happiness, then that action lacks moral worth. In contrast, if we intend to do action X solely for the sake of the moral law, then our action has moral worth. The intentions behind our actions are the essential ingredient to determining the good of the action. Kant provides some famous examples of which elucidate the relationship between duty, intention, and action.

The honest shopkeeper acts in accordance with and in no way contrary to his duty to serve people honestly.<<ref "7">> Yet, he is motivated by self-interest, acting not from duty, but from merely prudential reasons. His action may be right because it conforms with his duty, but it is not good action because it is not done from his duty.<<ref "8">>

The suicidal man who wants to die “yet preserves his life without loving it, not from inclination or fear but from duty” has a maxim with moral content.<<ref "9">>  The man had a duty to preserve his life, and despite his inclinations contrary to his duty, the man acted from duty alone, and thus he performed an action of moral worth. 

Likewise, the sad philanthropist who has no emotion of sympathy for others and yet is beneficent from duty alone is to be praised. His action has “genuine moral worth.”<<ref "10">> To be beneficent from inclination, which is merely in accordance with but not from duty, lacks moral worth. This makes sense, as surely the sad philanthropist cannot be held directly responsible for his emotions, but he can be held responsible for rational choice and acting from duty. 

Pathological love, like other inclinations, cannot be commanded. We cannot be held responsible for inclinations, although we are held responsible for acting from inclinations. Practical love, in contrast to pathological love, can be commanded. Acting from duty can be commanded, and we can be held responsible for this.<<ref "11">> Our intention is morally relevant to action. An action has merit solely in virtue of being performed out of respect for the moral law. 

Kant’s examples, such as that of the sad philanthropist, sit in stark contrast to the virtue ethicist’s assessment. Having the right sort of inclinations and emotions are central to being virtuous, and yet, as Kant points out, it is only the rational choice to act from duty alone which has any moral relevance. Intentions are morally significant, but the sorts of intentions which Kant’s theory demands of us are very different from the sorts demanded by virtue theories. 

Intentions and universal moral law seem to be at the heart of Kant’s theory, in contrast to action and consequences as found at the heart of consequentialist theories or character and inclination as found at the heart of virtue theories. If the purpose, aim, or goal of an act is to follow the moral law, acting from duty, only then is that action a good action. So, while the moral law supplies us with the content of what is right and wrong, our intentions seem to be necessary conditions for achieving anything of moral worth. Intentions are clearly morally relevant in Kant’s theory of ethics. 

Since we’ve briefly sketched out Kant’s position, we should briefly evaluate it. What parts work and what parts don’t; which aspects are strong and which are weak? Do we have lingering questions or considerations which require clarification (issues that Kant may even address elsewhere)?

In the general examination of the moral relevance of intentions, it may be useful to reflect upon our moral intuitions to see if they offer any guidance. For example, intentions seem so potent a concept in Kant’s theory that they seem to overshadow actions almost entirely. Kant lends almost no credence to consequences. Do our intuitions really match that? Surely, we are tempted to think that consequences matter, even if only a little. Shouldn’t we strongly prefer action in accordance with the moral law, even if it isn’t out of respect for the moral law, to action contrary to the moral law? We may even be tempted by our intuitions to agree that acting out of respect for the moral law is morally better than action that merely accords to the moral law, but also claim that the later is still morally better than nothing or morally better than acting contrary to the moral law. It isn’t clear that Kant makes room for this. Moral intuitions may be a problem for Kant’s theory.

Take the example of the evil man who is stranded on an island and yet has every intention of blowing up the world with a doomsday device. He tries to blow the world up, but he fails due to his circumstances. It seems like Kant will call this man evil. Our intuitions agree on this point. We might, however, ask: Isn’t this man better, in some morally significant sense, because he is unsuccessful and his actions fail to blow up the world? Maybe. 

I’m not saying Kant doesn’t have a response to arguments from moral intuitions, but it does seem to be a possible problem for Kant’s theory. Some of us may feel the pull of intuitions which wish for action and consequences to be a counterbalance to intentions. Even the dreaded egoist who just so happens to miraculously act in the accordance with the moral law (however improbable that may be) does seem to be doing good, to be doing something of moral worth, to get at least one thumb up from the objective spectator, even if he doesn’t get both thumbs up. It is here I feel unsatisfied by the role and raw strength of intentions in Kant’s theory, particularly as it overshadows consequential thinking of any sort. 

At the heart of this problem is really a discussion about the natures of and relationship between the Right and the Good, which is sadly way beyond the scope of this paper. I wish Kant were clearer on these fundamental metaethical issues.<<ref "12">>

Perhaps, for example, there is possible distinction between Right action and Good action in Kant’s theory. We might interpret Kant as claiming that right action is merely acting accordance with the moral law, but that good action is right action done from duty alone. This makes sense of the claim that an action with any moral worth, i.e. goodness, is both in accordance with and for the sake of duty. Moral worth is then a value attribution of the good. This strikes me as being somewhat odd, as ‘right’ is very incomplete on this interpretation. Another interpretation seems to be that right action requires being both in accordance with and from duty, and the fact that it is good, hence good action, is a product of it being completely right. 

Further, we might be worried about the goodness of the good will. Admittedly, it seems analytically true that the good will is unconditionally good (what else could it be?). But, to say, for example, that “the good will is unconditional but not complete” raises other questions or concerns. We need a theory of the good. Clearly, I’m only touching upon the tip of an iceberg. 

There are several strengths of the argument as it is formulated. Going back to my intuitions, I find that intentions should be a very significant aspect of any viable moral theory, and I would reject a moral theory that didn’t view intentions as being morally relevant. For example, there is a moral distinction between intentionally stepping on my foot and unintentionally doing so. Yes, both have the same consequences, but why someone performed the action also matters. Intentions seem intuitively crucial in this way. If a person unintentionally stepped on my foot, upon realizing what happened, they might ask for me to pardon them, and I would have to view their action as morally benign. If someone intentionally stepped on my foot and smirked at me, I would have to view their action as being a bit evil. Interestingly enough, someone may step on my foot intentionally for a good reason, and while I might not have realized it at the time, upon reflection, I may be grateful that they intentionally stepped on my foot. Intentions intuitively are a moral matter.

I’m going to conclude with one of the greater and yet sometimes neglected strengths of the argument Kant has given us in this section. This theory concerning intentions makes sense of moral responsibility in ways that alternative theories fail. I alluded to this earlier, and I think it is a fantastic aspect of Kant’s theory. It seems as though many things which virtue theorists and consequentialists wish to hold us responsible for are not the sorts of things for which we can be responsible. For example, we can’t see all of the consequences of our actions, and we can’t control which emotions and inclinations we have. What is “up to us,” however, are our intentions, and because of this, Kant’s emphasis on intentions provides a better perspective on moral responsibility than other theories. 

---------------------------

<<footnotes "1" "Kant, Immanuel, and Mary J. Gregor. //Practical Philosophy//. Cambridge: Cambridge University Press, 1996: 4:393">>
<<footnotes "2" "4:397">>
<<footnotes "3" "4:394">>
<<footnotes "4" "4:399-400">>
<<footnotes "5" "4:400 and 6:213">>
<<footnotes "6" "4:397">>
<<footnotes "7" "Ibid.">>
<<footnotes "8" "6:224">>
<<footnotes "9" "4:398">>
<<footnotes "10" "Ibid.">>
<<footnotes "11" "4:399">>
<<footnotes "12" "Obviously, I’m grateful to receive what I’ve got; I don’t mean to complain. ">>
VIM, violence inhibition mechanism, is a functionally defined (Input->VIM->output) affective state. It produces a withdrawal behavior provoked by aversion to displays of distress in other members of the species. This is a necessary condition (although probably not sufficient) for moral competence, where moral competence is concerned with an ability to consistently do the right thing, perhaps for the right sorts of reasons and/or with the right sorts of affective states. Without VIM, an individual will not develop a distinction between moral (e.g. don’t torture babies) and conventional rules (e.g. wear green on St. Patrick’s day), and they will fail to recognize and empathize with others in pain, distress, and sadness. Since VIM and these capacities are thought to be necessary conditions for moral competence, and since psychopaths lack VIM and these capacities, psychopaths are not morally competent.

Blair studied a fairly small number of psychopaths (I believe it was around 10 psychopaths and 10 non-psychopaths). He predicted that psychopaths will: (1) fail to distinguish between moral and conventional rules, (2) handle moral rules like conventional rules regarding permissibility, and (3) be less likely than normal folk to identify pain or sadness in others. The first and last prediction was shown to be the case, and Blair explains this in terms of psychopaths lacking VIM. We might worry that this test is far too small a sample size, but I believe it has been confirmed by other tests.

In another test, psychopathic children were tested for the ability to determine six basic emotional expressions (at given stages, with certain accuracies, weighted for IQ, and compared to a control group). They were shown to be less sensitive to fear and sadness than non-psychopathic children. Again, this is supplied as evidence for the moral incompetence of psychopaths.

What is interesting is that psychopaths often know (in the cognitive sense) what others expect in terms of moral judgments. Psychopaths are excellent manipulators. Even if they actually knew what they ought to do (which is part of the debate here), they fail to be motivated by moral judgments/beliefs.

Autistic individuals are compared to psychopaths because they exhibit similar problems. Autistic individuals can lack empathy and the sort of social emotions that might be required for moral competence (depending upon how you want to define moral competence). They can often treat people merely as a means. I'm thinking of the anecdote where the autistic child used his mother's hand to open the refrigerator, as if she were merely a tool. Unlike psychopaths, autistics are thought to distinguish moral and conventional rules. Although autistic individuals can’t mentally represent another person’s pain, Blair claims that autistic individuals do have VIM.

We can raise some worries, however, about the moral competency of autistic individuals. While the social handicap of autism can prevent them from deceiving others, preventing them from corruption and ugly dispositions (jealous, lying, cheating, etc.), this moral innocence isn’t moral character or agency. In many cases, it seems as though autistic individuals seek order (and sometimes morality) simply out of self-preservation, for the sake of having rules and regulation to make life livable, and not out of moral feelings and for the sake of the moral law.

These pathologies might suggest that human beings are moral beings because of our affective and perhaps even instinctual natures. VIM, for example, might be the result of evolutionary selection, where populations with VIM likely lived and prospered and populations without VIM perished (which makes a lot of sense). Moral competence isn't always up to us. We have to be born with certain conditions and capacities (and likely raised in certain ways) to be morally competent.

-----------------------

Confabulation is post hoc rationalization, where arbitrary “reasons” or stories are automatically, spontaneously, and possibly involuntarily created to justify a judgment or belief.

Dumbfounding is being unable to tell how or why one reached a judgment or why a belief is justified. When all reasons that a person did have for a belief or judgment are rejected and shown to be in error, the person sticks with the belief or judgment anyways. What justifies the belief or judgment ends up being an intuition, not a reason. This intuition is not based upon reasons at all, and instead it is associated with automatic, quick, non-cognitive, and unconscious reactions. 

Both confabulation and dumbfounding appear to be associated more with deontic (and perhaps rule utilitarian) reasoning than consequentialist reasoning. Consequentialist reasoning is generally slow, it employs explicit and conscious reasoning (likely using our frontal lobes/cortex) which sits in contrast to deontic "reasons." 

Confabulation and dumbfounding demonstrate a profound rift between the cause and (what we hope to be) justification of our beliefs. They reveal that reason-based justification is merely epiphenomenal and post-hoc. Intuitions and affective dimensions of our psychology seem to be running the show. Our beliefs are manipulated by rationally arbitrary causal factors. We might be very unhappy with this problem because we generally want our reasons, rather than intuitions or affective dispositions, to be both the cause and justification of our beliefs. 

Haidt’s social intuitionist model seems like a serious threat to rationalist models (who want reasons to justify and cause our moral judgments and beliefs). Standard Kantian moral theories, for example, seem impossible to fulfill if we confabulation and dumbfounding do show that the cause of our moral beliefs or judgments will be something other than reason. I would go so far as to say that many (if not most or all) cognitivist moral theories are in trouble. 

Railton argues that the causal factors which drive intuitions need not be rationally arbitrary. Once explicated, those causal factors might be good reasons. See the lawyer example. In terms of what was accessible to her, consciously and explicitly, she didn’t have a good reason to change her argument. But, there were some very good, objective reasons to change her argument that seem to be independent of her. 

I’m not sure if Railton’s argument is all that successful. Yeah, there were good reasons, but were they actually her reasons? No. The worry that cognitive moral judgment is impossible if we are reduced to confabulation and dumbfounding appears to remain, even after Railton's argument. That there are theoretically, objectively good reasons for a mathematician to believe Goldbach’s conjecture doesn’t mean the mathematician has access to or actually employed those reasons or that the mathematician’s intuition is based upon those reasons. A same sort of problems seem to exist for moral judgment. 
I’m going to examine contemporary notions of autonomy, present Kant’s theory of autonomy, investigate the moral significance of this autonomy, compare his notion with contemporary notions, and consider a possible problem for Kant’s theory. Contemporary views of autonomy generally hinge upon three fundamental concepts of self-governing: sovereignty, authenticity, and accountability.<<ref "1">> Contemporary theories of autonomy try to offer an account of at least one (if not all three) of these concepts, while Kant offers an account of authenticity and accountability.

By sovereignty, we speak of physical, political, and social self-rule.<<ref "2">> Autonomy based on sovereignty is concerned with coercion, socio-economic status and opportunity, self-ownership, etc. For example, when someone puts a gun to your head and tells you to jump, you seem to have a choice about whether or not you will jump in a significant sense, and yet you seem forced to jump (lacking a choice) in another substantial sense. This latter sense, essentially coercion, is a violation of the sovereignty. 

Sovereignty is a capacity to govern oneself in the most obvious and literal sense: self-governing as political self-governing. Further, sovereignty seems to be a set of sociopolitical goals and rights we seek. For example, children eventually want to make life decisions for themselves; people don’t want a government suppressing their free speech; and, no one wants a gun pointed at his head. 

The second fundamental concept, authenticity, pervades contemporary analyses of autonomy. The central problem of authenticity is figuring out how to differentiate our authentic desires and beliefs from inauthentic ones. When a person isn’t being authentic, he is thought to lack autonomy.<<ref "3">> For example, a person profoundly manipulated by hypnosis may be furnished with inauthentic desires which aren’t a genuine part of the authentic self of that agent, and acting upon those desires would demonstrate a lack of autonomy. Further, depression, drug-use, systematic conditioning, etc. are often considered autonomy-defeaters in authenticity-based models of autonomy.  We must ask: who is the ‘real you’? There are many routes to answer this question.4   Authenticity-based autonomy may or may not be a capacity, depending on which model is considered. Authenticity, however, is certainly a goal. We want to be ourselves, and we want to be governed primarily by our authentic selves. It is unclear how authenticity plays a role in our rights other than pointing out “who” we assign rights or duties to.

Accountability is the last branch of contemporary notions of autonomy. Autonomy, in this light, is an explanation of whatever it is about us that makes us morally responsible agents. Generally, the requirements of accountability include rationality, consciousness, self-reflection, etc. In addition to these requirements, some concept of “choice” is the vital accountability-making ingredient to our autonomy. For the libertarian, choice originates in an agent’s free will. For the compatibilist, choice is just doing what you want to do. In both cases, autonomy requires an agent to be free from external forces (insofar as that is possible) and to be bound only by one’s self in making choices. In contrast to sovereignty, this concept is wrapped up in the metaphysics of self-governing, describing choice at a more fundamental level. Taking the gun example, whether or not you will jump is ultimately still ‘up to you’. You may get shot for choosing not to jump, but that is your accountability-making choice. Models of autonomy which focus upon accountability are primarily concerned with the capacity to choose between right and wrong. Further, being a moral agent, being accountable for one’s choices, and making choices that matter, is a goal. Life is meaningful because we are accountable – nothing really matters without this capacity.  Again, it is ordinarily thought that our moral obligations and rights exist in virtue of accountability-making autonomy. 

Kant’s autonomy deals in freedoms, in both the negative and positive senses. Independence from external forces is freedom in the negative sense, while giving oneself law is freedom in the positive sense.<<ref "5">> Kant’s autonomy is concerned with self-legislating, giving oneself law as an unmoved mover, rather than mere self-governing.<<ref "6">> The significance of the Categorical Imperative (CI), the law which is legislated, is highlighted in Kant’s theory of autonomy. The CI is a law which constitutes our reason, not an empirical law from which we can unbind ourselves. We don’t explicitly and consciously choose the CI. Rather, our reason stipulates this law implicitly, immediately, and unreservedly. Just as the basic laws of logic are embedded in the very fabric of our reason, the CI is constitutive of our reason. Indeed, our reason commands the CI as universal and necessary from even very young ages.<<ref "7">> As self-legislators with reason, we are the authors of the bindingness of this law.<<ref "8">>
 
Since I have very limited space and time, I will only explicate what I consider the central key premise of Kant’s autonomy, which is this: 

<<<
The practical rule is therefore unconditional and so is represented a priori as a categorical practical proposition by which the will is objectively determined absolutely and immediately…For, pure reason, practical of itself, is here immediately lawgiving. The will is thought as independent of empirical conditions and hence, as a pure will, as determined by the mere form of law, and this determining ground is regarded as the supreme condition of all maxims…Pure reason is practical of itself alone and gives (to the human being) a universal law which we call the moral law.<<ref "9">>
<<<

Reason provides the necessary and universal moral law. This moral law is constitutive of our reason. Our reason commands, legislates, binds us to, and has embedded within it the CI. Interestingly, there seem to be both active (the legislating) and passive (the constitution or definition of reason) components of Kant’s autonomy. This premise does an enormous amount of work for Kant, and it is the key ingredient to both Kant’s autonomy and to moral obligation in general. This crucial premise of Kantian autonomy demonstrates not only the bindingness of the moral law, but it is also, on Kant’s view, part of why only this kind of autonomy can ground human dignity and generate moral obligation.<<ref "10">>

Kant’s obsession with necessity and universality motivates this grand claim. Indeed, we must investigate the moral law and its foundation, both of which must be absolutely necessary and universal, else we’ve failed to capture genuine morality entirely.<<ref "11">> Moral reasons by definition are overriding and motiving reasons, and the grounds to moral reasons must be unshakeable, else they may generate overridable or unmotivating reasons. Empirical principles, anything which is contingent or relative, cannot ground morality.<<ref "12">> Desires and inclinations, for example, can neither generate nor provide a foundation to moral obligation because they change (contingency) and they vary from person to person (relativity which lacks universality). Likewise, any possible external values or commands out in the world are not necessarily motivating; these external, relativistic, and contingent laws may rely too heavily upon our desires or inclinations (which are themselves contingent) to seek or obey them. External values or commands cannot ground or generate moral obligation since they lack necessity and universality. Kant’s autonomy, apparently, doesn’t have this problem, since those persons with reason, by definition, are commanded by their reason to author, legislate, and permanently bind themselves to the CI. Since no other theory can generate necessary or universal moral obligations, as they are empirical, contingent, and relative, surely we must realize that Kant’s autonomy is the essential condition of the possibility of morality.<<ref "13">> 	

That is Kant’s autonomy in a nutshell. How does it measure up to contemporary notions of autonomy? Clearly, Kant’s autonomy is not a political concept at all and has little or nothing to do with the modern concept of sovereignty.<<ref "14">> Kant is concerned with the authentic self, although not in the way we normally envision. Kant has a coherentist model of autonomy, where the coherence standard is reason.<<ref "15">> ‘Who you really are’ just is your reason. Very distinct from modern notions: on Kant’s theory, an empirical identity is ruled out, as such an identity could unbind the self from the moral law. The self is pure practical reason, and it is not empirical or a kind of introspection (where we ask: “Should I do A or B?”). If it isn’t empirical, then maybe it is noumenal, but it can’t be anything like the freewill libertarian’s view.<<ref "16">> The categorical self, law giving of its own kind, is not dependent on desire, society, or nature, but instead must be unconditional.<<ref "17">> Built into the notion of Kant’s authenticity model of the self is the third modern hinge, accountability. The sort of accountability-making “freedom” (a.k.a. autonomy), being an unmoved mover, confusingly makes sense and yet remains somewhat odd.<<ref "18">> Kant spends a good deal of time trying to establish that only his version of authenticity which results in our accountability and moral obligation, and it makes sense how these contemporary topics of autonomy have developed as a response (at least in part) to Kant’s theory of autonomy.

Kant’s autonomy needs to be a capacity, a capacity of the will, a capacity to legislate. Admittedly, it is somewhat unclear exactly how the active/passive issue I mentioned earlier is ultimately worked out, but it is clear that such an explanation provides much needed context for this capacity. Kant’s autonomy is a goal which emphasizes the CI, duty, and treating people as ends and not merely as means. Clearly, if Kant is correct in thinking his theory of autonomy is the condition of the possibility of morality, then he’s providing the foundation to any discussion of duties and consequently rights at all (which is a far bolder claim than most theories of autonomy). 

I have a number of concerns, but I will only bring up one. Kant’s conceives of the authentic self as non-empirical, and the result is that desires and inclinations are morally arbitrary and are not a part of one’s authentic identity. This goes against my intuitions.<<ref "19">> I can agree that sometimes my desires and inclinations aren’t really mine, they aren’t part of who I really am, and I can agree that those are morally arbitrary to my authentic self.  I am not convinced, however, that in all cases and at all times my desires and inclinations are morally arbitrary, incidental, inessential, and failing to be part of that which comprises my authentic self. I have desires which I endorse and see as being essential to who I really am as a moral agent. Kant has a very radical view (mostly a good thing), but it may be so radical that it fails to capture, validate, or explain my intuition here.<<ref "20">>
 
What are the effects of disagreeing with Kant here? Can I just re-write this section on autonomy to fit my intuitions? The answers are ‘likely disastrous’ and ‘no, or at least probably not.’ Kant seems to be right in his obsessive pursuit of necessity and universality, and he’s quite systematic about it. That’s what I want my moral theory and agency to rest upon, too! If I take this necessity and universality intuition plus my empirical self intuition, the result seems to be that I am not actually or at least not fully a moral agent. This, of course, goes against my third intuition, which is that I am a moral agent. 

Kant may reply that my intuition for being a moral agent is stronger than my intuition that empirical matters form vital aspects of my authentic self. That might be true. Further, if I really am a moral agent, and if his theory of moral agency is correct, and hence my identity must rest upon what is necessary, absolute, and universal, then perhaps my intuitions are contrary, and I should release the weaker one, namely that my empirical self is (to some extent) essential to my authentic self. This would save my stronger intuition while demonstrating that my weaker intuition was wrong. But that still does not seem to resolve my problem. Kant’s arguments for what counts as moral agency demonstrate the contrariness of my moral agency and empirical self intuitions. Why should I give these up? Why not just jettison Kant’s argument in this case? His argument is not obviously correct, at least not immediately, and maybe it is the weakest of three intuitions I have.

Lastly, Kant might just concede that he isn’t really interested in the authentic self that I’m worried about at all. He could simply attack the notion of the authentic self, as contemporary folks conceive of it, as being largely irrelevant to moral agency and generating moral obligations. If that is the route he would take, then contemporary thinkers must explain why their conception of the authentic self is really so significant or relevant to moral agency.

-----------------------------

<<footnotes "1" "It is not easy to define contemporary notions of autonomy since they are so rich and diverse, but I think this is a fair breakdown.">>
<<footnotes "2" "Sovereignty might be thought of as political autonomy. It deals in various kinds of freedom, whether freedom as non-frustration from impediments (be they man-made or natural) as with Hobbes and Mill, freedom as non-interference from agent-driven hindrances as with Berlin and Nozick, or even freedom as non-domination as with Petit.">>
<<footnotes "3" "Colloquially, we refer to authenticity when we talk about “keeping it real,” or “frontin’,” or “being true to yourself.”">>
<<footnotes "4" "Ahistorical accounts of authenticity-based autonomy, as found with Frankfurt and Dworkin, see the ‘real you’ as a structure of your will, where (briefly speaking) the authentic self is a kind of congruence between First Order and Second Order (and higher order) desires. Historical accounts, such as Christman’s, attempt to resolve the problem of manipulation where ahistorical accounts may fail. In contrast to these both of these active models, which rely upon identifying one’s self with, approving of, or endorsing one’s true desires, coherentist models of autonomy, as found with Buss and Ekstrom, attempt to avoid classic regress problems by defining authenticity as having the right sort of passive structures and relationships between various desires and beliefs. ">>
<<footnotes "5" "5:33">>
<<footnotes "6" "4:431">>
<<footnotes "7" "5:31 and Nichols, Shaun. "How Psychopaths Threaten Moral Rationalism: Is It Irrational to Be Amoral?" The Monist 85.2 (2002): 285-303. JSTOR. Web. 16 Jan. 2013. <http://www.jstor.org/stable/27903773>.">>
<<footnotes "8" "6:227">>
<<footnotes "9" "5:31">>
<<footnotes "10" "4:436, 4:441-5">>
<<footnotes "11" "4:389">>
<<footnotes "12" "4:442">>
<<footnotes "13" "4:445, 5:33">>
<<footnotes "14" "At least not directly.">>
<<footnotes "15" "Which impressively seems to be an attempt to resolve both the classic epistemic regress problem and the regress problem in autonomy in the same stroke.">>
<<footnotes "16" "6:418-9">>
<<footnotes "17" "5:33, 43">>
<<footnotes "18" "Take ‘telling a lie’ as an example. Naturally, you may be inclined to lie. Freedom and practical reason tell you to say the truth. If you say the truth, then you are the first cause of the action and you are free. If you lie, you’ve been moved by the external, by empirical and contingent nature, by your inclination, and thus you aren’t really free. You are free only when you say the truth. What Kant counts as being “free” is really narrow and frankly odd.">>
<<footnotes "19" "Whether or not intuitions play a legitimate role in determining the validity of a moral theory is another discussion. For now, I’m going to assume that intuitions do play such a role. ">>
<<footnotes "20" "Kant has a very systematic, labyrinthine, opaque, and complex view to fall back upon. Even a seemingly reasonable criticism or concern may be answered by some unobvious interpretation or obscure passage. I voice my criticism with that in mind.">>
Frankfurt doesn’t focus on political conceptions of Freedom (as in the tradition of Hobbes and Berlin), instead Frankfurt argues for a particular sort of freedom by modeling the authentic identity of persons. The fundamental question at stake is: Who is the “real” you?

Many famous philosophers have defined the real you as the rational you. In contrast, Frankfurt thinks the real you is the hierarchically integrated you, a ‘congruence between’ and an ‘identification with’ or ‘endorsement of’ your desires, which is less about rationality and more concerned the structure of your will. 

As persons, we are self-reflective and we are not indifferent to which desires move us. On this view, we form desires about our desires, and our capacity to endorse our desires is what grounds our personhood, our freedom of the will, and our autonomy.
We start with first-order (FO) desires; these are ordinary desires about the world. E.g. I want to eat pizza; I desire sleep; I want cocaine; etc. Every creature with desires has FO desires, and hence FO desires aren’t very special. FO desires vary in strength, and for example, we might think that without any intervention, the strongest desire is what moves us, it is our will. E.g. If the honey badger desires food more than sleep, he’ll be effectively moved to pursue food instead of sleep – that is his (not free) will. 

Naively, second-order (SO) desires are desires about FO desires. E.g. I desire not to want to eat pizza; I want to desire sleep; I don’t want to want cocaine; etc. Note that my SO desires can conflict with my FO desires. SO desires are found in creatures with more complex psychologies. 

Frankfurt further distinguishes SO desires from SO volitions (where SO volitions are a subset of SO desires). A SO volition is a special kind of SO desire. A SO volition is a desire that some FO desire be or not be your will. A SO volition is a desire for some FO desire to take or lose priority over all other FO desires, such that you will be effectively moved or not moved to act upon some FO desire. A SO volition is the reflective endorsement or repudiation of a FO desire. 

The capacity for and the use of SO volitions is the significant and necessary condition for a creature to be a person. Creatures, including humans, who lack SO volitions (even if they have mere SO desires) are called wantons - they are not persons. Lacking free will is not a problem for wantons, as seen in the case of the wanton addict. On Frankfurt’s theory, a wanton is exclusively moved by desires he has not identified himself with, endorsed, approved, or made his will. He is not a person because he is merely a being with desires that rule him, and he does not care to or perhaps even have the ability to rule over his desires.
In contrast to a wanton, a person, such as the unwilling addict, has SO volitions. Whether or not those SO volitions ultimately “win out” determines whether or not a person has freedom of the will.

When your FO desire and SO volition conflict, and if and when you are moved by a FO desire which you repudiate via a SO volition, you are not acting autonomously or authentically, and essentially, as a person, you lack freedom of the will. Significantly, even though you are moved to act by a FO desire that is in some sense ‘your desire’, because that FO desire overrides your SO volition, it seems as though you are forced to act upon a desire which isn’t really yours – you didn’t endorse that FO desire, in fact, the real you repudiated it. That FO desire which moved you, against your SO volition, is alien to you. The real you is a helpless bystander to the force of the external, inauthentic FO desire. To be authentic, to have freedom of the will, your SO volition must effectively make your FO desire your will. 

Lastly, Frankfurt’s theory is not actually confined to only two orders of desires. There are third-order desires and volitions, fourth, fifth, and so on. E.g. I can want to want to want pizza, etc. Ultimately, the necessary condition of personhood and autonomy is some sort of capacity to identify ourselves with what we “really want to want to want…to want, and so on,” a capacity to decisively align our many orders of desires in a resounding commitment, securing conformity between them, and forcibly synchronizing and unifying them (Christine Korsgaard must love this). Unfortunately, Frankfurt does not provide a clear argument about this. This is one of the fuzzier and least clear aspects of Frankfurt’s theory, despite it being the most important aspect of his theory (it does all the magical work for him). 

Interesting characteristics of this theory:

* A focus upon self-reflection, evaluation, endorsement, authenticity, and ordered desires fits many of our intuitions on the topic of free will and autonomy. Something about the theory seems right.
*  It does not require robust metaphysical commitments. The theory sits comfortably in naturalistic philosophical perspectives.
* The theory is neutral to determinism and can work as a compatibilist view of freewill. (Although, it is not necessarily inconsistent with incompatibilism.)
** Compatibilism is the belief that free will and determinism are compatible ideas, where freedom, in this case, turns out to be something like just doing what you want to do, or willing what you want to will, which is distinct from other standard definitions of freewill, such as: “The ability to do otherwise.”
** Incompatibilists think that this kind of freedom isn’t enough, and they worry that if we are merely deterministic flesh bags of chemicals and electrical signals, then we are no better than any other determined or programmed object. On such a view, we are reducible to a mere mass of determined particles. Why are we any better than complex robots? Why is compatibilist free will actually freedom at all; and why is it worth having? Why would we be morally responsible if we are determined? So, the incompatibilist who believes we are morally responsible must claim we aren’t fully determined and that we have a kind of libertarian, metaphysically based freewill which overcomes the laws of physics. *Draw a homunculus.*
** Compatibilists will respond by claiming that libertarian freewill is incoherent; that libertarians have failed to provide any suitable account of how it works. The metaphysical commitments are too great for the compatibilist. Further, why are we any better than a random number generator or dice? Why is libertarian freedom worth having?
* The account is content-neutral. Persons aren’t required to have particular values. This sits in stark contrast to other classic theories of autonomy, freedom, and authenticity. 
** This feature is powerful. It has some good aspects to it, but it also may have bring with it some problems which I don’t have time to go into. 

3 Sets of Problems with this account:

* Manipulation. Frankfurt’s account of freedom and autonomy does not take into consideration ‘where a desire came from’ or ‘how it was acquired.’ It can’t explain manipulation-based autonomy defeaters such as the problems of poisoned origins or a neuroscientist re-engineering a person’s desires and beliefs.
** One paradigm case of manipulation is where a neuroscientist radically alters your desires (and beliefs). For ahistorical accounts of autonomy and freedom, like Frankfurt’s, as long as the neuroscientist changes you such that a kind of congruence between your FO and higher order desires is maintained, then you are still considered to be autonomous. Frankfurt’s account doesn’t seem capable of taking into account how the problem of manipulation, at least intuitively, results in an attack on or elimination of one’s autonomy and/or the authentic self.
** Don’t we want a theory of autonomy that allows us to reclaim autonomy from our checkered/conditioned past?
* Trilemma: Ab Initio, Infinite Regress, Incompleteness (Christman on Dworkin [who is Frankfurtian])
** Ab Initio/Problem of Authority – How can non-autonomous processes or higher order desires confer autonomy upon lower level desires? How does a particular second-order desire really have the authority to speak for us? Why that one?
*** When a SO volition endorses a FO desire, we take that FO desire to be an authentic desire, a desire of the agent himself, because the agent had to actually endorse it. Initially, it seems as if SO volitions have the power to speak for the authentic self. The problem, however, is that a SO volition needs to be an autonomous desire as well, a desire that really belongs to the authentic agent. If a SO volition is not an autonomous desire, then it seems as if a non-autonomous force is ‘endorsing’ a FO desire, and then it would not appear as if the FO desire is really endorsed by an autonomous agent. How can autonomy arise from non-autonomy? It doesn’t seem like it can. So, what makes a SO volition an autonomous desire? This brings us to the…
** Infinite Regress. - If SO volitions are made autonomous by TO volitions in the same way that FO desires are made autonomous by SO volitions, then we hit the regress problem, whereby we pile desires on top Bibliographyof desires.
*** The argument is that in order to make an N-order desire autonomous, an autonomous N+1-order volition must endorse it. To have an autonomous SO volition requires an autonomous TO volition endorsing it. But, clearly, we can ask the same question about TO volitions, and the answer requires having an autonomous volition from the next higher order endorsing it. This process of trying to autonomize desires with higher order autonomous desires can continue ad infinitum, hence the regress.
** Incompleteness – If we are to escape the Ab Initio problem without falling into the regress, we have explain how SO volitions are autonomous desires in a way that is different from how SO volitions make FO desires autonomous. Nobody seems to be able to give an explanation, hence the “incompleteness” problem. Which is basically the same thing as saying, we really don’t have an explanation at all. 
** Summary:  On Frankfurt’s model, we must ask if the relevant SO volitions themselves are autonomous. If not, then we have the ab initio problem.  If so, then how do they become autonomous?  If it’s in the same way as one’s first-order desires, then we face a regress.  But if they become autonomous in some other way, then Frankfurt’s theory is incomplete because he hasn’t specified the method. He does anticipate the trilemma; he talks about decisively aligning, securing conformity between, or unifying our many orders of desires, but he never really explains how this works. Hence, Frankfurt’s model is incomplete. 
* Perhaps you don’t find Frankfurt’s argument intuitively compelling. You should ask: Why is Frankfurt’s freedom of the will worth having? How is a person in this account any more worthy or better off than other animals and wantons? Why does it produce moral responsibility or the kind of agency that matters?
 






 
''1.''

In “Internalist Responses to Skepticism,” Jonathon Vogel tracks various internalist approaches to the problem of skepticism. He offers criticisms of what he refers to as apriorism and dogmatism, and then endorses his own approach, explanationism.<<ref "1">> Explanationism, roughly, is the claim that a coherence among ordinary beliefs concerning our perceptual experiences justifies the belief in the negation of skepticism (e.g. –BIV). On this view, the patterns of our ordinary experiences are better explained by our rich set of ordinary beliefs, a “real-world hypothesis” (RWH), than the “brain in a vat” hypothesis (BIV). 

In this paper, I outline three related worries about Vogel’s argument. First, explanationism may not be different enough from the dogmatist position. In addition, explanationism may fail to provide knowledge, and hence, by his own criteria, Vogel’s theory may fail to escape skepticism. Finally, it isn’t clear why we should assume that explanationism results in RWH having more explanatory merit than BIV.

''2.''

Vogel sketches out dogmatism in a couple ways:

By themselves, particular perceptual experiences in some way justify us in believing various propositions about the world. Each of these propositions entail –BIV, and one’s justified belief in such a proposition justifies, in turn one’s belief that –BIV. Thus we have local empirical justification for holding –BIV.<<ref "2">>

(DOG) If it looks to one that X, then one is thereby prima facie justified in believing that X.<<ref "3">>

	The Moorean response to skepticism is very much in line with the kind of dogmatism that Vogel has in mind. Vogel walks us through several examples which illustrate the differences between dogmatism and explanationism, and, to be fair, there are differences. My worry, however, is that explanationism may only be merely a grander, coherentist version of Moorean dogmatism. Indeed, in footnote 39, Vogel perhaps anticipates this worry, as he “ruefully” acknowledges that explanationism may suffer from similar problems faced by dogmatism, particularly regarding hypothesis confirmation.

	The mile-high view of the structure of both the dogmatist and explanationist arguments seems to be: I have two competing propositions A and B; I am more confident in A than B; thus, I am justified in believing A. The dogmatist may use a single ordinary belief in the existence of his hand to counter skepticism, while the explanationist uses the sum of ordinary beliefs to do it. One employs local empirical justification, and the other global empirical justification. They both, however, seem to have the same sort of root principle beneath them.

There is a kind of Occam’s razor or ‘best explanation’ principle which leads to this confidence found in both dogmatism and explanationism.<<ref "4">> Setting aside whether or not the principle employed by explanationism gets us where Vogel thinks it does (for example, it isn’t clear to me that RWH is necessarily simpler than BIV), I worry that explanationism might ultimately be unsatisfying to the skeptic in parallel ways to dogmatism because of its reliance upon a best explanation principle. 

Surely a best explanation principle has a lot of force to it. I’m not sure what to do with it though. My gut instinct is to say that the skeptic seeks an epistemic standard higher than can be reached with such a principle, and perhaps both dogmatism and skepticism outright miss the point. If we let the skeptic set the epistemic standard as high as certainty, then even seemingly decent principles, like Occam’s razor, may not survive. 

With that said, I admire the scope of Vogel’s explanationism. Explanationism responds to the skeptical argument that a “person’s experience is globally unveridical” with an argument that attempts to demonstrate how a person’s experience is globally veridical, unlike the possibly less appropriate scope of local veridical justification in the dogmatist’s argument. 

''3.''

	Vogel spells out skepticism from the internalist perspective as follows:

*1a. In order to know M, you need to know that various possibilities of massive sensory deception do not obtain.
*1b. In particular, you need to know that you are not a brain in a vat (–BIV) stimulated so that it falsely appears to you that M.
*1c. In order to know –BIV, you have to be justified in believing –BIV.
*1d. But you are not justified in believing –BIV. 
*1e. Therefore, you do not know M.5

Vogel claims that falsifying argument 1d generates “an internalist answer to skepticism.”<<ref "6">> He argues that if “premise 1d of the skeptical argument is false…skepticism is refuted.”<<ref "7">>  I disagree, and I wish to stress that while falsifying 1d is certainly a worthy response, it is not a finishing blow to skepticism. 

While Vogel is worried most about 1d, 1b is the key premise with which I am most concerned. It follows from 1a, and 1a seems to derive from the closure principle, and it certainly seems plausible.<<ref "8">> If we agree to these premises, then we agree that defeating the skeptic requires demonstrating that we know –BIV. I’m not sure why Vogel begins his argument with this task (not a small one at that), but never resolves it later in his paper. He seems to gloss over this weighty requirement, even though he boldly claims explanationism is a “solution to the problem of skepticism” at the end of his paper.<<ref "9">> Perhaps he is right, but he didn’t get us there in his argument. 

Suppose explanationism justifies the belief –BIV. To be (mildly) justified in believing –BIV, which is what Vogel seems to think explanationism buys us, may be necessary but not sufficient for knowing –BIV. Vogel does not neatly close this gap for us. Even if he does get us to the point where we are justified in believing –BIV to some extent, which is a significant accomplishment, it unfortunately does not seem as though explanationism gives us knowledge of –BIV, and that’s a problem for Vogel, given the criteria he set out. 

The skeptic’s epistemic requirement is very high: knowledge, not merely justified belief. Since explanationism may fail to provide knowledge of –BIV, it is not clear that Vogel completely diffuses the skeptic’s argument. If he is right, he only gets us part of the way there. It would be no small feat to demonstrate that we can be justified in believing in the external world, even if we don’t necessarily know. Skepticism, however, still seems to survive his argument.

''4.''

	Vogel claims RWH explains the sum of our sensory experiences, E*, better than BIV, and thus we are justified in accepting RWH, and consequently, in accepting –BIV. At least some real-world hypotheses are thought to be simpler and more unified than BIV hypotheses, and thus some RWH’s are better at explaining E*. On Vogel’s view, any version of BIV should be rejected because it is comparatively too complex and perhaps ad hoc. Should we really agree that some RWH necessarily has more explanatory merit than all BIV hypotheses? 

	Indeed, some models of BIV, perhaps even the usual ones, will build on top of a RWH (possibly in an ad hoc manner) an abstraction, an extra layer, an added mechanism, or an additional agent which explains E*. On such models, BIV is thought to be more complex than RWH, and therefore such models have less explanatory merit than RWH. But is this the case for all BIV hypotheses? This seems to be what Vogel needs, and yet it is far from clear that this is true. 

Further, the skeptic need not convincingly demonstrate a case where BIV is simpler than RWH – he merely needs to open our eyes to the possibility of such a thing. Is it at least possible that some BIV hypothesis could have more explanatory merit than real-world hypotheses? Maybe, I really don’t know. That’s a problem for a theory which relies upon showing not only that the usual BIV hypotheses have less explanatory merit than at least one RWH, but that all BIV hypotheses must have less explanatory merit than some RWH. 

''5.''

Ultimately, the skeptic always seems to be in a position to call into doubt principles of best explanation and the results of those principles. Simplicity may not be enough. Even justified belief in the external world doesn’t seem to be enough to finally defeat the skeptic, as the skeptic can continue raising the epistemic bar out of reach. 

------------------

<<footnotes "1" "Jonathon Vogel, 'Internalist Responses to Skepticism,' in// The Oxford Handbook of Skepticism//, ed. John Greco (Oxford: Oxford University Press, 2008): 533-556">>
<<footnotes "2" "Ibid., 535">>
<<footnotes "3" "Ibid., 539">>
<<footnotes "4" "Ibid., 545">>
<<footnotes "5" "Ibid., 533">>
<<footnotes "6" "Ibid., 537">>
<<footnotes "7" "Ibid., 544">>
<<footnotes "8" "Very broadly, we might explain the principle in this way: If S knows (or S is justified in believing) P, and S knows (or S is justified in believing) P entails Q, then S knows or S can come to know (or S is justified in believing or S is justified in coming to believe) Q. Admittedly, some version of this principle seems like it must be correct. ">>
<<footnotes "9" "Ibid., 550">>
''1 - Introduction''

In this paper, I will analyze Daniel Wegner’s view on the conscious will as presented primarily in the article “Apparent Mental Causation: Sources of the Experience of Will” and a couple claims from his book The Illusion of Conscious Will. The second section is devoted to explicating Wegner’s view and work. His work in psychology seems to have upset (parts of) the philosophical world – his conclusion is pretty staggering. Afterwards, in the third section, I’ll briefly consider why his argument matters, its implications, and what we will lose if he is right. Finally, in the fourth section, I offer four criticisms of his argument. In particular, I am worried about the burden of proof in this dialectic, the problematic assumption that conscious will is a feeling, what conclusions the empirical evidence really supports, and the lack of evolutionary explanations for an illusory conscious will. 

''2 - Wegner’s View''

Daniel Wegner argues the conscious will isn’t the cause of action.<<ref "1">> On his view, people everywhere mistakenly interpret their conscious thoughts as being causally relevant to their actions. In his writing, he attempts to dismantle the commonly held belief and experience of a direct causal connection between one’s conscious thoughts and actions. Ultimately, he believes the conscious will is epiphenomenal. 

 Wegner describes conscious will as an experience, feeling, or perception.<<ref "2">> The experience of conscious will spans from a conscious thought or intention to the appearance of a causal path to the target action.<<ref "3">> In Wegner’s view, the supposed causal link between the conscious thought and the action is illusory, and he claims both thought and action are caused by unconscious mechanisms.

Why are we mistaken? Why do we wrongfully interpret our experiences and erroneously infer causation?  Sometimes we perceive patterns and causation where there are none, and Wegner seems to think this is the case with the conscious will. Our flawed ability to recognize causation seems to be a significant reason why we have the experience of conscious will at all.  When conscious thoughts or intentions precede and match the target action in a timely, exclusive, compatible, and consistent manner, we mistakenly infer, via our flawed causal recognition, that our conscious will was the cause of the action. 

Wegner thinks a potential link between thought and action is weakened by the involuntary nature of examples such as motor automatisms, hypnosis, dowsing, action projection, and psychological disorders such as schizophrenia, where in these cases one does not experience conscious will but still demonstrates many of the scientific signs of it.<<ref "4">> In these cases, the person acting does not feel he is making a conscious decision to act, but feels as though some external force is causing the action through him – that is, there is a separation between the action taken by the person and his conscious thought or desires; the link between conscious thought and action isn’t there when we would expect it to be. Further, Wegner uses an experiment, the “I Spy” study, to demonstrate how the experience of conscious will can be artificially created. Wegner’s experiment seems to build off and extend from Libet’s studies, which attempted to reveal how unconscious mechanisms played a major causal role in the appearance of voluntary action.<<ref "5">> Wegner employs both positions as evidence for the thesis that the experience of conscious will is an illusion, where conscious thoughts are inefficacious and do not cause our actions (despite all appearances).

The purpose of the “I Spy” study was to “lead people to experience willful action when in fact they have done nothing.”<<ref "6">> This was a digital 2-player Ouiji board version of I Spy (using a mouse), where the participant was primed with words about items on the screen, forced onto certain objects by a confederate, and required to “rate each stop they made for personal intentionality.”<<ref "7">> The point of the study was to generate cases where participants artificially felt as though they consciously willed an action, when in fact, they did not cause the action. Word priming “did not cause participants to stop on the items.”<<ref "8">> Word priming did, however, conjure thoughts about the related objects on the screen, and when forced upon these objects in brief time frames after priming (1 or 5 seconds), participants “reported having performed this movement intentionally.”<<ref "9">>
 
The experiment shows that one can have conscious thoughts which don’t cause action yet still form the illusion of an experience of conscious will. The involuntary examples demonstrate that one can have conscious thoughts which meet many of the matching parameters of target actions, but don’t result in the experience of conscious will. Together, both positions, in Wegner’s view, demonstrate how the apparent causal link between consciousness and action is an illusion.
Wegner claims the experience of conscious will serves to provide us a preview of what we may do, but “the real causal mechanisms underlying behavior are never present in consciousness. Rather, the engines of causation are unconscious mechanisms of mind.”<<ref "10">> It remains unclear why this ability to preview matters. 

''3 – A Couple Implications. What’s at Stake?''

If Wegner, like many psychologists, is right in thinking the conscious will can be reduced to deterministic, physical mechanisms, then the game is likely over for incompatibilists. We might initially think science is the wrong domain for proving we don’t have free will (which requires substantial metaphysics). Presumably, free will is part of having conscious will. If the experience of conscious will can be entirely reduced to mere physical mechanisms, if this phenomenon is best explained in naturalistic terms, then either incompatibilists should deny free agency or the burden of proof seems to be shifted to the libertarian.

Compatibilists (and incompatibilists as well) remain vulnerable to Wegner’s argument in a different way. If Wegner is right in thinking that conscious will is entirely an illusion, and if conscious thought does not cause action, then it is very hard to see how humans could engage in any sort of meaningful deliberation and choice necessary (even by compatibilist standards) for being moral agents. In essence, Wegner’s argument seems to reduce us down to mere observers of the results of our unconscious mechanisms. If he is right, then I don’t see why morality and moral responsibility should have any rational relevance to us. We can’t actually participate in moral life; moral life is an illusion. 

''4 – A Series of Brief Criticisms of Wegner’s View''

''4.1 – Burden of Proof''

While Wegner tries to demonstrate why we can be mistaken in attributing causality, he does not ultimately show why we all feel like free agents. He must explain why this feeling of free agency, a very potent and convincing experience we all have, must be false, and particularly how and why we all suffer from this mass delusion. He seems to act as though he has an open-and-shut case against the efficacious conscious will (most of us are sometimes guilty of this sort of bravado). While he raises problems and concerns, he fails to provide the sort of extraordinary evidence required to counter almost everyone’s experience of this phenomenon and the intuitions we have on the matter. I think he has, at best, opened the door to the possibility that the conscious will is merely an illusion, but he has not convincingly closed the doors on the other possibilities. 

''4.2 – Conscious Willing as a Feeling''

 Wegner claims that “[w]ill is a feeling, not unlike happiness or sadness or anger or anxiety or disgust… will has other characteristics of emotion, including an experiential component (how it feels), a cognitive component (what it means and the thoughts it brings to mind), and a physiological component (how the body responds).”<<ref "11">> He is sympathetic to a scientific Humean view. Unfortunately, Wegner seems too quick to reduce the conscious will to some mental state of lower status; he glosses over our ordinary, everyday phenomenological evidence.

Quite related to my previous criticism, I fear that Wegner does not adequately capture or describe the phenomenon of conscious willing when he categorizes the will as a feeling. I grant that the conscious will is similar to feelings and sensory perception in salient ways. I don’t think, however, the experience of conscious willing is either an outright feeling or ultimately analogous to our ordinary feelings. It is more than that. When I attend to the phenomenon of my conscious will, it is not presented to me in a way similar to my ordinary feelings (admittedly, I don’t know how to describe it, but I know what it does not appear like). I find the experience of the conscious will to be fantastically unique and far richer than something like sadness, anger, or happiness.  I may not be able to describe why exactly they differ, but Wegner also has not adequately explained away the experience of conscious willing as just another emotion or feeling. 

''4.3 – What Does His Evidence Support? ''

We might also have methodological worries and issues dealing with what Wegner’s experiment really proves or explains. Wegner may be overstating what his evidence supports. A more conservative appraisal of the evidence suggests a different conclusion: we are fallible about our experience of conscious will. This is far from the bold thesis that conscious will is an illusion. Just because some experiences are illusory doesn’t mean all are illusory. Just because someone can be tricked into incorrectly believing he caused a cursor to stop on a screen (when in fact, another agent caused it), doesn’t mean that the experience of willing is always an illusion.

Looking specifically at the “I Spy” study, the situation seems contrived – that is, the experiment seems more like a trick than the sort of study from which to draw such sweeping conclusions about the experience of conscious will in general. Why should we think this study is representative of the ordinary sort of experiences of conscious willing? This study seems to suffer some of the same problems that its predecessor, Libet’s study, encountered. It isn’t clear that these studies are examining normal conscious intentions, but rather automatic functions, rationalizations, or tricks that merely demonstrate our fallibility.

In addition, I’m not convinced the involuntary examples prove much of anything. They simply aren’t good examples of normal mental activity. Pathological conditions may (or may not) serve to show quirks and boundaries of the experience of conscious will, but they aren’t representative of ordinary conscious experience. So what if these cases have ‘many of the matching parameters?’ That isn’t the same as meeting them all; perhaps we can infer that people in these outlying cases are not, in fact, experiencing conscious will when they do not meet certain parameters. But that is probably all we can infer – one should not draw conclusions from the experiences of fringe cases. Their faulty experiences don’t really give us good reasons to think the conscious will is entirely inefficacious and an illusion.

I am also concerned the self-reporting in the “I Spy” experiment may have just been the result of mere post-hoc rationalizations. Obviously, that initially seems to support Wegner’s point in the first place, as he is trying to debunk what he considers to be our global post-hoc rationalization for delusions of conscious willing. Instead, I’m trying to say this is an exceptional kind of case, and not representative of our usual self-reporting. It is one thing to ask: “In general, do you believe your conscious will is efficacious?” and another thing to ask someone to rate their personal intentionality in a given situation. I am not sure conscious will sits on a rated gradient at all. Reporting and rating personal intentionality may not operate in the way that Wegner assumes.

Related to this concern of self-reporting, I worry the study focuses too much upon whether or not people believed their conscious thoughts led to certain results (several steps beyond their action) rather than whether or not they caused their action directly. The action of moving and stopping our hand is phenomenologically different from the figuring out whether or not we moved or stopped a cursor on a computer screen. Moving/stopping my hand is simpler, more straightforward, more “up to me,” relying far less upon my ability to determine causation, and perhaps even more ready-to-hand than moving/stopping a mouse or cursor (the cursor’s movement is even more abstract and distant from my action than moving a mouse). For example, we must contend with issues of being a digital native or being unfamiliar (to some degree) with using the mouse; a professional first person shooter gamer will recognize causation problems in cursors/mice that most of us won’t, and a digital native will be more equipped to make decisions concerning causal efficacy in this chain of causes than a newcomer. It is especially pertinent to keep in mind that someone with little or no experience using a mouse will have a much harder time controlling the cursor’s position on the screen than a more experienced user in the first place, much less recognizing if the cursor stopped due to their own action or another’s.  

There are varying levels of causal recognition. Anyone who has ever remotely controlled a person’s computer (for emergency repair work, occasional maintenance, or pranking your friends), especially a computer used by a non-native, can tell you that these people are momentarily tricked into thinking they are moving the mouse when they really aren’t. They don’t quite have enough experience to know immediately that they aren’t in control. Lots of activities are like this. Essentially, there are a lot of phenomenal abstractions sitting between my consciously willing to my move hand (the action itself) and figuring out whether or not I truly controlled a cursor.

Those layers don’t seem to be appreciated enough in this study. Wegner should not be testing something so far away on the causal chain; he should be testing something much more phenomenologically immediate and within the expertise of practically all with conscious will – such as raising one’s hand.

Lastly, beyond this inductive step, even employing an inference from the best explanation principle does not seem to get us Wegner’s bold conclusion. In light of his evidence, the causes of action and the explanation of our conscious thoughts are still quite unclear. We don’t have an adequate empirical explanation, as far as I can tell. 

''4.4 – Evolutionary Reasons for an Illusion''

Wegner needs not only to provide an explanation of why the conscious will is an illusion, but he likely must also give an account of why humans have evolved to have an illusory conscious will. Our brain is expensive, and if this is an illusion, it likely costs a great deal of energy. Why would an illusory conscious will be selected for? It is unobvious how one could provide a plausible account of this. If conscious will is entirely inefficacious and an illusion, what possible purpose does it serve? Wegner is aware of this issue. He argues that “conscious will is the mind’s compass.”<<ref "12">> But he does not give us great reasons as to why we evolved to have this epiphenomenal compass.
 
One evolutionary reason we might offer is that this illusion results in better behavior. Perhaps humans under the impression that they have control are more likely to behave in ways beneficial to the species. A sense of morality, for example, might arise from the illusion, and a sense of morality, at least minimally, might bring about the kinds of behavior which evolution would select for (although, ultimately, certain sorts of morality do seem at odds with propagation of the species).

Even if this line of reasoning were true, it remains unclear why an illusion was selected for instead of instinctual, hard-wired “moral behavior.” Why select for an illusion when you could get the same results for a far cheaper energy cost? It would be nice if we had a plausible evolutionary story to explain this illusion. 

''5 – Conclusion''

It is a biased thing to say that I deeply regret the possibility (however small I believe it may be) that Wegner could be right. The costs are enormous (not to sound like the world is ending but, if Wegner’s claim is correct, the moral world just might be ending for us as humans). Wegner helps opens the empirical door to a serious problem of nonveridical conscious experience and causation. His conclusions are not obviously true just yet, and proponents of Wegner’s view have a lot of work ahead of them to support the conclusion that conscious will is epiphenomenal and illusory.  

------------------------------

<<footnotes "1" "Wegner, Daniel M., and Thalia Wheatley. 'Apparent Mental Causation: Sources of the Experience of Will.' //American Psychologist// 54, no. 7 (July 1999): 481">>
<<footnotes "2" "Ibid., 480">>
<<footnotes "3" "Ibid., 483">>
<<footnotes "4" "Ibid., 480, 485, 486, 487">>
<<footnotes "5" "Ibid., 481">>
<<footnotes "6" "Ibid., 487">>
<<footnotes "7" "Ibid., 488">>
<<footnotes "8" "Ibid., 489">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "Ibid., 490">>
<<footnotes "11" "Wegner, Daniel M. //The Illusion of Conscious Will//. Cambridge, MA: MIT Press, 2002: 326">>
<<footnotes "12" "Ibid., 317">>



---------------------------

''Bibliography''

Bayne, Tim. "Phenomenology and the Feeling of Doing: Wegner on the Conscious Will." //In Does Consciousness Cause Behavior//?, edited by Susan Pockett, William P. Banks, and Shaun Gallagher, 169-86. Cambridge, MA: MIT Press, 2006. 
 

Pacherie, Elisabeth. "Towards a Dynamic Theory of Intentions." //In Does Consciousness Cause Behavior?//, edited by Susan Pockett, William P. Banks, and Shaun Gallagher, 145-67. Cambridge, MA: MIT Press, 2006. 

 
Pockett, Susan. "Does Consciousness Cause Behaviour?"// Journal of Consciousness Studies// 11, no. 2 (2004): 23-40. 
 

Ross, Peter W. "Empirical Constraints on the Problem of Free Will."// In Does Consciousness Cause Behavior?//, edited by Susan Pockett, William P. Banks, and Shaun Gallagher, 125-44. Cambridge, MA: MIT Press, 2006. 

 
Wegner, Daniel M., and Thalia Wheatley. "Apparent Mental Causation: Sources of the Experience of Will." //American Psychologist //54, no. 7 (July 1999): 480-92. 

 
Wegner, Daniel M. //The Illusion of Conscious Will//. Cambridge, MA: MIT Press, 2002. PDF. 
 

Wegner, Daniel M. "Précis of the Illusion of Conscious Will." //Behavioral and Brain Sciences// 27, no. 5 (2004): 649-92. 
 
In this paper, I will define lying, explicate Kant’s position on it, and explain two major justifications for that position. I will offer a criticism of Kant’s position and a solution to the larger problem the issue of lying presents us. 

What is “lying” to Kant? Kant distinguishes truth and truthfulness.<<ref "1">> Declaring truth is not always up to us (we are epistemically fallible); being truthful, which is more of an attitude or intention, however, is up to us. Intentional deception and untruthfulness sit at the heart of the act of lying.<<ref "2">> A lie is an intentional declaration of what one believes to be an untrue statement.<<ref "3">>

What is Kant’s position on lying? He seems to have legal and moral positions. I’m going to quickly gloss over Kant’s concerns on the legal status and implications of lying (although they are interesting) and focus on the moral position instead, since the moral position completely overshadows the legal in this case.

Initially, it seems as though Kant generally isn’t against lying in the legal realm. As long as one doesn’t violate another’s external right or harm another person, such as offering “the false allegation that a contract has been concluded with someone, made in order to deprive him of what is his,” then Kant might appear fairly relaxed, in a legal context, as to whether or not one lies, as it is “entirely up to them [those who hear the truth or lie] whether they want to believe him or not.”<<ref "4">> However, Kant says, “a lie, defined merely as an intentionally untrue declaration to another…must harm another…For it always harms another, even if not another individual, nevertheless humanity generally, inasmuch as it makes the source of right unusuable.”<<ref "5">> From what I can tell, this could possibly stand as both a legal and moral reason to never lie. Further, Kant worries about the legal responsibilities (of the liar) which result from someone acting upon a lie told to them.<<ref "6">> 

Ultimately, I’m not sure if Kant’s position on the legal aspects of lying is all that pertinent in light of his ethical stance on this issue. In the ethical realm, the realm with highest normative priority (it is unclear to me that any other realm, including the legal, has any independent normativity), Kant claims lying is always wrong. He declares this in many passages; we’ll cover a couple of them to get a picture of how he views lying.

Kant uses the obligation not to lie as an example of a law with absolute necessity in the Groundwork: “the command ‘thou shalt not lie’ does not hold only for human beings,” but for all rational beings.<<ref "7">> Continuing that Biblical position, Kant remarks, “the Bible dates the first crime…not from fratricide (Cain’s) but from the first lie…and calls the author of all evil a liar from the beginning and the father of lies.”

In the Groundwork, Kant provides us the case of the lying promise, claiming it is morally wrong to lie (I’m saving the exegesis of this passage for my section on Kant’s justification).<<ref "8">> 

In the Metaphysics of Morals, Kant unequivocally declares with vehemence:

<<<
The greatest violation of a human being’s duty to himself regarded merely as a moral being (the humanity in his own person) is the contrary of truthfulness, lying…For, the dishonor (being an object of moral contempt) that accompanies a lie also accompanies a liar like his shadow…By an external lie a human being makes himself an object of contempt in the eyes of others; by an internal lie he does what is still worse: he makes himself contemptible in his own eyes and violates…[and]…annihilates his dignity as a human being. A human being who does not himself believe what he tells another…has even less worth than if he were a mere thing…such a speaker is a mere deceptive appearance of a human being, not a human being himself.<<ref "9">>
<<<

Kant hates lying, and he takes it to be a far more serious offense than does the average person.<<ref "10">> Lying is dehumanizing. His harsh words not only rebuke lying, but even one who “asks permission to think about possible exceptions [to the exceptionless law against lying] is already a liar.”<<ref "11">> It is crystal clear to Kant that lying is always, in all cases and without exception, morally wrong. This is perhaps an unintuitive, extreme, and problematic position to many folk.

Kant is obviously quite serious about universal, exceptionless, necessary moral obligation. He even maintains his view in the face of a very compelling case of lying to the murderer at the door to save an innocent victim. Ultimately, he rebukes lying even in this case, and he responds: “To be truthful (honest) in all declarations is therefore a sacred command of reason prescribing unconditionally, one not to be restricted by any conveniences.”<<ref "12">> That some innocent person may be murdered because you were truthful is not your fault, it is an accident that your truthfulness had this result.<<ref "13">> Again, this may be going against a number of our intuitions, we may not find this position acceptable, but it is Kant’s expressed view of lying, even in hard circumstances.

What is Kant’s justification for the claim that all lying is morally wrong? In isolating and explicating Kant’s position on lying, I’ve inadvertently had to allow some of his justification for this position to bleed through. Obviously, moral obligations can only be justified, in Kant’s theory, by the Categorical Imperative (CI). The CI is the sole arbitration and justification mechanism for the generation of all concrete duties, including the duties “to never lie” or “to always be truthful” (or however it is best phrased).
I’m going to consider two formulations of the CI. Each formulation seems to offer a different kind of justification for the duty to never lie.<<ref "14">> Since we’ve already seen a sneak peak of it, let’s first consider the Formula of Humanity, “So act that you use humanity, whether in your own person or in the person of any other, always at the same time as an end, never merely as a means.”<<ref "15">> As we’ve seen, Kant thinks lying is dehumanizing to you, to the person the person to whom you are lying, and to humanity in general, a violation of this formula. In the case of lying to the murderer, from this formula, Kant believes we are treating the murderer, via lying, as merely a means (to saving the innocent life) and not as an end. As we read before, all lying is like this on Kant’s view, and hence this formulation is used as one of Kant’s justifications for the claim that all lying is morally wrong.<<ref "16">>

Consider the second formulation, the Formula of the Law of Nature, “Act as if the maxim of your action were to become by your will a universal law of nature.”<<ref "17">> He gives us a few applications of this formula, including the lying promise example. He explains:

<<<
I ask myself: would I indeed be content that my maxim (to get myself out of difficulties by a false promise) should hold as a universal law…? And could I indeed say to myself that every one may make a false promise when he finds himself in a difficulty he can get out of in no other way? Then I soon become aware that I could indeed will the lie, but by no means a universal law to lie; for in accordance with such a law there would properly be no promises at all, since it would be futile to avow my will with regard to my future actions to other who would not believe this avowal….and thus my maxim, as soon as it were made a universal law, would have to destroy itself.<<ref "18">>
<<<

A maxim with lying, in this case, couldn’t be (and maintain being) universalized, and hence lying is not permissible. Even in the case of the murderer, Kant would argue from this formulation something along the lines of: if everyone lied, then lying wouldn’t succeed in deceiving a murderer because the murderer wouldn’t believe what anyone had to say. Apparently, one can never will a maxim of lying to be universal law, and thus this formulation justifies the position that lying is never permitted and always wrong.

Is Kant correct? I fear not. My criticism will be brief. If the CI generates duties which wildly conflict with our intuitions, then perhaps the CI and the duties it generates are not justified. The case of lying to the murderer at your doorstep is a great example of where many of our moral intuitions contradict the unequivocal duty not to lie. Surely Kant has to be wrong about that, it is so obviously incorrect. In the same way that it is intuitively obvious that torturing babies is morally wrong, it is intuitively obvious that it is morally permissible (if not obligatory) to lie to the murderer at your doorstep.

Kant would respond to my criticism by pointing out that intuitions are contingent, and they cannot serve as the foundational grounds upon which to assess normative theories. I’m not sure on the matter; both directions are compelling to me (I fear I rely on intuition in figuring out whether or not I should rely upon intuition). I don’t know if we can salvage everything in Kant’s theory, and I see our project as being one of figuring out which parts of the theory we need as they are, which parts we must adjust, and which parts we must amputate to save the rest. I think there is a way to adjust Kant’s theory which can pacify and satisfy the intuition-based worry in the case of lying to the murderer without destroying the necessity, universality, and exceptionlessness at the heart of Kant’s ethics.

I think the best solution is to particularize maxims to some degree.<<ref "19">> Maxims which are informationally enriched (specifying contexts, actions, and intentions to some extent) appear to be universalizable in cases where general maxims fail the test. An enriched maxim could pass the universality test; it would be necessary, unconditional, and exceptionless. It would apply to everyone, but it would only be needed in some circumstances.

  Kant wouldn’t want to do this.<<ref "20">> The parameters of maxim creation are a matter of debate, and I know my suggested solution will make any Kantian purist cringe. Again, I think Kant’s boat is sinking, and something drastic has to be done to fix it. In order to save the theory at large, we have to jettison Kant’s parameters on maxims, and that’s okay. The results are worthwhile, and they will match our moral intuitions and experience better.

Enriched, somewhat particularized maxims better capture the complexity of moral life; such maxims are tailored to the morally salient features of circumstances in a way that overly general maxims cannot admit or appreciate. That was the problem with general maxims in the first place. A number of the “hard cases” which our moral intuitions raise against Kant’s theory can solved by providing details in maxims – that this approach pacifies and complements our intuitions shows that this approach should not be dismissed out of hand. Lying maxims which are specified enough do seem universalizable, without contradiction or inconceivability. The reason nearly everyone thinks we should lie to the murderer at the doorstep is because we’ve already universalized that enriched maxim – that’s what our intuition captures.

Of course, this solution generates many questions. How particular could maxims be? Why? Isn’t it likely that particularized duties will lack the “bite” we’ve come to expect from general duties? I don’t know how best to respond to these kinds of problems. 

---------------------------

<<footnotes "1" "8:426">>
<<footnotes "2" "Admittedly, I can’t seem to uncover Kant’s definitive position on deceptive communication which may or may not explicitly qualify as lying (e.g. deception through omission, implicit misdirection, misuse of body language). I’ll set it aside, since it is too complex a topic to consider given the space I have.">>
<<footnotes "3" "8:426">>
<<footnotes "4" "6:238">>
<<footnotes "5" "8:426">>
<<footnotes "6" "8:427, this is a topic of its own">>
<<footnotes "7" "4:389">>
<<footnotes "8" "4:403">>
<<footnotes "9" "6:429">>
<<footnotes "10" "The average person may think certain lies are terrible, but the average person also acknowledges that “white” lies are a part of everyday life. Further, the average person may have intuitions that there are circumstances where lying is not only permissible, but morally required.">>
<<footnotes "11" "8:430, Given the appearance of Kant’s Biblical proclivities, perhaps he has Matthew 5:28 in mind. ">>
<<footnotes "12" "8:427">>
<<footnotes "13" "8:429">>
<<footnotes "14" "Arriving at different justifications (where only one formula can reach a given conclusion) isn’t necessarily a bad thing. Depending on our language, it is possible to exclusively deduce different (yet not contradictory) conclusions from two equivalent propositions given the rules of inference. For example, we could have the following propositions: ~P v ~Q; ~(P & Q); ~(P & Q) -> A;  (~P v ~Q) -> B. Clearly, the first two are logically equivalent (as the formulas of the CI might be), and depending on the rules of inference in our language, we might only be able to arrive at proposition B from ~P v ~Q and (~P v ~Q) -> B, and likewise, we might only be able to arrive at A from ~(P & Q) and ~(P & Q) -> A. Perhaps to get B from ~(P & Q) in our language, we might have to first convert ~(P & Q) to ~P v ~Q, and only then we could get B. Just because the two formulations arrive at different (as long as they aren’t competing) conclusions, justifications in our analogy, doesn’t mean there is a problem. ">>
<<footnotes "15" "4:429">>
<<footnotes "16" "I have so many worries about the moves he makes in this argument. As usual, I don’t have time or space to address them.">>
<<footnotes "17" "4:421">>
<<footnotes "18" "4:403">>
<<footnotes "19" "I recognize this does not neatly address all the formulations of the CI. I don’t have time or space to do that.">>
<<footnotes "20" "5:19">>
''1.1 – Introduction''

In this paper, I will be analyzing Jonathon Vogel’s explanationism, paying especially close attention to the arguments he provides in his article “Internalist Responses to Skepticism,” where he endorses explanationism as a solution to the problem of skepticism.<<ref "1">> Explanationism defends against skepticism, roughly, by claiming that a coherence among ordinary beliefs concerning our perceptual experiences justifies the belief in the negation of skepticism (e.g. –BIV). On this view, the patterns of our ordinary experiences (E*) are better explained by our rich set of ordinary beliefs, a “real-world hypothesis” (RWH), than a “brain in a vat” hypothesis (BIV). 

The first section of this paper, (1.2-1.4), will define key terms, frame Vogel’s explanationism, and clarify what kind of skepticism he is addressing. The second section focuses entirely upon a significant reductio ad absurdum argument which Vogel uses to demonstrate that RWH is always a better explanation than BIV. The third section will examine explanationism’s reliance upon inference to the best explanation, consider various problems with making an internalist inference to the external world, and assess whether or not explanationism really diffuses the problem of skepticism.

''1.2 – What is Explanationism? What Species Is Vogel’s Explanationism?''

Explanationism (or explanatory coherentism) relies upon the principle of inference to the best explanation (IBE). Epistemic justification and knowledge are the results of some degree of internal coherence among an agent’s beliefs which have been authorized by or generated according to IBE. Explanationism often employs some kind of reflective equilibrium, piecing together, bootstrapping, revising, and negotiating of beliefs into increasingly coherent perspectives. There are few fixed judgments on this view; most planks on the boat can eventually be replaced. The theory is also fallibilist. Justified or knowledgeable agents can be wrong about their beliefs or knowledge; a justified belief or knowledge of a proposition does not logically entail the proposition is true.

IBE is the foundation of this coherentist view. The best explanation principle can invoke many kinds of explanatory criteria, including: simplicity (ontological, explanatory, or psychological), explanatory breadth or depth, coherence with background knowledge, appearing to avoid ad hoc elements, fecundity, neatness, conservatism, modesty, and testability.<<ref "2">> It remains a matter of controversy as to which (if any) of these pragmatic virtues matter, to what degree each matters, and how they balance against each other. Abductivism, an idea fairly related to explanationism, argues that hypotheses which satisfy these criteria more than their alternatives are more likely to be true. Explanationism builds upon this and takes a stronger position than the abductivist on the status of IBE. Explanationism requires a kind of explanatory coherence and expresses something more. Beebe explains:

<<<
Abductivism is not equivalent to any of the forms of explanationism that dot the philosophical landscape. In epistemology ‘explanationism’ often denotes the view that all reasoning (or at least all ampliative reasoning) is justified by explanatory considerations. This thesis is sometimes expressed as the view that all forms of inference ultimately reduce to inference to the best explanation.<<ref "3">>
<<<

According to Lycan, there are several kinds of explanationism: Weak, Sturdy, and Ferocious.<<ref "4">> Weak Explanationism is the “claim that explanatory inference can epistemically justify a conclusion.”<<ref "5">> This isn’t really exclusive to explanationism, as many already agree to this. Sturdy Explanationism adds to the weak version the claim that “explanatory inference can do its justifying intrinsically, that is, without being derived from some other form of ampliative inference, such as probability theory, taken as more basic.”<<ref "6">> Ferocious appends to Sturdy the claim that “no other form of ampliative inference is basic; all are derived from explanatory inference.”<<ref "7">> Which kind does Vogel defend? It depends on how we look at his arguments, but I think his goal is to defend the Ferocious kind of explanationism. At any rate, I will take him to be pursuing that goal in this paper.

''1.3 – Vogel Responds to What Kind of Skepticism?''

Vogel responds to external world skepticism. He deploys explanationism against what he calls “domestic” skeptics who “attempt to show us that beliefs we hold don’t count as knowledge [or justification] according to norms we ordinarily recognize.”<<ref "8">> Vogel does not seem to defend himself against what calls the “exotic” skeptic who challenges “our epistemic principle in some other way, perhaps holding them to other standards according to which ours are defective or wanting.”<<ref "9">> An exotic skeptic, perhaps like the Humean skeptic, may be going after a more global kind of skepticism than Vogel is worried about. Vogel’s concern is local, in some sense, since it pertains specifically to the set of propositions concerned with the external world. This focus upon domestic kinds of skepticism to the exclusion of exotic kinds is significant.

For example, skeptics may be infallibilists, and thus the standard of justification is extremely high. Vogel holds a fallibilist position. The move from infallibilism to fallibilism is another exotic worry which Vogel does not seem too concerned with, probably for good reasons. I don’t know how a defense of the external world can ever live up to infallibilist standards. Fallible knowledge and justification may be the only kinds that have a chance of surviving skepticism, since I think we must always concede that apodictic certainty of the external world cannot be had, and skeptics using that extreme epistemic standard are right.

Importantly, skeptics may reject the IBE standard. Vogel would see this as an exotic skepticism. The validity of the principle of inference to the best explanation is foundational to Vogel’s theory. Vogel acknowledges this is a problem for his theory, but does not address it. Since this issue is so crucial, I will be considering it in this paper, even though Vogel does not focus on defending it. 

Vogel may be sweeping other versions of exotic skepticism under the rug here. Perhaps this is a fine move; you can’t make everyone happy. Further, any successful version of domestic skepticism might seem more troubling than an exotic because it means we are losing the skeptic’s game even with our own rules.

Lastly, Fumerton makes a distinction between weak and strong skepticism, where weak skepticism targets knowledge and strong skepticism targets justification.<<ref "10">> Vogel’s argument is most successful if we interpret it as attempting to respond to strong skepticism. Oddly, while trying to defend justification, Vogel takes himself to be diffusing weak skepticism as well. I believe Vogel is mistaken in thinking his theory diffuses skepticism which targets knowledge, as it is not clear that explanationism really does lead to knowledge, even if it might result in justification. With that said, defeating strong skepticism would still be a significant step towards defeating weak skepticism because justification is a necessary requirement of knowledge.

''1.4 – Knowledge or Justification?''

Vogel spells out skepticism from the internalist perspective as follows:

*1a. In order to know M, you need to know that various possibilities of massive sensory deception do not obtain.
*1b. In particular, you need to know that you are not a brain in a vat (–BIV) stimulated so that it falsely appears to you that M.
*1c. In order to know –BIV, you have to be justified in believing –BIV.
*1d. But you are not justified in believing –BIV. 
*1e. Therefore, you do not know M.<<ref "11">>

Vogel claims explanationism can falsify premise (1d), arguing that if premise (1d) “of the skeptical argument is false…skepticism is refuted.”<<ref "12">> By this, he means that explanationism diffuses not only strong skepticism (targeting justification), but also weak skepticism (targeting knowledge). I disagree, and I wish to stress that while falsifying (1d) is certainly a worthy response, it is not a finishing blow to weak skepticism. 

Vogel focuses on (1d). (1a) and (1b) are key premises that deserve more attention. (1b) follows from (1a), and (1a) seems to derive from the closure principle, a principle which certainly seems plausible.<<ref "13">>  If we agree to these premises, then we agree that defeating the skeptic requires demonstrating that we know –BIV. I’m not sure why Vogel begins his argument with this task (not a small one at that), but never resolves it. He seems to gloss over this weighty requirement, even though he boldly claims explanationism is a “solution to the problem of skepticism.”<<ref "14">>
  
Suppose explanationism justifies the belief –BIV. To be (mildly) justified in believing    –BIV, which is what Vogel at least minimally seems to think explanationism buys us, may be necessary but not sufficient for knowing  –BIV. Vogel does not neatly close this gap for us. Even if he does get us to the point where we are justified in believing –BIV to some extent, which is a significant accomplishment, it unfortunately does not seem as though explanationism gives us knowledge of –BIV, and that’s a problem for Vogel, given the criteria he set out for himself. 

The weak skeptic’s epistemic requirement is very high: knowledge, not merely justified belief. Presumably, the strong skeptic’s epistemic requirement is also a very high degree of justified belief.  Explanationism will likely fail to provide knowledge of –BIV, and hence Vogel’s argument will not diffuse weak skepticism. We will examine much more closely whether or not Vogel is able to defeat the strong skeptic.  It would be no small feat to demonstrate that we can be justified in believing in the external world, even if we don’t necessarily know.  

It would strengthen Vogel’s argument at large if he explicitly chose to focus on responding to strong skepticism, targeting justification. Perhaps it would be useful to Vogel if we modify his sketch of the skeptic’s argument in this way:

*1a. In order to know M, you need to be justified in believing that various possibilities of massive sensory deception do not obtain.
*1b. In particular, you need to be justified in believing that you are not a brain in a vat (–BIV) stimulated so that it falsely appears to you that M.
*1c. But you are not justified in believing –BIV. 
*1d. Therefore, you do not know M.<<ref "15">>

Perhaps Vogel just wouldn’t go for this. He really may have meant what he said throughout his paper.<<ref "16">> Vogel would not claim to have defended knowledge lightly. This apparent slip from justification to knowledge may not be an accident; Vogel knows what he is doing. If so, why does he do it? Perhaps he employs some sort of probabilistic justification standard. When he thinks RWH explains our data better than BIV, he means to say that RWH is more likely to be true via IBE. This is where that probabilistic standard sitting beneath IBE seems to arise. If this is true, then we should probably interpret Vogel as offering a less than Ferocious account of explanationism. 

We might only get some weak form of justification when probabilities are low, but it doesn’t seem like we get knowledge without a really high chance. That we have such a high chance is something which Vogel would need to demonstrate.

Unfortunately, isn’t clear that RWH is far, far more likely than BIV. RWH is a better explanation of E* than BIV, but by what margin? Doesn’t this margin need to be significant? There needs to be a wide gulf in explanatory power between RWH and BIV before we can move on from mere justified belief to knowledge. I think Vogel doesn’t pay enough attention to that issue. So, he might get us to a point of being mildly justified in believing RWH, but it still does not seem like explanationism gets us knowledge. 
Setting this matter aside, let us see if Vogel’s explanationism can do the job of justifying belief in RWH instead of BIV.

''2 – Vogel’s Reductio''

One centerpiece argument Vogel offers in favor of explanationism is a powerful reductio which demonstrates why RWH has more explanatory power than BIV regarding our ordinary experience E*. He begins with the Art-attribution case:

<<<
Max is an art historian studying an old altarpiece. The best explanation of various features of the painting that he has been able to devise so far is that it was executed by two different painters. Accordingly, Max's initial version of RWH, RWH1, includes a belief that the altarpiece was due to two different hands. However, reconsidering the available information, Max realizes that a more satisfactory explanation of the data is that the altarpiece was painted by one person over a long period of time. Incorporating that belief into Max's total body of beliefs about the world gives him a new belief corpus, RWH2. RWH2 differs from RWH1, and the former has somewhat more explanatory merit overall than the latter.<<ref "17">>
<<<

Vogel argues for his reductio in this way:

<<<
Ultimately, RWH2 explains some aspect(s) of E* better than RWH1 does…RWH1 and RWH2 also compete with BIV. Let us consider Max after he has changed his mind about who painted the altarpiece. Suppose that the skeptic is right and Max has no justification for rejecting BIV at this point. In that case, RWH2 and BIV must offer equally good explanations of E*. But then, since BIV explains E* just as well as RWH2 does, and RWH2 explains E* better than RWH1 does, it follows that BIV explains E* better than RWH1 does. That is, before he changed his mind about who painted the altarpiece, Max was justified in believing that he was a brain in a vat, which surely cannot be right. We have here a reductio ad absurdum of the assumption that Max has no basis for preferring RWH2 to BIV on explanatory grounds.<<ref "18">>
<<<

Vogel claims to have an argument which proves the claim RWH2 is a better explanation of the historian’s evidence, E*, than BIV. This argument is crucial and significant, and unfortunately, I found his explanation somewhat unclear. If he really had a reductio, why didn’t he just write it out? In my survey of the literature on this topic, I only found one source which tried to explain what he might be doing here. I’m representing Kevin McCain’s argument from his dissertation (Vogel was on the committee) on the reductio here:

# RWH2 and BIV are equally good explanations of E*                              -- [AP for Reductio]
# RWH1 and BIV are equally good explanations of E*                                --            [Premise]
# If (α and ψ are equally good explanations of φ), and                                 --     [Transitivity’] 
##(α is a better explanation of φ than β), then 
##(ψ is a better explanation of φ than β)               
# RWH2 is a better explanation of E* than RWH1 		            --         [From Example] 
# BIV is a better explanation of E* than RWH1		              --                      [From 3, 1, 4]
# ~(BIV is a better explanation of E* than RWH1)		                --                 [From 2]
# ⊥									              --   [From 5, 6]
# ~(RWH2 and BIV are equally good explanations of E*)	 --            [Reductio from 1-7]<<ref "19">>

McCain stops here. Unfortunately, this doesn’t show that RWH2 is a better explanation of the historian’s evidence, E*, than BIV. Vogel does assume in his 43rd footnote that no one would argue that BIV is a better explanation of the historian’s evidence than RWH2, and we might take this as a premise: 

* 9. ~(BIV is a better explanation of E* than RWH2)		       --                        [Premise]

Now we see how to get to the conclusion we really want:

* 10. RWH2 is a better explanation of E* than BIV                            --                         [From 8, 9]

This is the significant conclusion which Vogel wants. Unfortunately, this reductio doesn’t look like anything which Vogel actually says. Vogel declares he has a reductio of the claim that “Max has no basis for preferring RHW2 to BIV on explanatory grounds.”<<ref "20">> McCain’s reductio does not match that, although his argument still has quite a bit of force to it (I suspect Vogel also agreed to it).

Also, it is unclear why we would go through the work for a reductio, as there seems to be a much quicker version of the argument one could offer given basically the same premises:

# RWH1 and BIV are equally good explanations of E*              --                             [Premise]
# RWH2 is a better explanation of E* than RWH1 		            --        [From Example] 
# If (α and ψ are equally good explanations of φ), and   --                                 [Transitivity’’]   
##(β is a better explanation of φ than α), then 
##(β is a better explanation of φ than ψ)               
# RWH2 is a better explanation of E* than BIV		  --                      [From 3, 1, 2]

Why wasn’t this argument offered? I think it wasn’t offered because it is more obvious that something fishy is going on. I’ll get to what is going wrong here in a bit. In any case, McCain’s version of the argument does not match what Vogel says. Going back to Vogel’s text, it is clear that he is using temporal language. He distinguishes when hypotheses are discovered, and this is an important clue for us. I will follow his text very closely and fill in gaps where I must (I’ve not neatly placed all premises at the top because that is not how Vogel’s argument flows):

# ~(At time T2, RWH2 is a better explanation of E* than BIV) 	--      [AP for Reductio]
# At time T2, RWH2 is a better explanation of E* than RWH1           --           [From the Text] 
# At time T2, RWH2 and BIV are equally good explanations of E*       --       [From the Text]
# If (at time Ti, α and ψ are equally good explanations of φ), and          --          [Transitivity1]                                                 
##(at Ti, α is a better explanation of φ than β), then 
##(at Ti, ψ is a better explanation of φ than β)               
# At time T2, BIV is a better explanation of E* than RWH1		  --          [From 4, 3, 2]
# If (at time Ti, α is a better explanation of φ than ψ), then                 --         [Time Premise1]
##(at time Tk, α is a better explanation of φ than ψ), 
##where k is any arbitrary number
# At time T1, BIV is a better explanation of E* than RWH1		--	    [From 6, 5]
# At time T1, RWH1 and BIV are equally good explanations of E*    --        [From the Text?]
# ~(At time T1, BIV is a better explanation of E* than RWH1)	            --        [From 8]
# ⊥ 									--       [⊥Intro, 7 and 8]	
# At time T2, RWH2 is a better explanation of E* than BIV	     --       [Reductio from 1-12]

Note that from the conclusion (11), via repeated application of (6), we know RWH2 is a better explanation of E* than BIV at any time. This would be a significant claim to prove. This unspoken time premise, (6), is crucial to getting the results that Vogel needs.

Let us dig into this argument a bit. We should grant (4), since it is obviously correct. The two premises which are most curious are (6) and (8). 

Vogel does not explicitly claim (8) in this passage, but he seems to argue for it when he says “before he changed his mind about who painted the altarpiece, Max was justified in believing that he was a brain in a vat, which surely cannot be right.”<<ref "21">> Indeed, it does seem essential to the skeptic’s argument that BIV is equally good at explaining E* as the best RWHi we have available. RWH1 was the best RWHi we had at T1, hence it would make sense to accept (8) for the sake of argument.

That leaves the time premise. I think (6) is an important part of Vogel’s argument, and it is a shame he didn’t examine it. Let us carefully think through what went on in (2-5), right before this time premise. All of the moves make sense. After Max has changed his mind about who painted the altarpiece (T2), RWH2 was the best RWHi available, and thus BIV was made to be equally good at explaining E*, thus at T2, RWH2 and BIV are better explanations of E* than RWH1. What then is (6) doing? It shows, in this case, that if BIV is a better explanation of E* than RWH1 at some point in the future, then it is also the case in the past. But, why should we think that? I’m not sure. Admittedly, some part or application of the time premise seems right. 

Interestingly, similar to the McCain version, Vogel didn’t need to give us a reductio ad absurdum. Vogel could have just offered this argument instead:

# At time T1, RWH1 and BIV are equally good explanations of E*       --       [From the Text]
# If (at time Ti, α and ψ are equally good explanations of φ), then         --      [Time Premise­2]                                                 
##(at time Tk, α and ψ are equally good explanations of φ),  
##where k is any arbitrary number
# At time T2, RWH1 and BIV are equally good explanations of E*            --         [From 2, 1]
# At time T2, RWH2 is a better explanation of E* than RWH1                   --  [From the Text] 
# If (at time Ti, α and ψ are equally good explanations of φ), and               --     [Transitivity2]                             
##(at time Ti, if β is a better explanation of φ than α), then
##(at time Ti, β is a better explanation of φ than ψ)             
# At time T­2­, RWH­2 is a better explanation of E* than BIV                           --  [From 5, 3, 4]

We got (6), which was the conclusion in the reductio, by using different transitivity and time premises (which were just as plausible as the first ones he used). Notice that with time premise­1 added, Vogel still gets what he wants, which is the claim that we know RWH2 is a better explanation of E* than BIV at any time.

These time premises are very powerful, and they are the keys to amplifying particular conclusions into the universal results Vogel wants. It is unclear if we must accept Vogel’s unspoken time premises. Even if we grant Vogel these time premises, something fishy is going on here. The problem has to do with timing. Maybe it isn’t the time premises themselves, but rather the way in which Vogel handles the BIV hypotheses in these arguments.

Vogel’s reductio seems to treat BIV as monolithic hypothesis with a static degree of explanatory merit regarding E*. The reductio only follows on the assumption that BIV’s explanatory power doesn’t change through time. But such an assumption seems to be missing the point: the whole strategy of the BIV argument is that no matter how strong a RWH­i­ we come up with there is an equally good BIV argument. The ability for BIV’s explanatory power to change given the strength of our RWH­i­ is already stipulated, and yet the implications of this ability are not well described in Vogel’s reductio. 

While on one hand Vogel treats BIV as a monolithic and static hypothesis, on the other, Vogel seems to recognizes that BIV scales with explanatory merit of various RWH’s, else he would not be able to posit both that RWH­2­ and BIV have equal explanatory merit in (2) and  that RWH­1­ and BIV have equal explanatory merit in (8). In this sense, Vogel is more aware that the skeptic employs some sort of mechanism which ensures that BIV is equally good at explaining E* as the best RWHi ­we have available, at any time T­i. Vogel does not effectively reconcile this tension.

Timing is important to this mechanism and its output, and Vogel’s explanation and use of BIV has failed to capture that. Here’s what I think is really happening: 

Consider RWH­1­ as the best RWH­i­ we have available for explaining E* at time ­T­1­. The skeptic’s mechanism crafts BIV to be equally good as RWH­1 ­at explaining E* at time T­1­. Let’s call this version BIV1­. At T­2­, we discover a better RWH­i­, call it RWH­2­. The skeptic’s mechanism recognizes this, so it strengthens the old BIV­1­ to be equally good at explaining E*as RWH­2­, call it BIV­2­. We would say that both RWH­2­ and BIV­2­ are better explanations of E* than RWH1 ­and BIV­1­. If this is the correct way of thinking about it, then the premises must be rewritten, and the attempted reductio argument will play our differently:

# ~(At time T2, RWH2 is a better explanation of E* than BIV­2) 	--      [AP for Reductio]
# At time T2, RWH2 is a better explanation of E* than RWH1           --           [From the Text] 
# At time T2, RWH2 and BIV­2 are equally good explanations of E*     --        [From the Text]
# If (at time Ti, α and ψ are equally good explanations of φ), and          --          [Transitivity­1­]                                                 
##(at Ti, α is a better explanation of φ than β), then 
##(at Ti, ψ is a better explanation of φ than β).               
# At time T2, BIV­2 is a better explanation of E* than RWH1		       --     [From 4, 3, 2]
# If (at time Ti, α is a better explanation of φ than ψ), then                      --     [Time Premise­1­]                           
##(at time Tk, α is a better explanation of φ than ψ), 
##where k is any arbitrary number.
# At time T1, BIV­2 is a better explanation of E* than RWH1		--	    [From 6, 5]
# At time T1, RWH1 and BIV1 are equally good explanations of E*  --         [From the Text?]
# ~(At time T1, BIV1 is a better explanation of E* than RWH1)	    --                 [From 8]
# ⊥ 					       			            --        [⊥Intro, 7 and 8]	

Notice that we can’t get (10) from (7) and (9), as we are comparing BIV­2­ to RWH­1­ in one, and BIV­1­ and RWH­1­ in the other. At no point can we conclude that RWH2 is a better explanation of E* than BIV­2­, which is what Vogel would need.  The second argument fails to deliver what Vogel needs as well, as the conclusion becomes: (At time T­2­, RWH­2 is a better explanation of E* than BIV­1).

I am convinced neither Vogel’s reductio nor the shorter, alternative arguments I suggested will get Vogel the conclusion he needs (the same is also true for McCain’s versions). I don’t think this argument provides us justification to believe RWH instead of BIV.

''3.1 –IBE and Justification ''

Vogel claims RWH explains the sum of our sensory experiences, E*, better than BIV, and thus we are justified in accepting RWH, and consequently, in accepting –BIV. At least some real-world hypotheses are thought to be simpler and more unified than BIV hypotheses, and thus some RWH­i are better at explaining E*. On Vogel’s view, any version of BIV should be rejected because it is comparatively too complex and perhaps ad hoc. Should we really agree that some RWH necessarily has more explanatory merit than all BIV hypotheses? 

Indeed, some models of BIV, perhaps even the usual ones, will build on top of a RWH (possibly in an ad hoc manner) an abstraction, an extra layer, an added mechanism, or an additional agent which explains E*. On such models, BIV is thought to be more complex than RWH, and therefore such models have less explanatory merit than RWH. But is this the case for all BIV hypotheses? This seems to be what Vogel needs, and yet it is far from clear that this is true. 

Further, the skeptic need not convincingly demonstrate a case where BIV is simpler than RWH – he merely needs to open our eyes to the possibility of such a thing. Is it at least possible that some BIV hypothesis could have more explanatory merit than real-world hypotheses? Maybe. That’s a problem for a theory which relies upon showing not only that the usual BIV hypotheses have less explanatory merit than at least one RWH, but that all BIV hypotheses must have less explanatory merit than some RWH

''3.2 – Some Preliminary Concerns''

# Vogel claims there are two competing causal explanations of my experience, E*, “the relevant body of evidence, the ‘data’ to be explained…the occurrence and nature of my experience,” namely either the set of my ordinary beliefs about the world, RWH, or BIV.<<ref "22">> He further claims that if “explanationism is correct, then E* justifies both our ordinary beliefs about the world (including perceptual beliefs) and the rejection of –BIV.”<<ref "23">> Is this right? Why should the thing to be explained, E*, justify belief in the hypothesis which explains it? Rather than E* directly justifying belief in RWH, it seems to make more sense to say IBE justifies believing RWH, instead of BIV, as the causal explanation of E*. 

# For anyone who holds strong doxastic voluntarism, it seems like some of the best ways to achieve explanatory coherence in our belief systems is to simply throw out specific trouble-making beliefs. What’s to stop us from doing that on the explanationist view? Isn’t that a problem?<<ref "24">>

# What if we think IBE is more objectionable than the RWH itself?<<ref "25">> It wouldn’t be acceptable to employ epistemic standards which are more objectionable than the targets which those standards are trying to explain and justify. This is a possibility for the skeptic. Shouldn’t the explanationist explain why IBE stands on firmer ground than RWH, thus enabling IBE to be in a position to explain RWH?

# There seems to be another skeptical possibility other than the usual skeptical claims, such as demons or brains in vats, specifically in the case where the explanationist feels they can explain causation better in terms of the RWH. What if our sensory experiences are uncaused?<<ref "26">> Note, the scope isn’t some global denial of causation or induction in general, but rather a denial of causation of sensory experience (without resorting to “chance,” from which an explanationist may have a foothold). Explanationism would be trying to find an explanation for something which is uncaused. Admittedly, to say that something is uncaused is sort of a causal story already. Obviously, the explanationist believes our sensory experiences have external causes, but isn’t that an assumption which must be defended? We don’t ordinarily doubt that sensory experiences have causes (that would be crazy, right?), but philosophically, we can. It is far from clear how the explanationist can explain how we know (or why we are justified in believing) our experiences have causes. This seems like another possible objection or doubt the skeptic can raise against explanationism.  

''3.3 – Argument from Simplicity ''

Vogel argues that in RWH, “certain truths about spatial properties and relations are necessary.”<<ref "27">> Vogel says, “In short, according to RWH, that Dist(a, b, c) is greater than Dist(a, c) at least partly explains T,” where T = “why one set of experiences (those you have walking the long way) has greater duration than another set of experiences (those you have walking the direct way).”<<ref "28">> 

In contrast, Vogel thinks a digital simulation (working from Bonjour’s analog/digital distinction) of these spatial properties and relation, such as we would find in an “isomorphic skeptical hypothesis” (ISH), supposedly one of the most defensible versions of BIV, are contingent rather than necessary.<<ref "29">> In order to explain T as effectively as RWH, this contingency requires ISH to “to introduce some further empirical regularity” in the mechanisms which make [Dist (a, b, c) > Dist(a, c)] true in the artificial world.<<ref "30">> That adds to the complexity of ISH, and it makes it less simple than RWH. 

Simplicity, in Vogel’s view, is one way to allocate and characterize the differences in explanatory merits between competing hypotheses. Vogel’s argument here is that RWH is simpler than the best BIV hypotheses (ISH variants), and thus RWH is a better explanation of T (and essentially E*) than all BIV’s. Should we really agree to simplicity as having so much sway? I don’t see why we should. Simplicity is attractive, but it seems far too weak to determine which hypotheses are more justifiable than others.

Hundreds of years ago, Newton’s theory was coherent given the data people had. The simplicity component of IBE would select and justify Newton’s theory. They were justified in believing it, but that doesn’t make Newton’s theory correct. It just so happens that a far more complex hypothesis is better. We do have better data nowadays, and that data is better explained by a complex hypothesis. Doesn’t this reveal a problem though? Knowledge or justification is deeply constrained by the data we have in the first place. Sometimes we don’t have a sufficient dataset from which to be sufficiently justified, and even if we are justified in some minimal sense, we don’t know we have the truth. Why should we believe that simplicity really gives us the correct answer? Why is it even more likely to arrive at the truth? 

Doubting Bonjournian digital explanations merely because they lack simplicity is a practice that many scientists don’t even practice. There are physicists who believe we live in one universe of many – that we are part of a multiverse.  They likely can’t prove it or test it, although they have models that describe our universe which suggest it (admittedly, it may not even be science). 

A multiverse is very similar to a digital explanation – it requires admitting that this vast, complex, and beautiful thing we call a universe may not really exist as we think it does, it may be caused for reasons beyond us, it may be incomplete or distorted, perhaps illusory in some ways. Most importantly, a multiverse breaks out of the simplicity mold. These people, who to my mind are experts on the external world (they have incredibly complex RWH’s), are willing to reject simplicity and embrace digital explanations.  Why shouldn’t we? Maybe BIV’s lack of simplicity isn’t as big of a deal as Vogel thinks. Simplicity might point in the direction, but it seems weaker than Vogel claims.

''3.4 – Argument from Ad Hocness''

Vogel believes BIV, unlike RWH, is an ad hoc hypothesis. Vogel explains, “RWH, our ordinary view of the world, has an elaborated structure that gives it considerable explanatory richness and power. Therefore, it is no surprise that skeptical hypotheses with little or no worked‐out structure are inferior to RWH from an explanatory standpoint. This difference justifies us in rejecting such meager skeptical hypotheses on explanatory grounds.”<<ref "31">> BIV, as Vogel sees it, is just a shell of a hypothesis with no real teeth or purpose – it is ad hoc. 

Vogel roughly defines an ad hoc explanation as, “one that explains only the phenomena it was introduced to explain and is not otherwise confirmed or testable.”<<ref "32">> Isn’t this a serious problem for the RWH as well though? RWH exists to explain E*, and it is also not otherwise confirmed or testable. It isn’t like we can line-up our competing hypotheses, RWH and BIV, and “go out,” in the most purely objective sense, into the world and empirically test which one is true or false. I fundamentally don’t see how either RWH or BIV could be empirically confirmed. Vogel needs to do a lot more to convince us that it is empirical, and then he must show why RWH does not suffer from the same ad hoc perspective as BIV. 

Further, this requirement of an “elaborated structure” seems to miss the point. Does the skeptic really need to draw out exactly how, in detail, BIV works? A skeptic with some sympathy towards Vogel’s claims here might just need to argue that there could be a BIV hypothesis which has equal or better explanatory powers to our best RWH hypotheses, even if we don’t immediately have a BIV hypothesis at hand which satisfies Vogel. Perhaps we must prove the skeptic is wrong in a complete sense, else that doubt will always be there. 

Comprehensive, elaborated fantasies can still be wrong, and skeletal hypotheses lacking detail can still be right. What merely seems ad hoc may not be. Avoiding the appearance of ad hocness seems quite attractive, especially when trying to convince others, but it doesn’t necessarily (or perhaps even probably) get us to truth.

''3.5 – Objectivity and Subjectivity''

RWH is a more natural hypothesis to generate than BIV; it is what the usual mode in which we receive the world. That doesn’t, however, make it right. I worry that IBE, the principle which authorizes RWH, is just epistemic laziness. It is a way to cut corners for the sake of convenience.<<ref "33">> We merely hope it is a shortcut to truth. It is unclear why we should think coherence based on IBE, with its variety of criterion, is necessarily connected to the truth, a matter quite external to us. Ultimately, the most coherent belief systems may still be pure fantasy. Vogel may consider questioning IBE as a form of exotic skepticism, but from what I can tell, worrying about the potency and authority of IBE is a valid and crucial concern. 

If I were to be very pessimistic and perhaps not charitable enough about explanationism, I would say it is too internalist.<<ref "34">> We never settle the actual matter of an external world. The coherentist view doesn’t seem to care enough about how beliefs correspond to facts in the real world. The coherentist view seems to over-prioritize the epistemic over the ontological. It borders on claiming that the world is the way we think it is. That seems so backwards. On such a view, explanationism doesn’t really care about the ontic structure external to us; it only cares about the epistemic structure internal to us, about how our perceptions and beliefs mesh together. We might argue that internalist truth is a relation between one’s hypothesis and one’s mind, without any serious consideration about the world. In actuality, truth is a relation between one’s hypothesis and the world. Justification, unlike truth, is probably a relationship between one’s hypothesis, one’s mind, and the world. Perhaps explanationism focuses too much upon one’s hypothesis and mind to the exclusion of the world (despite the fact that it claims to really be interested in justifying our beliefs about the world). 

Maybe there are other hypotheses besides BIV which compete with RWH and are just as coherent and possess the same explanatory force as RWH. It seems like explanationism never settles the matter. It isn’t concerned enough with making sure one reaches the right final answer, only that one reaches an internally acceptable answer at any given moment. Explanationism seems to suffer from the problem that most coherentist theories face: there seem to be a plurality of coherent sets of beliefs, and coherentism fails to reveal or select the one complete set of true beliefs (if there is one). Shouldn’t we be worried that explanationism seems to be capable of justifying multiple, incompatible hypotheses? Perhaps coherentism takes fallibilism too far.
 
We might imagine scenarios in which the objectively better explanation, such as a newly released Copernican model, does not explain our current data or predict as effectively as another objectively worse explanation, such as the Ptolemaic model. From what I recall, when the Copernican model was first offered, the Ptolemaic view was, for a brief time in history, still a more coherent hypothesis than the Copernican one. In such a case, the explanationist must defend the objectively weaker view, the Ptolemaic model. Shouldn’t this kind of thing be a problem? I worry that explanationism doesn’t even hope to aim for objectivity (although, perhaps it is arrogant to think we can reach it). 

Availability of hypotheses seems to be a worry. What if I can only access a really small number of hypotheses, and objectively speaking, they are all really bad. Explanationism doesn’t seem to give us the kind of reasons to think this is a bad thing. Explanationism seems, subjectively speaking, to give us justification for believing what might be the best of those available hypotheses, but from an external or objective view, those hypotheses are so bad that they just aren’t really worth having, they aren’t really justifiable – they don’t really help us get close enough to the truth. It isn’t clear how IBE results in any of our hypotheses being “likely true” at all. You can’t seem to infer the best (or even decent) explanation, in our example, because you never had access to it. Why should we think we have access to the best explanation/hypothesis? Why should we even think we have access to adequate explanations/hypotheses which are merely good enough? It seems like the explanationist must take these on faith. I don’t see why we are necessarily justified in thinking that one of the explanations in our pool of accessible explanations will be the correct one or even a worthy explanation.

Why should we agree to IBE? IBE demonstrates that certain propositions are epistemically more attractive than others, but it doesn’t necessarily demonstrate, as far as I can tell, that certain propositions are more likely than others. I feel the two are conflated in the explanationist theory. Even if explanationism does demonstrate that a hypothesis is more likely, is that really enough for justification? It seems like probabilistic justifications (which seem oddly externalist) might justify us, but we may never be in a position to know when we are justified (which should be a problem for an internalist).

Ultimately, explanationism suggests that we are justified in our beliefs (or even have knowledge possibly), regardless of whether or not we are brains in vats. It seems like explanationism is so internalist that it disregards the problem of skepticism entirely. As Vogel says himself, he’s really not interested in exotic skepticism, including skepticism of IBE. Is this missing the point of skepticism? Possibly.

''3.6 – BIV: Juicing Our Intuitions from a New Perspective''

The notion of brains in vats has generally been the stuff of mere fiction and imagination. It has, as far as we know, never been a real thing for us to examine. Perhaps some people think an elaborate hoax, such as being a BIV, is ad hoc or impossible because, until recently, something like that was unfathomably impractical. I wonder if our intuitions on this topic may be skewed simply because we’ve never personally known ourselves to experience or see a BIV experiment in action. The BIV topic has generally revolved around whether we, as humans, are hypothetically brains in vats. That has a subjective perspective to it, and it may have a certain set of biases that come with it. We don’t want it to be true! We prudentially need it to be false. Perhaps our intuitions are skewed because our stance is too subjective. What if we could have a more objective stance in some sense? Interestingly, the possibility that we may create our own brains in vats is a problem we might face in our own lifetimes!

Some people, particularly those from materialist persuasions, can envision artificially created sentient creatures with human-like intelligence built from what we ordinarily think of as computer hardware or software. Artificial intelligence, even minds like ours, really could be created within our lifetimes. Further, some programmers are really sick and twisted folk with way too much time on their hands, and it seems very possible that if AI existed, some mad programmer would design a digital world in which to entrap these artificial minds (we already create rough, small-scale versions of digital worlds for video gamers). 

Maybe our artificial creatures will just be digital creatures, with digital bodies and digital sensations, etc. These artificial creatures might, psychologically and intellectually speaking, be identical to us. They will believe the mad-programmer’s Matrix is the external world, and they will have reasons like we do, fulfilling all the explanationist requirements.

 When these artificial creatures, trapped in the mad-programmer’s Matrix, employ Vogel’s explanationism, will we as humans, sitting outside the Matrix and looking upon these brains in vats, think they have knowledge or justified belief of an external world? 

From our perspective, a more objective perspective than these creatures arguably have, I think we will be far more hesitant to say these intelligent beings have knowledge or justified belief. Their fallibility and the fact that they’ve been hoodwinked will be right there before us. Their lives would be filled with lies. We would know that. 

From their perspective, facing the same problems we do in philosophy, they will subjectively feel more justified in believing in the external world than perhaps they ought. They will argue from simplicity, and yet we will know better. They will argue BIV is ad hoc, and yet we will know better. IBE and explanationism may comfort them, but we will know better. But, when we apply the same standard to ourselves, why are we any different from these creatures?

Some people seem to take the BIV hypothesis as just being too outlandish. They don’t want to envision it, and they have a bias against it. Perhaps life would not be right if it were true. Consider the problem of moral life in Nozick’s experience machine. Admittedly, being justified in believing the external world might not turn out to be that hard. Perhaps living a life worth living requires it, and this is a kind of Pascal’s wager – where we have nothing or something, and we are justified in having faith-like belief for prudential reasons. This isn’t what the skeptic is talking about though, and he will tell us that we’ve missed the point. If and when we are the keepers of brains in vats, will our intuitions change on this topic? Maybe.

''4 – Conclusion''

	Vogel’s explanationism is powerful and something about it is intuitively right. Its use of IBE and interest in coherence is admirable. Many of the underpinnings of explanationism don’t seem justified. I think one could make foundationalist moves to support this theory. Explanationism may turn out to justify our belief in RWH instead of BIV, but it isn’t yet clear that it does. Ultimately, the skeptic always seems to be in a position to call into doubt the principle of inference to the best explanation and the results of that principle. Explanationism may eventually turn out to be a reasonable response to skepticism, but it does not defeat skepticism.

--------

<<footnotes "1" "Jonathon Vogel, 'Internalist Responses to Skepticism,' in //The Oxford Handbook of Skepticism//, ed. John Greco (Oxford: Oxford University Press, 2008): 533-556">>
<<footnotes "2" "Beebe, James R. 'The Abductivist Reply to Skepticism.' //Philosophy And Phenomenological Research// 79, no. 3 (November 1, 2009): 609-611 and Lycan, William G. 'Explanation and Epistemology.' In// The Oxford Handbook of Epistemology//, Oxford: Oxford Univ Pr, 2002: 10">>
<<footnotes "3" "Beebe, James R. 'The Abductivist Reply to Skepticism.' //Philosophy And Phenomenological Research// 79, no. 3 (November 1, 2009): 612">>
<<footnotes "4" "Lycan, William G. 'Explanation and Epistemology.' //In The Oxford Handbook of Epistemology//, Oxford: Oxford Univ Pr, 2002: 11">>
<<footnotes "5" "Ibid.">>
<<footnotes "6" "Ibid.">>
<<footnotes "7" "Ibid., 12">>
<<footnotes "8" "Vogel, Jonathan. 'Skeptical Arguments.' //Nous-Supplement: Philosophical Issues// 14, (January 1, 2004): 439">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "Fumerton, Richard A. //Metaepistemology and Skepticism//. Lanham, MD: Rowman & Littlefield, 1995. DJVU: 29-30">>
<<footnotes "11" "Jonathon Vogel, 'Internalist Responses to Skepticism,' in// The Oxford Handbook of Skepticism//, ed. John Greco (Oxford: Oxford University Press, 2008): 533">>
<<footnotes "12" "Ibid., 544">>
<<footnotes "13" "Very broadly, we might explain the principle in this way: If S knows (or S is justified in believing) P, and S knows (or S is justified in believing) P entails Q, then S knows or S can come to know (or S is justified in believing or S is justified in coming to believe) Q. Admittedly, some version of this principle seems like it must be correct. ">>
<<footnotes "14" "Ibid., 550">>
<<footnotes "15" "Ibid., 533">>
<<footnotes "16" "I’m beginning to believe he does mean it.">>
<<footnotes "17" "Vogel, Jonathan. 'Internalist Responses to Skepticism.' //Oxford Handbooks Online//, September 2009: 14">>
<<footnotes "18" "Ibid., 15">>
<<footnotes "19" "McCain, Kevin. 'Inference to the Best Explanation and the External World: A Defense of the Explanationist Response to Skepticism.' Diss., University of Rochester, 2011. http://hdl.handle.net/1802/21405.">>
<<footnotes "20" "Ibid.">>
<<footnotes "21" "Ibid. 15">>
<<footnotes "22" "Ibid., 5">>
<<footnotes "23" "Ibid.">>
<<footnotes "24" "Lycan, William G. 'Explanation and Epistemology.' In //The Oxford Handbook of Epistemology//, Oxford: Oxford Univ Pr, 2002: 25">>
<<footnotes "25" "Beebe, James R. 'The Abductivist Reply to Skepticism.' //Philosophy And Phenomenological Research// 79, no. 3 (November 1, 2009): 626">>
<<footnotes "26" "Fumerton, Richard. 'Skepticism and Reasoning to the Best Explanation in Rationality in Epistemology, Villanueva, Enrique (ed).' Atascadero: Ridgeview, 1992: 162-163.">>
<<footnotes "27" "Vogel, Jonathan. 'Internalist Responses to Skepticism.' //Oxford Handbooks Online//, September 2009: 18">>
<<footnotes "28" "Ibid., 19">>
<<footnotes "29" "Ibid., 18">>
<<footnotes "30" "Ibid., 19">>
<<footnotes "31" "Ibid., 16-17">>
<<footnotes "32" "Ibid., 15">>
<<footnotes "33" "Lycan, William G. 'Explanation and Epistemology.' In //The Oxford Handbook of Epistemology//, Oxford: Oxford Univ Pr, 2002: 15">>
<<footnotes "34" "Perhaps any adequate theory of justification and knowledge must have a foot in both the externalist and internalist camps. If you go too far to any side of the spectrum, you get some lousy results. That said, I don’t know how the externalist gets to the external world either.">>

-----------

''Bibliography''

Achinstein, Peter. "Explanation Versus Prediction: Which Carries More Evidential." //Oxford Scholarship Online//, November 3, 2001. 
Allen, Ronald J. "Explanationism All the Way Down." //Episteme: A Journal Of Social Epistemology// 5, no. 3 (January 1, 2008): 320-328.

Beebe, James R. "The Abductivist Reply to Skepticism." //Philosophy And Phenomenological Research// 79, no. 3 (November 1, 2009): 605-636.

BonJour, Laurence, and Ernest Sosa. //Epistemic Justification: Internalism vs. Externalism, Foundations vs. Virtues//. Malden, MA: Blackwell Pub., 2003. PDF.

Byerly, T. "Explanationism and Justified Beliefs about the Future." //Erkenntnis// 78, no. 1 (February 1, 2013): 229-243.
Fumerton, Richard A. Metaepistemology and Skepticism. Lanham, MD: Rowman & Littlefield, 1995. DJVU.

Fumerton, Richard. "Skepticism and Reasoning to the Best Explanation in Rationality in Epistemology, Villanueva, Enrique (ed)." Atascadero: Ridgeview, 1992.

Harper, Alexander. "An Oblique Epistemic Defence of Conceptual Analysis." //Metaphilosophy// 43, no. 3 (April 2012): 235-56.
Lipton, Peter. Inference to the Best Explanation. 2nd ed. London : Routledge, 2005. PDF.

Lycan, William G. "Explanation and Epistemology." In //The Oxford Handbook of Epistemology//, Oxford: Oxford Univ Pr, 2002.

McCain, Kevin. "Inference to the Best Explanation and the External World: A Defense of the Explanationist Response to Skepticism." Diss., University of Rochester, 2011. http://hdl.handle.net/1802/21405.

Moretti, Luca. //Global Scepticism, Underdetermination and Metaphysical Possibility//. University of London. PhilPapers. http://philpapers.org/rec/MORGSU.

Peacocke, Christopher. //The Realm of Reason//. Oxford: Clarendon Press, 2004. PDF.

Poston, Ted. "Explanationist Plasticity and the Problem of the Criterion." //Philosophical Papers// 40, no. 3 (November 2011): 395-419.

Jonathon Vogel, "Internalist Responses to Skepticism," in //The Oxford Handbook of Skepticism//, ed. John Greco (Oxford: Oxford University Press, 2008): 533-556

Vogel, Jonathan. "Internalist Responses to Skepticism." //Oxford Handbooks Online//, September 2009. 

Vogel, Jonathan. "Skeptical Arguments." //Nous-Supplement: Philosophical Issues// 14, (January 1, 2004): 426-455.
''1 - Introduction''

In this paper, I will trace measurement, and in particular the measure of the mean, as found in the Statesman. I will try to show how and why measurement is a central theme in the Statesman. I hope we can find ourselves in a better position to interpret passages which are less clear or obliquely employ the concept of measurement. 

From what I have gathered, the words “measure,” “measured,” and “measurement” show up a sum total of only fourteen times in the Statesman.<<ref "1">> As for direct synonyms and highly related words to the measure of the mean: the words “fit,” “fits,” “fitted,” “befits,” and “fitting” show up eighteen times in total.<<ref "2">> The word “appropriate” is used three times.<<ref "3">> The words “opportune,” “inopportune,” “opportunely,” and “opportunity” can be found six times.<<ref "4">> The language of the measure of the mean includes so many others words as well, including: need, purpose, extreme, excess, deficiency, etc. The Statesman is littered (or woven) with the language of measurement. 

I can’t hope to provide thorough exegesis for all the passages which explicitly employ the language of measurement. Instead, I’m going to focus closely on the passage directly concerning the art of measurement (283-287). Here we will find the majority of the direct use of “measure” found in the Statesman, and it seems like a fine starting place for explicating measurement in the dialogue. 

My objectives in examining measurement are to provide analysis of fundamental concepts, demonstrate the relationship between measurement and various other topics in this dialogue, consider oddities in the text regarding measurement, and point out how measurement is a key to unlocking the Statesman. 

''2 – Overview of Measurement''

The primary measurement passage, 283-287, follows the long section on weaving. We are left to wonder why weaving wasn’t defined more quickly and simply, as it primarily is just the intertwining of warp and woof. The measurement passage is timely, finally bringing an end to the weaving passage.<<ref "5">> On the face of it, the discussion of measurement is introduced to provide a principle one uses to cure what may be a dialectical “illness.”<<ref "6">>  Beyond addressing the length of the weaving passage, perhaps the discussion of measurement is introduced in order to elucidate or help us interpret the complexities of weaving, but since measurement applies to so much of the dialogue, it is doubtful that the discussion of measurement has such a narrow purpose.  

Measurement is divided into two kinds. This is one of the few divisions that make sense in the dialogue. The Stranger begins the major passage on measurement by claiming we must look “at the entirety of excess and defect.”<<ref "7">> We need a standard which enables us to judge whether something is lacking in some way, either through an excess or deficiency in some quality or characteristic. He says, “About length and brevity and every excess and defect, for surely the art of measurement deals with all these things,” and that we should “divide it into two parts.”<<ref "8">> The Stranger explains the division of measurement in this way: “one is to be characterized in terms of the mutually relative sharing in bigness and smallness, and one in terms of the necessary (indispensable) being of becoming.”<<ref "9">>

This first kind of measurement is mathematical measurement. This kind of measurement is the set of “all the arts that measure number, lengths, depths, widths, and speeds relative to their contraries.”<<ref "10">> Mathematical measurement is quantitative, computable, and the very straightforward and scientific evaluation of things. The Stranger refers to the mathematical measure as the “mutually relative measure.”<<ref "11">> On the Stranger’s view, mathematical measurements are relative to each other.<<ref "12">> We might also think of the mathematical measure as relationship between things and things. To say this object is longer than that one is just to compare objects and point out a spatial difference. To say that this object is cold may just be a relationship of that object’s temperature compared to other objects’ temperatures. Mathematical measurement seems to relate things to things.  

Many kinds of practices and knowledge belong to this art of mathematical measure: knowledge of common units, perhaps an understanding of rudimentary physics, tools to gauge the quantifiable properties of things, and definitely calculation. At first glance, it seems as though procedures involved in mathematical measuring relate an object to some abstract mathematical standard (e.g. the exact length of a meter), and so we might be tempted to claim that the mathematical measure doesn’t relate things to things, but rather things to that abstract mathematical standard. This isn’t so clear though. What is the convention for determining the exact length of a meter? It can’t be done a priori. In fact, the meter “was to be constructed so that it would equal one ten-millionth of the distance from the North Pole to the equator along the meridian running near Dunkirk in France and Barcelona in Spain.”<<ref "13">> A meter as a measurement is a distance between two things we experience, and hence, claiming an object is a meter long is demonstrating a spatial relationship between that object and the distance between North Pole to the Equator in a specific setting. All units of mathematical measurement seem to be like this. Hence, we might argue mathematical measurement ultimately relates things to things.

The other kind of measurement, the more important one, is the non-mathematical measure, what we will call the “measure of the mean.” This is the art of due measure. In contrast to mathematical measurement, things are relative to the measure of the mean. To say a table is merely tall, in the mathematical sense, is just to say that compared to some other things, it is on average taller. The mathematical measure, however, can never say the table is “too tall” or “too short,” but this is exactly what the measure of the mean enables us to do. This is part of what the Stranger is talking about when he characterizes the measure of the mean “in terms of the necessary (indispensable) being of becoming.”<<ref "14">> Objects or activities must meet certain conditions in order to achieve or bring about certain ends.

The measure of the mean is a teleological concept, whereby things are measured as being good for a purpose, and where lacking derives from an excess or deficiency of certain characteristics necessary for fulfilling that purpose. The measure of the mean is a standard deeply intertwined with the good.<<ref "15">> This standard may not only be entangled with the good, but also the beautiful. The Stranger asks, “And it's in exactly this way, by preserving the mean, that they produce everything good and beautiful?”<<ref "16">> There is kind of an aesthetic as well as utilitarian angle to the measure of the mean. The aesthetic angle may be less clear. Consider what it means to say that there is “too much” of a color in a painting. The “for the sake of which” in that phrase is aesthetic.<<ref "17">> 

The Stranger later extends or elaborates on the measure of the mean as “all the arts that measure relative to the mean, the fitting, the opportune, and the needful, and every-thing settled toward the middle and away from the extremes.”<<ref "18">> These are different ways in which the measure of the mean is revealed or applied. “The mean” itself sits on a spectrum between deficiency and excess for the sake of some end. If something measures precisely to the mean on that spectrum, it has the characteristics which best fulfill the purpose of that thing. It doesn’t have too little or too much of a quality. The mean is a surprisingly quantitative picture of the good of a thing. “The fitting” and “the needful” aim at how things belong together in a certain way, pointing to those conditions necessary for the perfect production or acquisition of an end. “The opportune” refers to the temporal conditions of reaching an end. This might be as mundane as a baseball player who swings too early at a pitch, but it may be more subtle, such as having the social awareness to know when it is acceptable to interrupt a conversation and when it isn’t. There are various manners in which one might measure a thing to the mean. 

The Statesman points out how we are able to know a thing based on numbers (mathematical measurement), and another way of knowing a thing in terms of the good (measure of the mean). Consider the humble chair as a concrete example. We can mathematically measure various aspects of the chair. We can measure dimensions, electrical resistance, temperature, weight, density, etc. The mathematical measure quantifies, but it does not qualify. In contrast, the measure of the mean qualifies. The measurement of the mean tells us that a chair is too short or too tall for a purpose, or too heavy or light for being the kind of a chair we need for a given situation, or dismisses the significance of the mathematical measurement of electrical resistance of chairs in almost all circumstances (I suppose we could come up with a few exceptional examples, but the criteria for exceptions is still the measure of the mean). The measurement of the mean assesses whether or not something lives up to a normative standard. The mathematical measure cannot do this; in fact, just on its own, the mathematical measure seems to lack significance altogether. 

The measurement of the mean is what gives mathematical measure significance. The mathematical measure is subservient to, subordinate to, and parasitic upon the measure of the mean. The distinction between the two kinds of measurement is important, but we cannot fully pull apart mathematical measurement from the measure of the mean. To peel them apart completely would destroy the technical arts according to the Stranger.<<ref "19">> The arts require both kinds of measurement. If the technical arts were to be destroyed, as the Stranger claims, then statesmanship and weaving would also be destroyed. Clearly, even when employing mathematical measurement, the measure of the mean is vital to the existence and nature of statesmanship and weaving.

Continuing with the chair example, perhaps I can figure out my chair is too tall for my purposes (measure of the mean), but I might not know exactly how much shorter it needs to be (mathematical measure). When I say to the chair-building/modifying carpenter that my chair is too tall, he being an expert of sorts on the nature of heights of chairs may be able to assess my chair and then tell me that my chair is precisely two inches too tall. He could only make such a claim by already understanding exactly why I needed the chair to be two inches shorter – maybe, in this case, the carpenter has the necessary experience to realize that taking two inches off the chair is the exact height I would need, given my own height, to sit comfortably. In this example, I was always able to immediately understand the mathematical measurement of two inches, but I could only partially uncover the measure of the mean for the chair. I knew it wasn’t quite right for my purposes (being comfortable), but not more than that. The carpenter, however, having far more experience in this matter, knew the measure of the mean between my chair and purpose with far more precision.

This example hopefully highlights one of the more fascinating aspects of the measure of the mean: it can be difficult to uncover its precision. Mastering the measure of the mean requires a kind of virtue of the practice. Perhaps only through repetition and training can one develop the crucial perceptive awareness necessary to uncover its precision. The measure of the mean is highly contextual, bordering on particularism. This kind of measurement can lack definitiveness in general; the correct measurement varies with the circumstances. Perhaps the mean isn’t always an exact point, perhaps it is a range.  Further, the measure of the mean is used to evaluate not only those things which are computable, but also those which might not be computable. Courage, for example, might not be mathematically quantifiable (perhaps psychoThe Being of the Beautiful: Plato's Theaetetus, Sophist, and Statesmanlogists may eventually be able to explain otherwise), but it certainly falls within the qualitative domain of the measure of the mean. The measure of the mean defines excess and deficiency even beyond what may be the limits of mathematics. 

Mathematics is precise, but ultimately, I believe Plato’s aim is to show that there is a notion of the precise that goes beyond the mathematical, and has something to do with the good (and the beautiful possibly), and the measure of the mean is the criterion and application for that. 

Weaving and statesmanship seem closely bound to the measure of the mean, exactly how, I’m not sure. Weaving seems to be the easier example to employ for appreciating the division in the arts of measurement, since weaving on one hand does seem to rely heavily upon the mathematical, and yet it requires the measure of the mean for significance and for guiding us toward achieving the ends of weaving. It is quite unclear to me how statesmanship relates to the mathematical measure as concretely or as easily as weaving, although given the abstract nature of statesmanship, the measure of the mean appears far more central to statesmanship than it does weaving. 

I do not think it is a coincidence that the Statesman is so cryptic in the way in which it employs measurement. Surely successfully interpreting the Statesman as a dialogue and trying to uncover the eidos of the statesman require skilled applications of the measure of the mean.

''3 – Tensions and Irony''

The tension between these two kinds of measurement is apparent throughout the dialogue. The lengths of certain sections of the Statesman seem to be too long or too short. Some arguments move too quickly and others too slowly. Blatant (perhaps even humorous) measurement-based mistakes are made and corrected repeatedly. It is too ironic to be accidental. 

The discussion of myth and weaving seem too long (even by the Stranger’s standards), while the discussion of more interesting and crucial topics in metaphysics, such as parts, kinds, wholes, and paradigms are far too brief (despite the amusing claim that they are “stray[ing] further afield” in 263a). The Stranger is oddly aware of (yet sometimes failing to be correct in) these measurements in the discussion, and it is unclear what we are to make of this. His focus on excessive length over deficiencies found in other parts of the discussion is interesting. It reminds me of a way of talking about vice and virtue, and I wonder if we are to view the Stranger as lacking or having excellence because of his possibly skewed perceptions in this regard. The Stranger and measurements of his discussion are odd, and I do not know why Plato has written the Stranger like this.

Perhaps it is meaningful (perhaps it is coincidental) that the primary passage on measurement is literally near the middle of the dialogue. Our attention is drawn to measurement in even following the outline of the Statesman. Why is Plato doing this? I have no idea. I suspect that a satisfying systematic interpretation of the Statesman must make sense of these concerns, and the measure of the mean is likely central to such an account. 

This tension can even be seen from the beginning with the discussion between Socrates and Theodoras. Theodoras is a mathematician, and the status of mathematics is called into question in this dialogue. For instance, Theodoras’ error(s) points toward the limits of mathematics, alluding both to the notion that some things cannot be mathematized and perhaps to a sort of impotence of mathematics in the dialectic. Further, while the mathematician and the mathematical measure can be seen as privileged in science and paradigm cases of knowledge in epistemology, the statesman (and perhaps the virtuous agent) and the measure of the mean seem to be privileged in the discussion of the philosopher and paradigm cases of practical reason. At any rate, it does seem as though Plato wishes to take mathematics down a peg or two in this dialogue.  Here the mathematical measurement seems less and less directly relevant to the dialectic, and the measure of the mean shines. Mathematics looks to be incapable of helping us investigate the nature of the philosopher and its apparitions, the sophist and the statesman. The measure of the mean, in contrast, looks to be a large and necessary component of the investigation in the Statesman.

''4 - Diaeresis''

The method of diaeresis employed by the Stranger is intriguing, and it is certainly related to the issue of measurement. Diaeresis is the continual division of larger groups into relatively equal and smaller groups – a process which is meant to be repeated until the definition being sought after has been found. I must confess, I don’t understand why it is used or what is meant by it. Without a doubt, the method and various divisions made in the Statesman are generally odd.

In the Statesman, the Stranger employs diaeresis to find and define the statesman. In the context of biology or other scientific taxonomies, diaeresis looks to be a reasonable sort of tool for the job. However, it is not so clear why Plato has the Stranger use the method to investigate and define the statesman, a context where diaeresis seems far less effective. The Stranger explains how the method relates to the finding and understanding the statesman:

Then where will one discover the direct statesman-path? For we must discover it and, after separating it off from the rest, stamp it with one look, and then, after marking the other, side-paths as a single form, make our soul think of all the sciences as being two forms.<<ref "20">>

That sounds like a plan. It isn’t clear, however, by what standard these divisions should be made. This look, idea, or form of the statesman does seem to be what we are seeking. Separating it from everything else does seem to be necessary. It remains unclear, however, why diaeresis, a tool whose criterion pivots around a mathematical equality between the subdivisions, is the best tool for accomplishing these tasks. 

Diaeresis seems to be caught between the two kinds of measurement. The method’s failure is especially evident in the scolding of Young Socrates, who manfully divides man and beast. <<ref "21">> Does not Young Socrates’ division seem like the sort of “stamping” we seek in 258c? Surely the Stranger must be wrong, and this must be the correct division; it is perhaps the division made by one who could employ diaeresis with the measure of the mean in mind. The Stranger explains that it is “safer to go cutting through the middle,” something akin to the mathematical middle.<<ref "22">> But, from our vantage point, the Stranger’s mathematically-based method of diaeresis, much like a binary search tree, turns out be an inefficient method of inquiry at best, and at worst, it seems to steer us in the wrong direction, failing to uncover what is salient. It is not clear why the Stranger makes these apparent errors. 

Again we are reminded of the two kinds of measure at the end of the scolding, where the Stranger amusingly claimed that by going too fast, they were slowed down.<<ref "23">> The measure of the mean here is concerned with “how much we understand,” while the mathematical measure is concerned with the time taken in the dialectic. 

''5 – Wholes, parts, and kinds''

The distinction between parts, wholes, and kinds seems to be another branch of the concept of measurement. These issues highlight the real goals of diaeresis and sit at the heart of effective division making and weaving together. These subjects are a fine example of ancient ontological and metaphysical problems which we’ve made little headway on in modern philosophy (despite quite a bit of effort). The answers to the questions raised in these matters are unclear. What does seem clear, however, is that solutions to these puzzles of part-whole and part-kind (philosophic puzzles crucial to effectively identifying, classifying, and defining) are preconditions to a complete explanation of true and effective eidetic division and analysis. These puzzles seem to be more related to the measure of the mean than they are to mathematical measure.

Plato brings up these problems, but does not seem to satisfyingly resolve them.<<ref "24">> This foundational problem is highlighted in one of the major explicit aims of the text, namely to reveal and understand how the person with political expertise should be distinguished from the other kinds of rival experts in the city.<<ref "25">> Whatever precisely it is about diaeresis (or other methods of dividing, classifying, and revealing) that we find distasteful or unsatisfying in trying to accomplish this explicit goal of the dialogue may only ultimately be uncovered by first attending to the metaphysical measurement problems of parts, wholes, and kinds. 

Further, these unsolved puzzles of parts, wholes, and kinds are surely central to one of the other central goals of the text, namely explaining why and how political science and the statesman are so important to philosophy and the philosopher.  The relationship between these agents and practices remain a mystery, partly due to lacking a full understanding of the metaphysics of relationships and identity.

Measurement seems to be embedded in the metaphysical problems of parts, wholes, and kinds; to what extent the measurement is mathematical and to what extent it is the measure of the mean is not clear. Perhaps these form a different kind of measurement altogether. 

The Statesman serves to highlight the differences between and status of mereology, set theory, and eidetic analysis.<<ref "26">> Interestingly, mathematics has made some headway in the first two, but not the last; philosophy, however, may not have gotten much further than Plato. The fundamental and true natures of these problems remain unsolved or unexplained. At the very least, Plato reveals some of the unobvious, underpinning problems and questions of our larger investigation. Philosophy tends to show even more problems lurking under the surface of original problems, and philosophy also sometimes points toward how ostensibly separate matters can turn out to be intertwined. 

''6 – The Statesman, the Virtuous Agent, and the Philosopher''

This section on measurement is fertile ground for discussions of not just politics (and its relaThe Being of the Beautiful: Plato's Theaetetus, Sophist, and Statesmantionship to philosophy), but also ethics. Who knows and uses the measure of the mean the most? Who best aims at the mean? What does it take to uncover the mean? The statesman, the ethically virtuous agent, and the philosopher are somehow bound together by a common thread in the Statesman. I think that bond has something to do with the measure of the mean. Granted, many activities employ the measure of the mean, but some use the measure of the mean more than others. Statesmanship, virtue, and philosophy seem to require the use of this measure more than anything else, and the teleological stakes are very high for all three agents.
 
The measure of the mean is found and employed through phronesis. Phronesis is practical wisdom; it is particularistic and prudential. Phronesis seems to be at the heart of picking out which particular actions are needed for particular contexts, and the measure of the mean is the standard used by one with phronesis. Phronesis and the measure of the mean can be surprisingly concrete, being a kind of instrumental reason, as they deal with fundamental ends-to-means relationships, but they are also abstract and theoretical, since practical action must be evaluated by and linked to the Good by an agent. 

The statesman and the virtuous agent seem to be more closely linked than the statesman and philosopher (or virtuous agent and philosopher) at first glance. Indeed, the connection between the statesman and the virtuous agent seems quite apparent in this dialogue, and that makes a lot of sense. Everyone knows that criticizing the moral compasses of politicians is a long-standing (and valuable) tradition. It isn’t a tradition for no reason. Moral compasses are obviously an important part of being a good statesman. 

The measure of the mean foreshadows Aristotle’s doctrine of the mean. While we have been talking about the mean as being related to the good, it seems as though one might also employ the very same method to the right. The statesman is concerned with the right means to the good ends of the city, quite similar to the virtuous agent. Aristotle’s famous phrase “to the right person, to the right extent, at the right time, with the right motive, and in the right way” sits right at home in Plato’s explanation of the measure of the mean.<<ref "27">>
The Being of the Beautiful: Plato's Theaetetus, Sophist, and Statesman
The dialogue points to the relationship between the statesman and the virtuous agent when the Stranger attacks the standard rule of law, and in its place, he emphasizes the “correctness of rulers without laws” where “the best thing is not for the laws but for a man-the king with intelligence-to have strength.”<<ref "28">> This kind of intelligence is phronesis. On this view, laws are too general, and they fail to appreciate what is morally or legally salient about particular contexts. Laws may turn out to be practical guidelines we end up needing, but they are crude approximations, and they can never compete with an excellent statesman employing phronesis in a particular situation. Laws lack precision, while the excellent statesman knows the precise action to take in a circumstance (for the sake of the city, not the individual, as the Stranger points out in 295a) because he has the necessary phronesis to uncover and use the measure of the mean in that context. But this discussion of the law is precisely like one of the key aspects ethical virtue theory. 

The denial of practical codifiability and computable decision procedures is one of the crucial differences between virtue theory and its competitors. The criticism of political law in the Statesman is the same kind of criticism of ethical law in standard virtue theories. The one who knows what the city ought to do is remarkably parallel to that one who knows what one ought to do.

The phronesis shared between the excellent statesman and the virtuous agent seems to be reliant upon a kind of moral judgment, intuition, and the right sort of perception. Having the right reason and the right emotions are necessary for reaching the right action for the virtuous agent, but it isn’t clear if emotions play as significant a role in statesmanship. It might. Another difference between the virtuous agent and the excellent statesman would be the will. It is already a significant matter of debate how we define and understand the will for individuals, such as for the virtuous agent; it is a much more complex and difficult matter to isolate the meaning and nature of a will for a city and the role of the statesman in shaping that will. The status and nature of the unification of virtues also seems different among the statesman and the virtuous agent. The Stranger argues in 305E-308B that the virtues conflict, which sits in contrast to the harmony we normally see in virtue theory. Despite these differences, I wonder if the truly excellent statesman is not also a virtuous agent with additional technical knowledge regarding politics and the practices of weaving the city together. Perhaps the excellent statesman helps the city achieve eudaimonia in some sense. 

Plato seems to give us reasons to think the virtuous agent and excellent statesman are bound together by phronesis and the measure of the mean. It is far less clear how the philosopher is bound to the other two. It is not clear how and when the philosopher employs phronesis. We might be tempted to believe phronesis is too practical to be necessary to the philosopher in the same way that it is necessary to the virtuous agent or the statesman. The philosopher seems to have her head stuck in the clouds in many ways. Her work is theoretically minded and often not obviously practical (although it clearly has significant ramifications to the practical). Phronesis seems different from sophia. The philosopher seems to have wisdom of the theoretical rather than the practical, and if that is correct, it seems as though sophia is more important than phronesis. 

The supposed point of the Statesman was to define and understand the statesman as an apparition of the philosopher. What connects the statesman and the philosopher? The measure of the mean is likely a key component to the complete answer. The statesman appears to require the mathematical measure for his purposes moreso than the philosopher for hers, a significant difference, and yet both the statesman and philosopher rely heavily upon the measure of the mean to achieve their invaluable ends. The statesman employs the measure of the mean for the sake of the city (and perhaps the city is for sake of having philosophers), and the philosopher for the sake of sophia. As we saw in the Statesman, both engagement in the dialectic and division as a method of eidetic analysis rely upon the measure of the mean, and these are essential tools and practices of philosophers. Maybe phronesis guides the philosopher in obtaining sophia in this manner, and the measure of the mean is more crucial to the roles of the statesman and philosopher than to other activities. I tentatively conclude the Statesman binds the philosopher and statesman together through their deep need and significant use of the measure of the mean.

---------------------------

<<footnotes "1" "269c, 269d, 283d, 283e, 284d, 284e, 285a, 285c, 286d, 293e  Unless otherwise noted, all quotations are from Bernardete’s translation: Plato. //The Being of the Beautiful: Plato's Theaetetus, Sophist, and Statesman//. Translated by Seth Benardete. Chicago: University of Chicago Press, 1984. ">>
<<footnotes "2" "260a, 263a, 269c, 269d, 277b, 277c, 282a, 284e, 286a, 286d, 288c, 289b, 308e, 309c">>
<<footnotes "3" "260a, 269c, 274b">>
<<footnotes "4" "284e, 305d, 307b, 307c">>
<<footnotes "5" "The length of the weaving passage might end up being justified rather than undue. It just appears on the surface that the weaving passage is too long.">>
<<footnotes "6" "283b">>
<<footnotes "7" "283c">>
<<footnotes "8" "283d">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "284e">>
<<footnotes "11" "283e">>
<<footnotes "12" "The relationship between the Great and the Small is its own topic, and it may be a significant connection between Plato and Aristotle.">>
<<footnotes "13" "U.S. Metric Association (USMA), Inc. "Origin of the Metric System." Origin of the Metric System. January 10, 2006. Accessed December 20, 2013. http://lamar.colostate.edu/~hillger/origin.html.">>
<<footnotes "14" "A complete account of the “being of becoming” is beyond the scope of the paper. Without a doubt, it is its own topic.">>
<<footnotes "15" "Admittedly, it isn’t clear to me precisely how they relate. I don’t exactly know what “the Good” is in the first place. I don’t mean to be irresponsibly speculating here, but it seems necessary to at least point in this direction when trying to frame the concept of measurement of the mean.">>
<<footnotes "16" "284b">>
<<footnotes "17" "I am grossly oversimplifying “the Beautiful” here in order to have a plain example. ">>
<<footnotes "18" "284e">>
<<footnotes "19" "284a">>
<<footnotes "20" "258c in Plato, Eva T. H. Brann, Peter Kalkavage, and Eric Salem. //Plato Statesman: Translation, Introduction, Glossary, and Essay//. Newburyport, MA: Focus Pub, 2012: 17. ">>
<<footnotes "21" "262a">>
<<footnotes "22" "262b">>
<<footnotes "23" "264b">>
<<footnotes "24" "Which is fine – I don’t know if we should expect him to, as I said, it doesn’t seem we’ve made much more progress than he has after thousands of years of work on this topic.">>
<<footnotes "25" "Even the city itself is a fine example of how difficult it is to distinguish mere heaps from whole things, etc. How the statesman relates to the city is itself a key topic. ">>
<<footnotes "26" "I’ve seen Aristotle credited for introducing and providing the first systematic perspectives of these issues to philosophy, science and mathematics, but it is clear from the Statesman (among other works) that Plato knew quite well the significance of these issues.">>
<<footnotes "27" "Book II, 1109a27">>
<<footnotes "28" "294a">>

---------------------------
 
''Bibliography''

Benardete, Seth. "The Plan of Plato's Statesman." //In The Argument of the Action: Essays on Greek Poetry and Philosophy//, edited by Ronna Burger and Michael Davis, 354-75. Chicago: University of Chicago Press, 2000. 

 	
Bernardete, Seth. "Eidos and Diaeresis in Plato's Statesman." //Philologus// 107, no. 3/4 (1963): 193-226. 

 
Klein, Jacob. "The Search for the Statesman." //In Plato's Trilogy: Theaetetus, the Sophist, and the Statesman//, 146-200. Chicago: University of Chicago Press, 1977. 

 
Lane, M. S. //Method and Politics in Plato's Statesman//. Cambridge, United Kingdom: Cambridge University Press, 1998. 
 

Miller, Mitchell H. //The Philosopher in Plato's Statesman.: Together with Dialectical Education and Unwritten Teachings in Plato's Statesman//. Las Vegas: Parmenides Pub., 2004. DJVU. 
 

Márquez, Xavier. "Measure and the Arts in Plato's Statesman." Accessed December 20, 2012. http://www.academia.edu/218023/Measure_and_the_Arts_in_Platos_Statesman. 
 

Plato. //Statesman//. Translated by Benjamin Jowett. Hazleton, PA: Electronic Classics Series, 1999. Accessed December 20, 2012. http://www2.hn.psu.edu/faculty/jmanis/plato/statesma.pdf.
 

Plato. //The Being of the Beautiful: Plato's Theaetetus, Sophist, and Statesman//. Translated by Seth Benardete. Chicago: University of Chicago Press, 1984. PDF. 
 

Plato, Eva T H Brann, Peter Kalkavage, and Eric Salem. //Plato Statesman: Translation, Introduction, Glossary, and Essay//. Newburyport, MA: Focus Pub., 2012. 
 

Sayre, Kenneth M. //Metaphysics and Method in Plato’s Statesman//. New York: Cambridge University Press, 2006. PDF. 


Stern, Paul. "The Rule of Wisdom and the Rule of Law in Plato's Statesman." American Political Science Review 91, no. 2 (June 1997): 264. 


U.S. Metric Association (USMA), Inc. "Origin of the Metric System." //Origin of the Metric System//. January 10, 2006. Accessed December 20, 2013. http://lamar.colostate.edu/~hillger/origin.html.

 
White, David A., and Plato. //Myth, Metaphysics and Dialectic in Plato's Statesman//. Aldershot, England: Ashgate, 2007. PDF. 


//This paper changed my life. It was the beginning of the end of my academic philosophical career. It was the straw that broke this camel's back. I'm lucky to be alive.//

''1.1''

One of the first renditions of the Lottery Paradox can be traced back to Henry Kyburg in his book Probability and the Logic of Rational Belief.<<ref "1">> It has sparked an enormous amount of literature surrounding the problem. In this paper, I will address a standard, modern version of the Lottery Paradox, describe some problems with it, and try to clarify the puzzle with a more detailed version. By uncovering what I think is really going on in the Lottery Paradox, I hope to sketch out a more fundamental disagreement occurring between many of those who would continue to wield the Lottery Paradox, even after my clarification, and their target, proponents of probabilistic rational acceptance.

''1.2''

Proponents of probabilistic rational acceptance think it is rationally acceptable to believe propositions which are very likely true. On their view, there is an epistemic principle which sets out the minimum requirements for a proposition to be rationally acceptable (which I will often refer to as the Sufficiency Thesis). As long as the probability of a proposition is high enough to meet this requirement, then it is said to be rationally acceptable. 

A probabilistic principle of rational acceptance is useful and practical. It would justify an enormous number of common-sense propositions we ordinarily think are rationally acceptable. Our everyday lives revolve around believing and acting upon beliefs which are often, at best, only very likely to be true. 

If the Lottery Paradox is successful, then it demonstrates that probabilistic principles of rational acceptance can result in validating belief in contradictions as rationally acceptable. That would be intolerable. The Lottery Paradox would force us to give up probabilistic rational acceptance, which may amount to the denial of this enormous number of common-sense, ordinary propositions we would normally think of as being rationally acceptable. A kind of skepticism concerning these ordinary propositions may emerge from this position.

I will show why the Lottery Paradox does not yield this fatal criticism, and I will argue that it does, however, yield another criticism. The paradox demonstrates that probabilistic rational acceptance can result in beliefs which are not altogether consistent. Rational acceptance can lead to false beliefs, even beliefs which must be false given some other set of beliefs validated by the principle. This criticism, however, is not obviously fatal to the probabilistic rational acceptance. 

Toward the end of the paper, in coming to grips with this lesser criticism, I will attempt to sketch out why this lesser criticism leads us to a broader and perhaps messier disagreement occurring between many of those who would continue to wield the Lottery Paradox, even in light of my clarification, and those who wish to preserve probabilistic rational acceptance. 

The Lottery Paradox may be construed as a discussion between a pragmatist and a skeptic, wherein the skeptic tries to attack the rationality of our ordinary beliefs which require the Sufficiency Thesis, and the pragmatist defends. Each employs a different standard, and both standards have merit. My sketch of this discussion will side with the pragmatist, suggesting his standard as being the appropriate standard to employ. 

The actual result of the Lottery Paradox, the claim that it can be, in some cases, rationally acceptable to believe in a set of propositions which are inconsistent, is difficult to swallow. Essentially, many of us may intuit that this result of the second, lesser criticism isn’t a good thing. I will argue, however, that it can be the right thing.

''2.1''

The Lottery Paradox tries to demonstrate that the following three epistemic principles (or their equivalents) are inconsistent:

# A proposition φ is rationally acceptable if P(φ) > t, where P is a probability distribution over propositions and t is a threshold value close to 1.<<ref "2">> 
# It is not rationally acceptable to believe in contradictions. 
# If each of the propositions φ and ψ are rationally acceptable, so is (φ & ψ).<<ref "3">>

The first principle is known as the Sufficiency Thesis; it is a probabilistic principle of rational acceptance. The third principle is known as the Conjunction Principle.4 Note that by mathematical induction, we can generalize the Conjunction Principle to any finite number of conjuncts.5 The inconsistency of these principles is demonstrated by the following thought experiment.

''2.2''

Suppose the three epistemic principles above, where t = .99. Suppose a fair lottery of 100 tickets, where the selection of each ticket is equiprobable, and exactly 1 ticket will be randomly selected as a winner. 
Where n is the set of whole numbers 1 through 100, for each ticket, where the first ticket is T­1­, the second ticket is T­2, ­… , and the hundredth ticket is T­100­, there is a corresponding proposition claiming ‘ticket Tn is a losing ticket’, where the first proposition K­1­ corresponds to T1­, and so on. 

By supposition, P(~(K­1 ­& K­2 ­& … & K­100­)) = 1, hence by the Sufficiency Thesis, ~(K­1 ­& K­2 ­& … & K­100­) is rationally acceptable. In other words, the proposition “there is a winning ticket” is rationally acceptable. 

Since each ticket is 1 ticket from a pool of 100, for any K­n­, P(K­n­) = .99. Hence, by the Sufficiency Thesis, any particular K­n­ is rationally acceptable. Since K­1 ­is rationally acceptable and K­2 ­is rationally acceptable, by the Conjunction Principle, the proposition (K­1­ & K­2­)­ is rationally acceptable. Since we know each Kn­ is rationally acceptable, we can continue to employ the Conjunction Principle such that (K­1­ & K­2­ ­& K­3­) is rationally acceptable, and (K­1­ & K­2­ ­& K­3­ ­­& K­4­) is rationally acceptable, and so on. Hence, by the repeated use of the Conjunction Principle, (K­1 ­& K­2 ­& … & K­100­) is rationally acceptable. 

We arrive at the contradiction between (supposedly) rationally acceptable propositions ~(K­1 ­& K­2 ­& … & K­100­)­ ­and (K­1 ­& K­2 ­& … & K­100­). In other words, we assumed there was a winning ticket, ~(K­1 ­& K­2 ­& … & K­100­)­­, and using our principles of rational acceptance, we deduced that there is no winning ticket, (K­1 ­& K­2 ­& … & K­100­). This violates the second principle.

''2.3''

I could stop here, but before I move on, I want to point out that many versions of the Lottery Paradox render the contradiction in terms of probability, presumably because it may be easier to see the problem in a more concrete way and because the point of the Lottery Paradox is to attack probabilistic reasoning. The steps to do this are fairly straightforward.

Since we have supposed ~(K­1 ­& K­2 ­& … & K­100­), and ~(K­1 ­& K­2 ­& … & K­100­) ↔ (P(~(K­1 ­& K­2 ­& … & K­100­)) = 1), then (P(~(K­1 ­& K­2 ­& … & K­100­)) = 1), the proposition that the probability of there being a winning ticket is 1, is rationally acceptable.

Since we rationally accept (K­1 ­& K­2 ­& … & K­100­), and (K­1 ­& K­2 ­& … & K­100­) ↔ (P((K­1 ­& K­2 ­& … & K­100­)) = 1), and (P((K­1 ­& K­2 ­& … & K­100­)) = 1) ↔ (P(~(K­1 ­& K­2 ­& … & K­100­)) = 0), then (P(~(K­1 ­& K­2 ­& … & K­100­)) = 0), the proposition that the probability of there being a winning ticket is 0, is rationally acceptable.

While not a formal, direct contradiction, (P(~(K­1 ­& K­2 ­& … & K­100­)) = 1) and (P(~(K­1 ­& K­2 ­& … & K­100­)) = 0) propose that the probability of there being a winning ticket is both 1 (guaranteed to occur) and 0 (guaranteed not to occur). 

''2.4''

Clearly, the Lottery Paradox demonstrates that the three epistemic principles are in conflict. Importantly, the Lottery Paradox is intriguing because one can nicely scale up the number of tickets in the lottery to any finite number, such that n >= t, allowing us to always produce a lottery thought experiment in which the probability that any “ticket n is a losing ticket” is rationally acceptable (according to the Sufficiency Thesis). Even extraordinarily high thresholds for rational acceptance, such as (1 – (1 / (the number of atomic particles in the universe))), have lotteries which demonstrate this contradiction.

In order to escape this conflict, we must jettison at least one epistemic principle. At first glance, we might find the second and third principles to be no-brainers; we are not immediately inclined to deny them (although, later on I hope to show how we can deny the third principle). Thus, initially, the first principle, the Sufficiency Thesis, appears to be the principle we are forced to jettison, but at great cost. 

Assuming that any relevant probabilistic acceptance principle will be similar enough to the Sufficiency Thesis, the Lottery Paradox might require us to jettison all relevant probabilistic acceptance principles. The Lottery Paradox may be a serious threat to any probabilistic justification theory of rationally acceptable belief. I can’t provide a treatment of that claim in this paper, but for the sake of argument, let us assume the Lottery Paradox defeats all probabilistic justifications of rationally acceptable belief, which a skeptic might assume.

We have good reasons to want a viable probabilistic rational acceptance rule. Many beliefs we take as being rationally acceptable might turn out to be otherwise without a principle like the Sufficiency Thesis. For example, science, a realm which many of us would like to think leads us to propositions which are rationally acceptable, is filled with conclusions which are highly likely to be true, but not certain. The Sufficiency Thesis is well positioned to make sense of these issues. Further, many of our ordinary beliefs that we take to be rationally acceptable are nicely justified by the Sufficiency Thesis, and the rational acceptability of these beliefs may be jeopardized if we jettison the Sufficiency Thesis. How do we preserve the first epistemic principle?

Either the second or the third epistemic principle must be wrong. The second looks rock solid (surely an epistemic rule which embodies the principle of non-contradiction would have to be!). Those who wish to preserve the probabilistic acceptance principles most likely need to find a way to deny the Conjunction Principle. 

At first glance, the Conjunction Principle might appear to be akin to a normal conjunction introduction rule (later in the paper, I will suggest it is not that simple). When you rationally accept φ and ψ, inferring the conjunction of the pair seems, at first glance, rationally acceptable. I will attempt to clarify the Conjunction Principle by separating it into two aspects which, when combined, get us the same results. We will find that one aspect doesn’t need to be denied, but another aspect can and should be jettisoned to save the Sufficiency Thesis. 

''3.1''

I believe we can gain insight into why we should deny the Conjunction Principle by inspecting the inferential moves we’ve made in the Lottery Paradox. In terms of propositional logic, the following inferential moves have to be successful:

# K­1­ 				--		Assumption
# K­2­						-- Assumption
# (K­1­ & K­2­)			--		­& Intro: 1, 2

Upon first reading, it seems as if we cannot possibly deny this sort of inferential move. Our assumptions were rationally acceptable, and surely any deduction from rational assumptions must also be rationally acceptable. If K­1 and K­2 are true, then (K­1­ & K­2­) has to be true as well. 

Is this really what the probabilistic rationality theorist has in mind? Perhaps not. Instead, regarding the above Lottery Paradox, we are better served by evaluating the actual probabilities of the Lottery Paradox if we want to understand what probabilistic inferences are rationally acceptable. 

Problem: 

Let n denote the size (in terms of tickets) of a fair lottery with one winner. What are the odds that if you get m tickets that you will win?

Solution:

	This is the formula which describes all finite lotteries, which someone who is explicitly employing the Sufficiency Thesis must turn to in order to evaluate the rational acceptability of the propositions in the Lottery Paradox. That’s how we know P(K­1­)­ = .99. It is also the tool which helps us evaluate all the other probabilities, including conjunctions. So, instead of propositional logic, I think probabilistic rationality looks more like this:

#  P(K­1­)­ = .99 			--		Mathematical Deduction
# K­1­­ is rationally acceptable		--	From 1 and Sufficiency Thesis
# P(K­2­)­ = .99					-- Mathematical Deduction
# K­2 is rationally acceptable		--		From 3 and Sufficiency Thesis
# P(K­1­ & K­2­) = .98					--­ Mathematical Deduction
# (K­1­ & K­2­) is not rationally acceptable		-- From 5 and Sufficiency Thesis

The problem with our Conjunction Principle is that it seems to mislead us into thinking that logical inference is wholly analogous to the process of probabilistic inference. They are distinct. It is one thing to say “K­1 and K­2 are true, thus (K­1­ & K­2­) is true,” which is a logical consequence, and another to say “K­1 and K­2 are each so likely to be true that each is rationally acceptable, thus (K­1­ & K­2­) is so likely to be true that it is rationally acceptable.” The first kind, logical inference, has to be correct. The second kind, probabilistic inference, doesn’t have to be correct. In fact, the Sufficiency Thesis, where P(K­1­ & K­2­) = .98, explicitly prohibits such a move.

Someone doing their best to employ the Sufficiency Thesis should be unwilling to accept this part of the Lottery Paradox proof: 

Since K­1 ­is rationally acceptable and K­2 ­is rationally acceptable, by the Conjunction Principle, the proposition (K­1­ & K­2­)­ is rationally acceptable.

The Conjunction principle isn’t following the very mathematical formula required to realize P(K­1­)­ = .99 in the first place. Something is wrong with the Conjunction principle, and we must correct it. 

''4.1''

I think the first set of epistemic principles was constructed too hastily. These principles lack the nuance we need to really understand what is at stake and how these principles should play out. Part of the problem might be that we’ve not been clear enough in specifying what kinds of things can be the objects of rational acceptability. On the following version of the Lottery Paradox, rational acceptability applies to both propositions and sets of propositions. Essentially, an individual proposition may be rationally acceptable, and sets of propositions may be rationally acceptable. With this in mind, let us restructure the beginning principles so that we can make better sense of the Lottery Paradox.  

# φ is rationally acceptable if P(φ) > t, where P is a probability distribution over propositions and t is a threshold value close to 1. 
# Contradictions and sets containing contradictions are not rationally acceptable.        e.g. neither (φ & ~φ) nor {X1, X2, …, (φ & ~φ), Xn} are rationally acceptable.
# If φ and ψ are rationally acceptable, then {φ, ψ} is rationally acceptable.
# If {φ, ψ} is rationally acceptable, then (φ & ψ) is rationally acceptable.

The Sufficiency Thesis remains much the same. Importantly, it only applies to, evaluates, and filters through individual propositions, not sets of propositions.<<ref "6">> The Sufficiency Thesis validates and essentially generates the propositions used for the antecedent of the third principle, the Union Principle. The Union Principle generates sets of propositions (e.g. {φ, ψ}), which serve to feed the antecedent of the fourth principle, the Agglomeration Principle. The Agglomeration Principle joins the members of a set of propositions into a conjunction.

The Sufficiency Thesis will not validate φ as rationally acceptable and then turn around and validate ~φ as rationally acceptable. It can only validate one or the other. It will invalidate (φ & ~φ) as well. As you will see, when we add the Union and Agglomeration Principles, from the Lottery Paradox, we will be able arrive at (φ & ~φ) as being rationally acceptable, which is prohibited by both the second principle and the Sufficiency Thesis.7 Note that the second principle does not prohibit inconsistent sets of propositions, such as {φ, ~φ}, rather it prohibits sets which contain explicit, direct contradictions, {(φ & ~φ)}. 

We’ve done away with the Conjunction Principle, and in its place, we have two new principles, the Union and Agglomeration Principles, which taken together do the same kind of work as the Conjunction Principle. 

The Union Principle enables us to accumulate or unify individual propositions into a set of propositions. According to this principle, if A is rationally acceptable, and B is rationally acceptable, then {A, B} is rationally acceptable. These are all distinct objects of belief or acceptance. It is one thing to believe A at some point in time, and another to believe B at some point in time, and yet another to believe A and to believe B at the same time.

The Agglomeration Principle enables us to take a set of propositions and form a new proposition, a conjunction of the members of the set. According to this principle, if {A, B} is rationally acceptable, then so is (A & B). Importantly, there is a difference between the rational acceptability of the set of A and B as separate, individual propositions, {A, B}, and the rational acceptability of (A & B) as a joined or “agglomerated” proposition, (A & B). 

The third principle is not obviously true, but it seems compelling. When rationally acceptable propositions are generated by the Sufficiency Thesis, it seems natural to just add them to a larger index of rationally acceptable propositions. By extracting it from the Conjunction Principle, we’re left with what I believe is a more controversial and less obvious fourth principle. Although the Agglomeration Principle is deniable, it has quite a bit of force to it.<<ref "8">>

In splitting up the Conjunction Principle9 into more detailed principles, we will see more clearly the kinds of steps made that weren’t so clear in our original Lottery Paradox, and hopefully we can focus upon the contingent and plausibly deniable aspects of the Conjunction Principle. With these new principles, let’s have another crack at the Lottery Paradox. 

''4.2''

Suppose the four epistemic principles above, where t = .99. Suppose a fair lottery of 100 tickets, where the selection of each ticket is equiprobable, and exactly 1 ticket will be randomly selected as a winner. 

Where n is the set of whole numbers 1 through 100, for each ticket, where the first ticket is T­1­, the second ticket is T­2, ­… , and the hundredth ticket is T­100­, there is a corresponding proposition claiming ‘ticket Tn is a losing ticket’, where the first proposition K­1­ corresponds to T1­, and so on. 

By supposition, P(~(K­1 ­& K­2 ­& … & K­100­)) = 1, hence by the Sufficiency Thesis, ~(K­1 ­& K­2 ­& … & K­100­) is rationally acceptable. 

Since each ticket is 1 ticket from a pool of 100, for any K­n­, P(K­n­) = .99. Hence, by the Sufficiency Thesis, any particular K­n­ is rationally acceptable. Since, K­1­ and K2 are rationally acceptable, by the Union Principle, {K­1­, K­2­} is rationally acceptable. Since any particular K­n is rationally acceptable, we can continue to employ the Union Principle such that {K­1­­, K­2­, K­3­} is rationally acceptable, and {K­1­­, K­2­, K­3­­, K­4­­} is rationally acceptable, and so on. Hence, by the repeated use of the Union Principle, {K­1­, K­2­, …, K­100­} is rationally acceptable.

Since {K­1­, K­2­, …, K­100­} is rationally acceptable, by the Agglomeration Principle, (K­1 ­& K­2 ­& … & K­100­) is rationally acceptable. 

By the Union Principle, since (K­1 ­& K­2 ­& … & K­100) is rationally acceptable and ~(K­1 ­& K­2 ­& … & K­100­) is rationally acceptable, then {(K­1 ­& K­2 ­& … & K­100)), ~(K­1 ­& K­2 ­& … & K­100­)} is rationally acceptable. We arrive at a set containing two propositions which are inconsistent; however, this is not yet a contradiction. Note how (so far) this is allowed by the second principle.

Finally, by the Agglomeration Principle, since {(K­1 ­& K­2 ­& … & K­100), ~(K­1 ­& K­2 ­& … & K­100­)} is rationally acceptable, then so is [(K­1 ­& K­2 ­& … & K­100)­ & ~(K­1 ­& K­2 ­& … & K­100­)]. This is a contradiction, which violates our first and second principles.

''4.3''

This version of the Lottery Paradox demonstrates that the four epistemic principles are in conflict. We must jettison at least one of them. Last time, it seemed like it had to be the probabilistic acceptance rule because it was not appealing to jettison the other principles. This time, however, since we have split up the Conjunction Principle to clarify the problem, we can see where things go wrong. The Union Principle seems fairly innocuous. The Agglomeration Principle, however, seems to be the culprit that ends up violating the Sufficiency Thesis. The Agglomeration Principle is a strong candidate for jettison. 

So, which is it, do we throw away the Sufficiency Thesis or the Agglomeration Principle? We’ve already considered some of the implications of denying principles like the Sufficiency Thesis. What about the Agglomeration Principle - what is the cost of denying it?
By denying the Agglomeration Principle, we never arrive at a contradiction. But, in trade, if we deny the possibility of agglomeration, we seem to have a messy heap of individual beliefs, but no way to relate those atomic propositions to form complex propositions.  This would be intolerable, and so perhaps we may find the Lottery Paradox to be paradoxical for other reasons. Denying the Agglomeration Principle, however, is not the same as denying agglomeration. If we deny the Agglomeration Principle, how does agglomeration work?

Perhaps I say to myself, “well I believe K­1­ and I believe K­2­, so I’m going to infer (K­1­ & K­2­).” We make that sort of inference all the time. Someone dedicated to employing the Sufficiency Thesis for determining the rational acceptability of (K­1­ & K­2­), however, would not accept this agglomeration tout court. Agglomeration itself is subject to the Sufficiency Thesis. 

If it is rationally acceptable for me to have the set of beliefs {K­1, K­2­}, and when I attempt to agglomerate this into (K­1 ­& K­2­), then I first must consider if P(K­1 ­& K­2­) > t. In this case, t = .99, and P(K­1 ­& K­2­­) = .98. Clearly, this particular agglomeration is not rationally acceptable. Proper agglomeration, at least given the Sufficiency Thesis, doesn’t operate like proponents of the Conjunction Principle seem to think. 

Granted, agglomerative inferences enable us to believe complex and interesting propositions, but their rational acceptability is still measured against the Sufficiency Thesis. Agglomeration is important to probabilistic rational acceptance; it just isn’t truth preserving on probabilistic propositions. I have to employ the Sufficiency Thesis on any agglomeration, including this one, to decide the rational acceptability of the resulting proposition. All inferences are subject to the Sufficiency Thesis – it serves as a kind of criterion of rational acceptability which filters, evaluates, and validates or invalidates any proposition.<<ref "10">>

The Agglomeration Principle, as an inferential principle which artificially sits outside the scope of Sufficiency Thesis, goes against the very spirit of the Sufficiency Thesis. The whole point of the Sufficiency Thesis is that any inference or belief formation, including agglomeration, must meet the criteria set out in the Sufficiency Thesis. We shouldn’t sneak the process of agglomeration outside the scope of the Sufficiency Thesis, and hence we should deny the fourth principle. This saves the Sufficiency Thesis from the criticism generally levied against it by those who wield the Lottery Paradox, however, the game is not over.

''5.1''

By denying the Agglomeration Principle, we won’t arrive at the rational acceptability of [(K­1 ­& K­2 ­& … & K­100)­ & ~(K­1 ­& K­2 ­& … & K­100­)]. In fact, we wouldn’t even reach the intermediate conclusion that (K­1 ­& K­2 ­& … & K­100­) is rationally acceptable. As far as I can tell, {φ, ~φ} will never be a possibly validated set of propositions using the first three principles either.  

The least intuitive set of propositions which these first three principles would deem rationally acceptable would be {K­1­­, K­2­, …, K­100­, ~(K­1 ­& K­2 ­& … & K­100­)­}. Essentially, this is the heap-like set of propositions that each ticket is a losing ticket and the proposition that not all the tickets are losing tickets. Admittedly, when phrased that way, the claim that this set of propositions is rationally acceptable does seem a pinch paradoxical. The Lottery Paradox still yields a nuanced and specific criticism of probabilistic rational acceptance, and at the heart of this criticism we will a find deep divide in intuitions concerning the nature of epistemic normativity.

While the Lottery Paradox would turn out not to be immediately fatal to the remaining three principles in terms of deeming a contradiction to be rationally acceptable, the odd thing which falls out of denying the Agglomeration Principle is the following: an agent can rationally accept a set of propositions in which the members of that set cannot all be true at the same time. That is what the Lottery Paradox really shows.
 
But, that’s okay, right?<<ref "11">> From a pragmatic standpoint, I think it is. From a skeptical standpoint, however, what falls out of the Lottery Paradox establishes that the Sufficiency Thesis is unusable and not an appropriate principle of rational acceptability. The ordinary and scientific propositions we want to think are rationally acceptable, which seem to rely upon the Sufficiency Thesis for their validity, may turn out to not be rationally acceptable from the skeptic’s point of view. The pragmatist hopes to defend the Sufficiency Thesis and the rational acceptability of the propositions it validates. 

Essentially, the Lottery Paradox might be seen as a discussion between a skeptic and a pragmatist. Does the lesser criticism from the Lottery Paradox still defeat the Sufficiency Thesis, demonstrating the rational unacceptability of so many common and scientific propositions? This somewhat formal matter turns out to have severe practical implications. 

On one hand, the skeptic employs a very high epistemic standard, deeming the actual results of the Lottery Paradox fatal to the Sufficiency Thesis, and thus to the rational acceptability of so many scientific and common-sense, ordinary propositions. From this view, epistemic principles, such as the Sufficiency Thesis, which lead us to inconsistent sets of beliefs are bad principles. They are flawed. They ought not be used, and they don’t count as the appropriate epistemic principles by which to guide our lives. Rational acceptance cannot be built upon the Sufficiency Thesis, as the skeptic sees it, since it is a foundation of quicksand. If the skeptic is correct, the lesser criticism of the Lottery Paradox rules out the viability of the Sufficiency Thesis as a principle of rational acceptability, which further rules out the rational acceptability of the many sorts of practical, ordinary, and also scientific propositions we might normally think of as being rationally acceptable.

On the other hand, the pragmatist employs a lower epistemic standard, defining rational acceptance in context. The pragmatist finds the Sufficiency Thesis suitable for many human contexts. The pragmatist recognizes that we must live our lives, sometimes make snap judgments, holding various beliefs which are not fully coordinated with each other, and that despite trying our best, we will not live up to the standard of epistemic perfection. But, that is okay! Inconsistent sets of beliefs are bad, but that doesn’t mean they aren’t rationally acceptable in all circumstances. The pragmatist does not see the lesser criticism of the Lottery Paradox as delivering a fatal blow to the Sufficiency Thesis and the propositions validated by it. The pragmatist allows for major flaws (flaws in the sense of the epistemic good) in our ordinary human contexts; he allows for believing inconsistent sets of propositions (in some cases); and he allows the Sufficiency Thesis to be less than perfect or maximally good. On the pragmatist’s view, the lesser criticism of the Lottery Paradox neither jeopardizes the viability of the Sufficiency Thesis nor the rational acceptability of so many ordinary and scientific propositions.

I’m drawn to both perspectives. I honestly don’t see a way to defeat the skeptic’s position on his own turf, from within his context, using his standard. Admittedly, I hold some of these skeptical intuitions at certain times. From this perspective, I desire for rational acceptability to keep its purity and presumably simple universalizability.<<ref "12">> To deny the possibility that it is ever epistemically permissible to believe some set of propositions which necessarily can’t all be true at the same time prohibits the Sufficiency Thesis. The skeptical part of me buys into that. From the skeptical perspective, however, it would not be rationally acceptable to hold so many sets of ordinary or scientific propositions at the same time. I cannot buy into that. I am drawn away from my skeptical intuitions. The costs are too high. I must be practical. How else can I live my life? 

Ultimately, I believe many propositions that are acceptable to hold by themselves without respect to absolutely all the other propositions I believe. Perhaps some of my beliefs cannot be true at the same time, and I just don’t yet realize it. That has to be okay. What other option did I have? Perhaps when I attempt to reconcile or agglomerate my various beliefs, I may realize that I have beliefs which oppose each other, and then, and maybe I am required to bracket those conflicting beliefs until I find a solution. Yet, I won’t always be in a position to reconcile my beliefs. Sometimes it really is acceptable for me to believe in a set of propositions which are logically inconsistent. Being as rational as I can, limitations and all, has to be acceptable. From the pragmatic point of view, what falls out of the Lottery Paradox is not a knock-down defeat of probabilistic rational acceptance. Instead, it is merely an example of our epistemic limitations as human beings. 

Ordinary human beings who do the best they can with what they have are bound to have some individual beliefs which are inconsistent – this is acceptable though. We are not computers who can test all of our proposed beliefs against all the combinations of beliefs we already hold with perfect accuracy and logic in all cases. Perfect coherence is not something we can purposely guarantee or achieve. We can’t be expected to flawlessly coordinate every single belief with all of our other beliefs. We don’t have the energy, time, or capacity for epistemic perfection. We are fallible and limited, but this is not a strike against rational acceptability from the perspective of practical epistemic duty.

Granted, it might take becoming like an unlimited computer to root out our deep-seated epistemic flaws that are somehow not acceptable by a golden standard of rationality. But, why should we be held accountable for achieving the impossible? These flaws, this lack of rationality, have to be normatively acceptable. The adage “ought implies can” comes to mind. In a perfect world, we would be fully capable of rooting out our conflicting beliefs, and thus we would have strong epistemic duties. But, in this world, we can’t always do that work, and so the normative epistemic expectations have to be lower and practical by necessity. It would not be fair to judge otherwise.

''5.2''

I submit we feel the pull of two standards of rational acceptability, the epistemic good and the epistemic right.<<ref "13">> There is a golden standard – the good. This is an objective standard of rational acceptability by which the skeptic evaluates all agents. Only ideal epistemic agents satisfy this supreme standard. From this standard, the Sufficiency Thesis is a failure, and the propositions it validates are not rationally acceptable. Ideal agents would never employ the Sufficiency Thesis, since ideal agents, by definition, never arrive at an inconsistent set of premises. What epistemic principle(s) an ideal agent would employ? I don’t know (I’m not an ideal agent), but whatever principle(s) an ideal agent would employ would live up to the epistemic good. It would be wrong for an ideal agent to not fully partake of the epistemic good. Importantly, this skeptic believes everyone, ideal and unideal agents alike, are to be judged by and are exclusively subject to the epistemic good. Humans are not ideal agents, and they are hopelessly lost and irrational by this standard. Very little of what we believe could be rationally acceptable. Hence, by solely employing the epistemic good as the standard of rational acceptability for all agents, a kind of skepticism concerning the epistemic lives of humans emerges.

The pragmatist, however, uses a lower, contextualized epistemic standard for human beings. The pragmatist thinks the epistemic good is the standard of rational acceptance for only the most ideal epistemic agents. We, as finite human beings, are not ideal epistemic agents, and we fall short of the standard of epistemic good – we are fallible and limited. Is this fallibility, however, unacceptable? No, not really. Only the most ideal and unlimited epistemic agents could be appropriately judged by or subject to that standard. Of course, we can admit that fallibility is not the ideal. Our epistemic limitations are a bad thing (the opposite of good), but not necessarily the wrong thing (the opposite of right).

The epistemic right, as a normative epistemic standard, like any decent ethical standard, must scale with context and ability. Proper judgment of rational acceptance relies upon “right,” not the “good.” What might be right or rationally acceptable for a child to infer might be the wrong for a developed adult, a being with more experience and resources, to infer. Further, what might be the right or rationally acceptable inference to make may turn out to be epistemically bad. Depending on the circumstances and agent in question, a belief may be rationally acceptable even if it is a bad one which doesn’t meet the more rigid standard of the epistemic good. Even the adults among us who come closest to satisfying or achieving the epistemic good are like children when compared to an unlimited, infallible machine, but this is acceptable. What other options do we have?

The sort of rational acceptability we should really be concerned with is the kind directly tied to the epistemic right, and that means rational acceptability must be contextualized.<<ref "14">> Acceptability is a judgment, and the only way to make it fair would be to take into account our fallibility and mental limitations. From this perspective, it does seem as though it can be rationally acceptable to hold beliefs which cannot all be true at the same time. 

In one sense, from the standpoint of the epistemic good, it is always rationally unacceptable to believe a set of logically inconsistent propositions (even when those beliefs are merely an uncoordinated heap of individual beliefs). From the perspective of the epistemic good, I think the skeptic is correct. The skeptic cannot let go of the epistemic good and refuses anything less, and I see the force behind that view. When asked, “What kind of epistemic agent do you want to be?” you should respond “a good one,” and not merely “a right one.”<<ref "15">> We want to be better than we are. We don’t want to be fallible or flawed, even when it is outside of our control. That desire is not insignificant. It is the reason we feel the pull of the skeptic’s position, and the reason the Lottery Paradox still seems paradoxical. 

In another sense, however, from the standpoint of the epistemic right, a highly contextual standard, it can sometimes be rationally acceptable to believe logically inconsistent propositions. That might be all that we are capable of doing in many circumstances. It would be fair to say we are irrational against the standard of epistemic good, but that doesn’t mean we are irrational given our circumstances. We have to make do with what we have, and rational acceptance must be understood in that light. It is our epistemic duty to reconcile our beliefs into as coherent a set as realistically possible, but we are not accountable for our circumstantial limitations. The Sufficiency Thesis really does seem appropriate to so many contexts in which humans find themselves.

''5.3''

I fear that those who would continue to employ the Lottery Paradox as an argument against probabilistic rational acceptance, even in light of my claim that what falls out of the paradox is a lesser criticism, are tempted to hold us accountable to the standard of the epistemic good rather than the epistemic right. Surely this can’t be correct. If the epistemic good is the sole standard of rational acceptance, then we are lost, and I do not see hope for us as profoundly fallible creatures. Holding humans accountable solely to the epistemic good results in a kind of skepticism about our epistemic lives. Why should we accept that skepticism?

Granted, the Lottery Paradox does seem to make the Sufficiency thesis appear paradoxical from the standpoint of the epistemic good. But, that’s part and parcel of accommodating fallibility and limited mental resources in probabilistic rational acceptance. To say that rationally acceptable inferences might still end up being incorrect is just to say that the right inferences aren’t always good inferences. Proponents of the Sufficiency thesis seem to be already comfortable with our fallibility and the notion that epistemic duty is disconnected from the good in a way that those who would continue to wield the Lottery Paradox as a weapon don’t seem to agree to. It is already built into the assumptions of someone who would ever be willing to go along with the Sufficiency thesis that there is a chance that rationally acceptable inferences turn out to lead us to believe falsehoods and an inconsistent set of complex beliefs. 

The Sufficiency Thesis does sometimes result in a bad set of beliefs, but this is far from saying it yields the wrong kinds of inferences or the wrong set of beliefs in a given context. I fear that the skeptic misses the point of the Sufficiency Thesis. The aim of the Sufficiency Thesis is an attempt to give an ideal answer to a practical question concerning fallible and limited minds; it is a pragmatic normative thesis which tries to give an objective shape to something which is highly contextual. We need something to work with, and the epistemic good alone cannot be our practical standard.

The Sufficiency Thesis is pragmatic, and it seeks the epistemic right, not the epistemic good. Detractors of the Sufficiency Thesis who apply the epistemic good (but not the right) perhaps need not employ the Lottery Paradox in the first place; rather he should just go after the root assumption, which is essentially a disagreement about fallibility and the merit of thinking about rational acceptability in terms of the epistemic right. The skeptic needs to establish why his standard, the epistemic good, is the correct standard for all agents, including humans.

''5.4''

The Lottery Paradox at first seems to be a direct threat to probabilistic rational acceptance. Upon closer inspection, however, we can see that the Lottery Paradox doesn’t yield as fatal a criticism of probabilistic rational acceptance as we might have initially thought. The Sufficiency Thesis does not result in validating contradictions, although it can result in validating inconsistent sets of propositions. Upon clarification, it seems that not all worries are diffused. The approach of this paper highlights the underlying worry that probabilistic rational acceptance can lead to believing propositions which can’t all be true at the same time. In wrestling with the implications of this criticism, we can see a struggle between pragmatic and skeptical perspectives.

Need we give into this skepticism? I hope not. Can and/or should we set the epistemic good aside and instead focus on the epistemic right? I hope so. If we can successfully set aside the epistemic good, even partially, then maybe we will be able to endure the real criticism which the Lottery Paradox yields. In any case, we have to try. It may be the only practical option.

Considering the Lottery Paradox in terms of the epistemic good and epistemic right may be the best direction to move forward. The skeptic may force us to enter a pragmatic perspective, to go back to the drawing board, to think in the context of the epistemic right, and to redefine what counts as rationality for human beings.

----------------

<<footnotes "1" "Kyburg, Henry Ely. //Probability and the Logic of Rational Belief//. Middletown, Conn: Wesleyan University Press, 1961: 197">>
<<footnotes "2" "Douven, Igor, and Timothy Williamson. 2006. 'Generalizing the Lottery Paradox.' //The British Journal for the Philosophy of Science//. 57, no. 4: 755">>
<<footnotes "3" "Ibid., 755-756">>
<<footnotes "4" "Ibid.">>
<<footnotes "5" "Ibid.">>
<<footnotes "6" "Although, it can evaluate the elements of a set of propositions, and perhaps indirectly, it can make a judgment about a set of propositions by iterating over all the set’s elements.">>
<<footnotes "7" "Technically, the second principle may be redundant. The Lottery Paradox will show that the Sufficiency Thesis, with the help of the Union and Agglomeration Principles, validates and invalidates a contradiction. Further, it may be argued that the Sufficiency Thesis also invalidates members of a set, and if a member of a set is rationally unacceptable, then the entire set may be rationally unacceptable. ">>
<<footnotes "8" "Epistemic Closure may sit behind it.">>
<<footnotes "9" "If each of the propositions φ and ψ are rationally acceptable, so is (φ & ψ).">>
<<footnotes "10" "Clearly, purely logical inferences are always upheld by the Sufficiency Thesis. If some set of assumptions have a probability of 1, then the conclusions deduced from those assumptions also have a probability of 1. Probabilistic inferences are different, since, in these cases, assumptions generally have a probability less than 1, and the conclusions inferred from those assumptions generally have a probability less than 1 as well. Truth preservation is lost in many cases of probabilistic inference. Yet, we can still say that all kinds of inferences, whether probabilistic or logical, could be validated by the Sufficiency Thesis.">>
<<footnotes "11" "I’m bringing my bias to the table here. The skeptic is well within in his rights to hold his position (it has enormous force), but I do not wish to hold that position. ">>
<<footnotes "12" "Contexts are messy and complicated, but note that particularist and semi-particularist theories need not deny universalizable norms.">>
<<footnotes "13" "To some extent, I am borrowing the concepts of ‘right’ and ‘good’ from traditional Virtue ethics.">>
<<footnotes "14" "I say 'directly' because the right is connected to the good, somehow. ">>
<<footnotes "15" "Somewhat similar to achieving eudaimonia, which is much more than being virtuous.">>

---------------

''Bibliography''

Douven, Igor, and Timothy Williamson. 2006. "Generalizing the Lottery Paradox". //The British Journal for the Philosophy of Science//. 57, no. 4

Hawthorne, John. //Knowledge and Lotteries//. Oxford: Clarendon, 2004.

Kyburg, Henry Ely. //Probability and the Logic of Rational Belief//. Middletown, Conn: Wesleyan University Press, 1961.

Nelkin, Dana K. 2000. "The Lottery Paradox, Knowledge, and Rationality". //The Philosophical Review//. 109, no. 3
''1.1 – Context and Introduction''

Welsey Hohfeld proposed a systematic framework of rights nearly a century ago. His analysis has remained remarkably useful in exploring and describing the concept of rights, both legal and moral. Although some general form of his theory may be widely accepted in many circles, the details are still being hashed out. Exactly how the various kinds of rights presented in the Hohfeldian framework relate to each other, what they mean, and what they entail, are still open matters of debate in moral and political philosophy. In this paper, I will be focusing on two particular schools of Hohfeldian analysis. The first school accepts Hohfeld’s own correlativity thesis.<<ref "1">> Roughly, this thesis claims that Hohfeldian primary jural positions (claim/right, duty, liberty/privilege, and no-claim) imply or are correlated with other primary jural positions, and the likewise for the secondary jural positions (power, immunity, disability/no-power, and liability).<<ref "2">> The second school, what I will refer to as the correlativity thesis of the Working Theory of Rights, builds on top of the first school’s premises a more controversial set of correlative relationships between the primary and secondary jural positions.<<ref "3">> Essentially, the secondary jural positions imply specific primary jural positions. I will not be arguing in defense of these approaches to Hohfeldian rights, rather I will be formalizing and taking up their assumptions, and then pointing out some significant conclusions which follow from the premises.

The Hohfeldian framework is often presented as tables of correlatives and opposites among eight distinct jural positions:

[img[hohfeld-1.png]]

Primary Jural Positions: 

For this table, Hohfeld believed the top rows were correlated to the respective members of the bottom rows, represented here with black, vertical arrows. For someone to have a claim implies that someone has a duty (and vv.). The same correlative relationship is also thought to hold for liberty and no-claim, and likewise for the secondary jural positions. Similarly, Hohfeld believed the grey, diagonal lines represented a relationship of opposites. The opposite of a claim is a no-claim (and vv.), the opposite of duty is a liberty, and so on. 

While this table is a useful starting place, I believe it is not comprehensive. Given the assumptions of the two schools of thought I examine in this paper, I will present a more thorough explanation of the relationships to be found among the traditional Hohfeldian jural positions found in these tables. Further, I will argue that a slightly different set of tables offer an enhanced understanding of the jural positions. 

Hohfeld’s eight jural positions (or incidents) form a kind of language for describing various legal (and possibly moral) rights positions in which agents find themselves. How useful is this language? Hohfeld indicated that this language had a property of completeness, in the sense that these terms could express all legal rights positions.<<ref "4">> The completeness of such a language seems contentious. After all, we might wonder how this language could adequately express complex legal positions. I will not defend the completeness of the Hohfeldian language/framework, but I will work from the assumption that it is plausible.

We can think of Hohfeld’s eight jural positions as atomic jural positions.<<ref "5">> Various kinds of atomic jural positions can be combined to form complex or molecular sets of jural positions. For example, a molecular duty to a group of people could be reduced to a set of atomic duties to each member of that group.<<ref "6">> As another example, some kinds of rights seem to be clumped together as a molecule of different kinds of atomic jural positions. For example, a property right may include: (a) a claim against others interfering with your property, (b) a power to waive or transfer that claim right, (c) a liberty to use your property, and (d) immunity from others modifying your claim, power, and liberty rights to that property.<<ref "7">> On this view, any molecular collections of rights can be reduced to atomics.

The language of atomic Hohfeldian jural positions might plausibly be complete in its ability to describe all of the various kinds of legal rights positions. I will be formalizing these atomic jural positions into predicates of first-order logic, since they seem to be the building blocks we would use to formally describe more complex sets of rights.

After formalizing Hohfeld’s original jural positions, I will argue that there are actually eight kinds of primary jural positions (rather than the traditional four), and I will only temporarily argue there are four secondary jural positions. Further, I will show exactly what is analogous about the logical relationships between primary and secondary positions, and I will argue that they aren’t identical sets of logical relationships. I will also argue that the correspondence between these jural positions is not merely biconditional but actually a relationship of logical equivalence, and this should help solidify exactly what it means to call something a jural position. Lastly, I will show how the correlativity thesis of the Working Theory of Rights can be formalized, and I will show that the secondary jural positions are really molecules which can each be reduced to sets of two particular atomic, primary jural positions. In effect, I will demonstrate how the two schools of thought together yield a table of eight atomic jural positions, and further that what we traditionally think of as the secondary jural positions are really just a special class of rights-molecules which are reducible to and describable in terms of these atomic, primary eight.

''1.2 – Formalizing the Traditional Primary Jural Positions''

The first school of thought, Hohfeld’s correlativity thesis, can be formalized using four premises.<<ref "8">> The first two premises claim correlative relationships between the primary jural positions, and the third and fourth premises claim correlative relationships between the secondary jural positions. We’ll examine the first two premises in this section.

Where φ is a particular behavior:

*“A has a claim that B φ” is translated as Claim(A, B, φ) 

*“B has a duty to A to φ” is translated as Duty(B, A, φ)

*“A has a liberty to φ with respect to B” is translated as Liberty(A, B, φ)

Premise 1: 	“A has a claim that B φ iff B has a duty to A to φ”

*Claim(A, B, φ) ↔ Duty(B, A, φ) 

Premise 2: 	“A has a liberty to φ with respect to B iff it is not the case that B has a claim that A ¬φ”

*Liberty(A, B, φ) ↔ ¬Claim(B, A, ¬φ)

Transitivity will enable us to logically interrelate claims, duties, and liberties. Since we have assumed a biconditional relationship between claims and duties (premise 1), and we have assumed a biconditional relationship between liberties and claims (premise 2), we can establish a biconditional relationship between liberties and duties. Essentially, since we know: 

*¬Claim(B, A, ¬φ) ↔ ¬Duty(A, B, ¬φ)

And, since Liberty(A, B, φ) just in case ¬Claim(B, A, ¬φ), then we know:

*Liberty(A, B, φ) ↔ ¬Duty(A, B, ¬φ)

The rule for converting a duty into a claim (and vv.) is simple – replace the predicate and switch the first two arguments. The rule for converting a claim into a liberty (and vv.), however, is slightly more complicated – replace the predicate, negate the entire sentence, switch the first two arguments, and negate the third argument. The rule for converting a duty into a liberty (and vv.): replace the predicate, negate the entire sentence, and negate the third argument. With these rules in mind, we can convert any one of these three primary jural positions (claim, liberty, or duty) into either of the other jural positions.

''1.3 – Eight Kinds of Primary Jural Positions''

Given our rules, we can generate the following eight sets of unique jural relationships:

[img[hohfeld-2.png]]

This is the extended table of all possible jural positions between A and B regarding φ and ¬φ. Note that the grey, vertical line shows a relationship of opposites. The black, horizontal arrows show the biconditional, correlative relationship. 

Each box shows three jural positions related by the correlativity thesis. A jural position implies two others. Take the top-right box: a claim, Claim(A, B, φ), has both a corresponding duty, Duty(B, A, φ), as well as a no-liberty, ¬Liberty(B, A, ¬φ). The same is true for the other sets. 

As I will argue later, these sets aren’t really three different yet correlated jural positions, but rather each set of relationships is one atomic jural position with three different expressions of the same semantic content.<<ref "9">>
 
Only three predicates are necessary, but there are many combinations to consider. The table above suggests there are actually eight kinds of primary jural positions. I submit that there aren’t simply four kinds of primary jural positions. If “no-claim” is really a genuine kind of jural position, then so are “no-liberty” and “no-duty,” and this is true in both directions, from A to B and from B to A, regarding both φ and ¬φ, hence eight unique kinds of jural positions.

In a footnote, Hohfeld provides some perspective on the notions of correlatives and opposites. He explains:

Note that in dealing with the correlatives, we are looking at the same situation from the point of view of first one and then the other of the two persons involved, but that when dealing with jural opposites we are looking at two different situations from the point of view of the same person, i.e. in one situation he has, for example, a right, in the other, “no-right.”<<ref "10">>

The opposite of Claim(A, B, φ) is ¬Claim(A, B, φ). According to Hohfeld, the opposite jural positions must be understood from the point of view of the same person. We might think of Claim(A, B, φ) from the point of view of agent A, in some sense, and the opposite or negation of it, ¬Claim(A, B, φ), also from the point of view of agent A. They are opposites because they use the same atomic sentence, just one is negated and the other isn’t. Employing this exact same reasoning, we can see that the direct opposite of Duty(A, B, φ) is ¬Duty(A, B, φ), and the opposite of Liberty(A, B, φ) is ¬Liberty(A, B, φ). The extended table above shows this.

Hohfeld’s traditional table does not clearly show the opposite relationships for duties and liberties. From the traditional table, the opposite of duty, Duty(A, B, φ), is a liberty. What is this liberty though? If it is from the same point of view, agent A’s, regarding B and φ, then the traditional table may falsely lead us into thinking the opposite of Duty(A, B, φ) is Liberty(A, B, φ). Hohfeld is actually claiming, however, that the opposite of Duty(A, B, φ) is Liberty(A, B, ¬φ). Note how the correlative liberty is regarding ¬φ, not simply φ. The traditional table does not make this clear, but the extended does.

The extended table shows that the opposite of Duty(A, B, φ) is ¬Duty(A, B, φ), and ¬Duty(A, B, φ) implies that Liberty(A, B, ¬φ). Since the Hohfeldian opposites rely upon negating entire jural positions, and given the his correlativity thesis, we can see from the extended table how the opposite of duty implies a particular kind of Liberty, not about φ from A’s point of view, but rather about ¬φ from A’s point of view.

The extended table presents Hohfeld’s argument more clearly than the traditional table. Essentially, with the extended table, we can both apply the reasoning from the quote above, which shows that opposites rely upon negations of the entirety of jural positions, and we can cleanly account for Hohfeld’s negations of φ regarding liberties (given the correlativity thesis).

Regarding Hohfeld’s notion of correlativity, we will also find that extended table more clearly presents Hohfeld’s argument more so than the traditional table. Both the traditional and extended table show that Claim(A, B, φ), from the point of view of agent A, is correlated to Duty(B, A, φ), from the point of view of agent B. Likewise for the other direction, Duty(A, B, φ) and Claim(B, A, φ). However, when we consider liberty, Liberty(A, B, φ), the traditional table may falsely lead us into thinking the correlative jural position is ¬Claim(B, A, φ). Hohfeld’s argument, however, is that Liberty(A, B, φ) is correlated to ¬Claim(B, A, ¬φ). Just as in the case of opposites, the correlatives hinge upon negating φ, which the extended table shows and the traditional does not as clearly. 

Further, the extended tables have more fully developed each position. A situation in which someone has a claim, Claim(A, B, φ), is not just correlated to a duty, Duty(B, A, φ), but it is equally correlated to a no-liberty, ¬Liberty(B, A, ¬φ). The traditional table does not make this as clear, partly because no-liberty and no-duty aren’t included in the traditional table. 

Ultimately, I’m inclined to think there eight kinds of primary jural positions because agent A can be legally positioned to B regarding φ or ¬φ in exactly eight distinct ways. 

''2.1 - Formalizing the Traditional Secondary Jural Positions''

The remaining two premises of the first school of thought, Hohfeld’s correlativity thesis, are examined in this section.
Where ψ is a particular primary or secondary jural position:

*“A has a power over B regarding B’s ψ” is translated as Power(A, B, ψ)
*“B has a liability under A regarding B’s ψ” is translated as Liability(B, A, ψ)
*“A has immunity from B regarding A’s ψ” is translated as Immunity(A, B, ψ)

Premise 3: 	“A has a power over B regarding B’s ψ iff B has a liability under A regarding B’s ψ”

		*Power(A, B, ψ) ↔ Liability(B, A, ψ)

Premise 4:	“A has immunity from B regarding A’s ψ iff it is not the case that B has a power over A regarding A’s ψ”

		*Immunity(A, B, ψ) ↔ ¬Power(B, A, ψ)

Transitivity will enable us to logically interrelate powers, liabilities, and immunities. Since we have assumed a biconditional relationship between powers and liabilities (premise 3), and we have assumed a biconditional relationship between immunities and liabilities (premise 4), we can establish a biconditional relationship between immunities and powers. Essentially, since we know: 

*¬Power(B, A, ψ) ↔ ¬Liability(A, B, ψ)

And, since Immunity(A, B, ψ) just in case ¬Power(B, A, ψ), then we know:

*Immunity(A, B, ψ) ↔ ¬Liability(A, B, ψ)

The rule for converting a liability into a power (and vv.) is simple – replace the predicate and switch the first two arguments. The rule for converting a power into an immunity (and vv.), however, is slightly more complicated – replace the predicate, negate the entire sentence, and switch the first two arguments. The rule for converting a liability into an immunity (and vv): replace the predicate and negate the entire sentence. With these rules in mind, we can convert any one of these three secondary positions (power, immunity, or liability) into either of the other jural positions.

''2.2 – Four Kinds of Secondary Jural Positions''

Similar to the primary jural positions, we can generate the following four sets of relationships:

[img[hohfeld-3.png]]

This is the extended table of all possible power, liability, and immunity relationships from A to B regarding ψ. Note that there is no ¬ψ, hence there are fewer combinations of secondary jural positions to consider.  From this table, we can see that the opposite of Power(A, B, ψ) is ¬Power(A, B, ψ), just as the standard Hohfeldian opposites shows. Further, the opposite of Liability(A, B, ψ) is ¬Liability(A, B, ψ), which just is correlated to Immunity(A, B, ψ).

Here, we can agree with the standard Hohfeldian analysis. From what we have now, I’m inclined to think there four kinds of secondary jural positions because agent A can be legally positioned to B regarding ψ in exactly four distinct ways.<<ref "11">>  

''2.3 – Comparing and Contrasting the Logical Relationships of Primary and Secondary ''

There are some interesting similarities between the logical relationships amongst the primary jural positions and amongst those of the secondary jural positions.

The translation of the primary jural positions to first-order logic (FOL) predicates has a similar structure to the translation of the secondary jural positions to FOL predicates. They all employ ternary predicates. These predicates all demonstrate a relationship from agent A to agent B regarding some behavior or jural position, φ or ψ. 

Further, the transitivity of each set of jural positions is virtually identical. The highly parallel argument structures (1.2 and 2.1) make that very clear. The only major difference I find is that the primary predicate conversions require a negation on φ, when converting from a liberty to the claim or duty (and vv.), while secondary predicate conversions do not require a negation on ψ, when converting from immunity to power or liability. This had impact on the quantity of combinations we had to consider.

The relationship between the predicates liberty/claim/duty, regarding agents A and B with respect to φ, is not perfectly analogous to the relationships between the predicates immunity/power/liability, regarding agents A and B with respect to ψ. Albeit, the transitive relationships are basically identical. The result of this was that I concluded there were eight primary jural positions, but still only four secondary jural positions.

''2.4 – Logically Equivalent Positions''

So far, I’ve carefully stated these relationships as mere biconditionals (which is what I’ve run into in the literature), which is not as strong a statement as claiming that they are logically equivalent. Just to be clear on the difference, consider a world in which c is a small Tetrahedron. These three sentences are true:

*Tet(c) ↔ Small(c)	    
*Cube(c) ↔ Medium(c)	  
*Small(c) ↔ ¬¬Small(c)

The first two sentences are true in our world, but they aren’t logical truths because they aren’t true in all possible worlds. The last sentence, however, is a logical truth. If a biconditional is true in all possible worlds (i.e. true in every model) – and is, therefore, a logical truth – then the biconditional results in a logical equivalence. Since Small(c) ↔ ¬¬Small(c) is a logical truth, then Small(c) ⇔ ¬¬Small(c). 

Take another biconditional example: P is larger than Q iff Q is smaller than P. Syntactically, these are different sentences:  Larger(P, Q) and Smaller(Q, P). Semantically, however, they are the same. These sentences are just expressions of the same relationship between P and Q. Since Larger(P, Q) ↔ Smaller(Q, P) is a logical truth in virtue of the meanings of the predicates, then Larger(P, Q) ⇔ Smaller(Q, P). These are logically equivalent sentences. The same thing, however, is occurring in conceptual analysis of the predicates of Hohfeldian jural positions.

I am claiming that our biconditionals have been too weak and inexpressive. Since we are performing conceptual analysis, these relationships are stronger, and we should really claim that these are logically equivalent. Consider this kind of jural position:

*Claim(A, B, φ)  	↔ Duty(B, A, φ) 
* Duty(B, A, φ)  ↔ ¬Liberty(B, A, ¬φ) 

We might think of them as being three different jural positions, one position for A and two for B, which simply correspond to each other. If they really are three different jural positions instead of one, then we should continue to express these relationships as biconditionals. Yes, the biconditionals are true; these sentences do share the same truth values. But, given the meanings of these predicates, I believe the relationships are stronger (analogous to the Larger and Smaller example). These sentences have the same semantics, which is why they are logically equivalent. Part of what it means for A to have a claim that B φ just is for B to have a duty to A to φ, which just is that B has a no-liberty to not φ with respect to A. The members of this claim/duty/no-liberty trio are conceptually bound to each other, and it doesn’t make sense to separate these as different jural positions. They are three different ways of expressing the same fundamental jural position shared between A and B regarding φ. 

Essentially, I believe there isn’t a possible world in which the biconditionals are false, which would mean those biconditionals are logical truths. Hence, my claim is stronger:

*Claim(A, B, φ)  	⇔  Duty(B, A, φ) 
*Duty(B, A, φ) ⇔ ¬Liberty(B, A, ¬φ)

The same kind of reasoning holds for all the other kinds of jural positions outlined in the final tables of sections 1.3 and 2.2. Thus, it should be much clearer as to what we call a jural position, and why. Each set from our tables is really just one jural position with three expressions. Hence, there are eight primary jural positions and, tentatively, four secondary jural positions.<<ref "12">>
 
On a side note, one of the results of regarding these biconditionals as equivalences is that ψ, in the case of our secondary jural positions, is a not as simple an object as we thought. A particular ψ does not belong to any one individual, but rather to two agents. Thus, when we say “A has a power over B regarding ψ,” we must recognize that it is not simply B’s ψ, but a jural position of B and some other agent. That jural position is their jural position together – we may have three expressions of that jural position, but it has the same semantics.

''3.1 – Correlativity Thesis of the Working Theory''

We now pass on to the second school of thought, the correlativity thesis of the Working Theory of Rights, which posits another set of logical relationships between the primary and secondary jural positions. Again, I will not be defending this position, but I will formalize it, demonstrating how the secondary jural positions can be reduced to a specific set of primary jural positions. We have the tools to make the Working Theory of Rights’ claims perspicuous. 

You will note that I didn’t offer any detailed semantics to our predicates so far. For example, I never fleshed out exactly all of what a claim-right means, even though I considered how it is logically related to the other primary jural positions given our commonly agreed upon premises. One nice thing about presenting the logical relationships in this way is that we don’t need to have agreed upon exactly all of what counts as a claim-right in order to understand certain things about these jural positions. Maybe some theories of claim-rights have additional details or definitions of exactly what counts as a claim-right. This may be okay though.  Just as long as we agree to Premises 1-4 (which many people seem willing to do) and the logical equivalence argument in section 2.4, then the rest of my argument falls out of it. Hence, I’ve been able to overlook some of the defining characteristics of these jural positions. In order to juice our intuitions about the Working Theory of Rights’ reduction, however, I will need to briefly add some semantic meat to the bones of these predicate symbols. 

3.2 – Power, Atomic and Molecular

Hohfeldian power is the legal capacity to introduce, extinguish, or change some primary or secondary jural position. For example, you have the power to revoke my (hypothetical) liberty to not leave your home. You have the power to change our shared jural position. You can extinguish a liberty I had to not leave your home, revoking Liberty(Me, You,¬LeaveYourHome), and instead introduce a no-liberty for me to not leave your home, ¬Liberty(Me, You, ¬LeaveYourHome). Note our equivalences:

*Liberty(Me, You, ¬LeaveYourHome) 	⇔  ¬Duty(Me, You, LeaveYourHome)  ⇔  ¬Claim(You, Me, LeaveYourHome)

*¬Liberty(Me, You, ¬LeaveYourHome) 	⇔  Duty(Me, You, LeaveYourHome) ⇔  Claim(You, Me, LeaveYourHome)
	
When you exercise your power, our first jural position is extinguished, and the second is introduced to us. Note how the exercise of this power is just one behavior. Since P v ¬P, if you extinguish P, then you introduce ¬P. At least for now, we can think of this as an atomic power, although later, I will show that even atomic powers are really molecular jural positions (when they are reduced to primary jural positions).

Interestingly, while atomic power can’t be broken down into two different acts in this case, there may be cases where certain things we might initially think are atomic instances of power are actually molecular, and they can be broken down into more atomic parts. For example, if I exercise the power to change how much money you owe (let’s say I make it so you owe me 50% less, but it could have been 1%, 2%, etc.), then I’m extinguishing P, but introducing Q (rather than merely ¬P). Hence, this power is already molecular, since introducing Q implies extinguishing P, it seems that a power to introduce Q is molecular. 

It may be even more molecular, depending on how we want to think about it. We might claim that I have an extinguishing power paired with some introduction power for making you owe me 50% less money. But, I also have an extinguishing power paired with some introduction power for making you owe me 1% less money. The same is true for 2%, and so on. Hence, my so-called power to change how much money you owe is really molecular, and it can be broken down into a tightly knit molecule of a great many number of atomic powers. Hopefully this elucidates how there are cases of what we took to be atomic powers which turned out to actually be molecular powers, and it showcases the expressiveness of Hohfeld’s language. 

The Working Theory of Rights claims that this legal capacity is a liberty to modify our jural position. Essentially, on this theory, if you have a power, then you have the liberty to introduce, extinguish, or change a particular jural position. Note that this is still speaking in terms of atomic jural positions. 

One counterexample to this correlation between liberty and power could involve conflicting powers and duties not to exercise those powers in a certain way by the Supreme Court. Let us say SCOTUS has the legal power to make rulings – that is, to change jural positions for a great number of agents. Supposedly, included in this power is the ability to make a bad ruling, to modify some jural position in a bad way (whatever the standard of badness may be). Now suppose they also have a legal duty not to make a bad ruling. Thus, SCOTUS won’t have a liberty to use that power in a certain way – that is, they don’t have a liberty to make a bad ruling. Thus, it doesn’t appear that power is always a liberty. This may be paradoxical for the Working Theory of Rights, as if this conceptually possible power and duty combination can’t be explained if we agree to the claim that power is a liberty. 

The correlativity thesis of the Working Theory of Rights, if it is correct, suggests this counterexample has employed a molecular set of jural positions, but acted as if it was atomic. If we assume the Working Theory of Rights correlativity, then what is really going on in this example is that SCOTUS has a very large set of atomic powers, but no member of that set is a power to make a bad ruling or interpretation. They only have the powers necessary to make good rulings. Any of the ruling powers SCOTUS has, given our assumptions, is such that it will be not be a power to make a bad ruling. This is not paradoxical, however, for the Working Theory of Rights. SCOTUS has liberties to make certain kinds of modifications of jural positions, just as long as they are not bad modifications, in this case. Conversely, SCOTUS doesn’t have liberties to make modifications of jural positions which are bad. The Working Theory of Rights seems capable of expressing the legal positions of SCOTUS. The reduction from power to liberty may be plausible.

It is important to see that, on the Working Theory of Rights, we are often mistaken about the nature of power; many things which people are tempted to treat as atomic powers are not, in fact, atomic – they’re molecular. But, as we will see, given the reduction, we will find that even atomic powers are not really atomic jural positions in the same way as the primary jural positions.

''3.2 – Preliminary Relationship Between Primary and Secondary Jural Positions''

If the correlativity thesis of the Working Theory of Rights is correct, then power is reducible to a particular liberty to introduce, extinguish, or change a jural position.

Additionally, assuming the Working Theory’s correlativity thesis, Hohfeldian liability requires that the liable agent must abide by whatever changes someone makes to his jural positions, just as long as the agent who made the change had the legitimate power to do so. In our example, if you have the power to introduce a duty to me to leave your home, then I am liable to you regarding the changes you could make to our shared jural position. Essentially, I have a duty to abide by your modification of our jural position. I have a duty to abide by your changes stemming from your power – I must obey you in this respect. 
Since we can flesh out the semantics of power in terms of liberty to modify and liability in terms of duty to abide, let us formalize the logical connection between the primary and secondary jural positions as set out by correlativity thesis of the Working Theory of Rights.

''3.3 – Formalizing the Relationship between Primary and Secondary Jural Positions''

Maintaining our previous translations and predicates, and where X(ψ) is the act of introducing, extinguishing, or changing ψ, and where Abide(X(ψ)) is the act of abiding by the results of X(ψ):

Premise 5: 	“A has a power over B regarding ψ ⇔ A has the liberty to X(ψ) with respect to B”

	*Power(A, B, ψ) ⇔ Liberty(A, B, X(ψ))

Premise 6:	“A has a liability under B regarding ψ ⇔ A has a duty to B to abide by B’s X(ψ)”

	*Liability(A, B, ψ) ⇔ Duty(A, B, Abide(X(ψ))

Note the logical equivalence, which is stronger than a biconditional. The claim is a controversial one; the semantics of “A has a power over B regarding ψ” are the same as “A has the liberty to X(ψ) with respect to B,” and similarly for liability. This gives us a strong bridge between the primary and secondary jural positions. We can speak about power in terms of a specific kind of liberty. This liberty can be equivalently expressed as a no-duty or no-claim. Further, we can speak about liability in terms of a specific kind of duty, which can be equivalently expressed as a claim or no-liberty.

Given such a strong correlation between the primary and second jural positions in these premises, we can see a reduction of power, liability, no-power, and no-liability down to specific primary jural positions.  

*Power(A, B, ψ) 	⇔ Liberty(A, B, X(ψ))		⇔ ¬Duty(A, B, ¬X(ψ))	⇔ ¬Claim(B, A, ¬X(ψ))	
*¬Power(A, B, ψ)	⇔ ¬Liberty(A, B, X(ψ)) ⇔ Duty(A, B, ¬X(ψ)) ⇔ Claim(B, A, ¬X(ψ))
*Liability(A, B, ψ) ⇔ Duty(A, B, Abide(X(ψ))	 ⇔ Claim(B, A, Abide(X(ψ))	⇔ ¬Liberty(A, B, ¬Abide(X(ψ))	
*¬Liability(A, B, ψ) ⇔ ¬Duty(A, B, Abide(X(ψ)) ⇔ ¬Claim(B, A, Abide(X(ψ)) ⇔ Liberty(A, B, ¬Abide(X(ψ))	


This is a table of the reduction of power, liability, no-power, and no-liability, as secondary jural positions, to an equivalent set of primary jural positions. It isn’t, however, complete. The problem is not that we’re missing immunity and no-immunity, as the semantics of Immunity(A, B, ψ) are captured by ¬Liability(A, B, ψ), and ¬Immunity(A, B, ψ) by Liability(A, B, ψ). The reduction of immunity and no-immunity to primary jural positions would be identical to the reduction of no-liability and liability. What is missing, however, is the fact that Power(A, B, ψ) is equivalent to Liability(B, A, ψ). Hence, Power(A, B, ψ) is not just Liberty(A, B, X(ψ)), but it is also Duty(B, A, Abide(X(ψ))). The following should make that point clear:

*Power(A, B, ψ) 		⇔ Power(A, B, ψ)	⇔ Liberty(A, B, X(ψ)) ⇔ ¬Duty(A, B, ¬X(ψ)) ⇔ ¬Claim(B, A, ¬X(ψ))
*Power(A, B, ψ) 	⇔ Liability(B, A, ψ)		⇔ Duty(B, A, Abide(X(ψ)))⇔ Claim(A, B, Abide(X(ψ)))	⇔ ¬Liberty(B, A, ¬Abide(X(ψ)))

Thus, power is reducible to the two specific primary jural positions:

*Power(A, B, ψ) 	⇔ Liberty(A, B, X(ψ))	⇔ ¬Duty(A, B, ¬X(ψ))	⇔ ¬Claim(B, A, ¬X(ψ))				
*Power(A, B, ψ) 	⇔ Duty(B, A, Abide(X(ψ))) ⇔ Claim(A, B, Abide(X(ψ)))⇔ ¬Liberty(B, A, ¬Abide(X(ψ)))

Clearly, the opposite, ¬Power(A, B, ψ), would be reducible to two distinct primary jural positions as well (just throwing around negations). In fact, in the same manner, each of the secondary jural positions can be reduced to two distinct primary jural positions, one where φ = X(ψ), and another where φ = Abide(X(ψ)).

''3.4 – Implications and Conclusion''

First, the reduction shows just how remarkably versatile and expressive the primary jural positions can be. Second, formalizing the reduction demonstrates that the secondary jural positions are not actually atomic but, rather, molecular. The semantics of secondary jural positions can be reduced to two atomic, primary jural positions. 

To me, this signifies that the real heavy lifting in this conceptual analysis is born upon the backs of the primary jural positions. Those may be the only real kinds of jural positions. What we call the secondary jural positions aren’t really kinds of jural positions, after all – they are just important classes or subsets of the various possible primary jural positions. We only give these particular classes/subsets names because it useful for quickly describing and understanding various legal arguments. 

These two schools of thought, the correlativity theses of Hohfeld and the Working Theory of Rights, may or may not be correct. If they are correct, then some interesting conclusions fall out of their premises: there are eight combinations or kinds of atomic, primary jural positions; the logical relationship found between the traditional primary jural positions ends up not being identical to the logical relationship found between the traditional secondary jural positions; each of these jural positions have three logically equivalent expressions (using the predicates claim, duty, and liberty); and, lastly, the traditional secondary jural positions are really molecular positions which are reducible to a specific set of atomic jural positions.

----------------

<<footnotes "1" "Hohfeld, Wesley N. 'Some Fundamental Legal Conceptions as Applied in Judicial Reasoning.' //The Yale Law Journal// 23, no. 1 (November 1913): 16-59. http://www.jstor.org/stable/785533. ">>
<<footnotes "2" "I will provide a more detailed set of premises which define this correlation later in the paper.">>
<<footnotes "3" "Steiner, Hillel. 'Working Rights.' //In A Debate Over Rights//, by Matthew Kramer, Nigel Simmonds, and Hillel Steiner, 233-300. Oxford: Oxford University Press, 2002.">>
<<footnotes "4" "Corbin, Arthur. 'Forward.' //In Fundamental Legal Conceptions as Applied in Judicial Reasoning//., by Wesley Newcomb Hohfeld and Walter Wheeler Cook. New Haven: Yale University Press, 1964. pgs. 27 and 64.">>
<<footnotes "5" "Later, I will go into more detail about what it means for a jural position to be atomic, and I will eventually deny that the traditional secondary jural positions are atomic.">>
<<footnotes "6" "It remains a point of contention about whether or not a collection of individuals can form an agent said to be participating in an atomic duty, claim, liberty, etc. Hohfeld may have aimed for jural positions to be exclusively between two individuals. I’m not sure how much it matters though, and so I will set that aside for now. ">>
<<footnotes "7" "Even these may be molecular and can be broken down into atomics. E.g. maybe (b) is the really a combination of two different atomic powers.">>
<<footnotes "8" "I’ve presented the correlativity thesis in terms of premises because they are debatable (and hence might be false), but also because a valid argument based on these premises will demonstrate what logically follows if we assume the premises to be true (which a significant portion of moral and political philosophers seem to do).">>
<<footnotes "9" "Hohfeld may have held this view himself, but I am not sure.">>
<<footnotes "10" "Hohfeld, Wesley Newcomb, and Walter Wheeler Cook. Fundamental Legal Conceptions as Applied in Judicial Reasoning, and Other Legal Essays,. New Haven: Yale University Press, 1923. pg 10, n. 13.">>
<<footnotes "11" "My conclusion, however, will deny that this is truly an atomic jural position like the primary jural positions.">>
<<footnotes "12" "Again, my conclusion will argue that what are normally called the secondary jural positions aren’t atomic jural positions at all, but, rather, molecules. It isn’t clear to me that they deserve to be called a kind of jural position in the same way as the primary jural positions.">>

----------------------

Bibliography

Corbin, Arthur. "Forward." //In Fundamental Legal Conceptions as Applied in Judicial Reasoning//., by Wesley Newcomb Hohfeld and Walter Wheeler Cook. New Haven: Yale University Press, 1964.

Hohfeld, Wesley N. "Some Fundamental Legal Conceptions as Applied in Judicial Reasoning." //The Yale Law Journal //23, no. 1 (November 1913): 16-59. http://www.jstor.org/stable/785533.

Hohfeld, Wesley Newcomb, and Walter Wheeler Cook. //Fundamental Legal Conceptions as Applied in Judicial Reasoning, and Other Legal Essays//,. New Haven: Yale University Press, 1923.

Steiner, Hillel. "Working Rights." I//n A Debate Over Rights//, by Matthew Kramer, Nigel Simmonds, and Hillel Steiner, 233-300. Oxford: Oxford University Press, 2002.
The goal of Darwall’s distinction between Appraisal Respect (AR) and Recognition Respect (RR) is to bring us closer to understanding the moral “respect to which all persons are entitled,”<<ref "1">> which I will refer to as Respect for Persons (RfP). Darwall believes RfP is some form of RR “owed to all persons,”<<ref "2">>  and that RfP is categorically not a form of AR. According to Darwall, RfP occurs when we “take seriously and weigh appropriately” the property of personhood found in “persons in deliberating about what to do.”<<ref "3">> That matches many of our intuitions. Indeed, Darwall makes a few fundamental distinctions which have to be right; however, he goes on to bend his conceptual analysis in ways we should not accept. My goal is to reveal the bare metal of these concepts and highlight concerns or questions surrounding them.

Darwall offers many definitions of RR.<<ref "4">> To have RR is “to weigh appropriately in one's deliberations some feature of the thing in question to act accordingly.”<<ref "5">> RR is “giving appropriate consideration or recognition to some feature” of an object in deliberation “about what to do.”<<ref "6">> For example, I would take the fact that a dangerous bull is charging me as a salient fact for my deliberations for action, and assuming no other facts outweighed my prudential desires, I would flee for cover. I have RR for the fact that the bull is charging me when I weigh that fact and act.

Unfortunately, Darwall often refers to RR as an attitude or a disposition (technical terms in philosophy), but this is an unnecessary layer and perhaps an ad hoc limit to place on the concept of RR. Charitable interpretations of Darwall should lift this restriction, since it is obvious that the concept of RR can accommodate more diverse mental descriptions of this phenomenon.

Darwall emphasizes the psychological aspects of RR (intention and motivation are obviously key), but it is clear that he also aims for action to be an integral component of RR.<<ref "7">> RR is an action resulting from or motivated by the appropriate deliberation concerning some target fact with some other facts.<<ref "8">>  

A complete instance of RR consists in a pair: an action and a reason for that action which must be generated in a particular way. If we break apart an instance of RR, we find an object, a perceived feature/fact of that object, a weighing or deliberation of that perceived fact against other perceived facts, at least one subjective standard for weighing (which itself is a special kind of fact from the agent’s perspective), and the action which results from deliberation. Exactly what could count as a standard isn’t clear (the moral law, prudence, or many subjective standards seem to be viable candidates). Darwall emphasizes the feature of the object as the target of RR rather than the object itself.9 Exactly how and which targets of RR are selected is not obvious.<<ref "10">>

It remains unclear to me whether targets of RR must ultimately modify or constrain the action of RR (a strong requirement), or if this fact need only be merely a factor with some (but not necessarily efficacious) weight in deliberations (a weak requirement). If a fact doesn’t have any real effect in weighing, if it isn’t the reason for acting, then can it be a viable target of RR? Darwall appears to imply this strong requirement. For example, he says, “to have recognition respect for something is to regard that fact as itself placing restrictions on what it is permissible for one to do.”<<ref "11">> Maybe, but it isn’t obviously true, and there might be exceptions.<<ref "12">>

Most significantly, Darwall tailored RR with voluntary deliberation and action. RR is the category of respect for which we can possibly be directly, morally responsible (that is not to say that all cases of RR are moral cases). This paves the way for RfP, as a kind of RR, to be morally required of us. Exactly how voluntariness plays out in RR, however, is quite unclear.<<ref "13">> Darwall floods his paper with vague normative language. Darwall gives us a section on moral RR, and it seems as times that he is tempted to collapse the concept of RR into moral RR. Even if that isn’t the case, Darwall leaves behind odd breadcrumb statements about RR, such as, “any fact which is something that one ought to take into account in deliberation is an appropriate object.”<<ref "14">> I worry Darwall wishes to place an objective “ought” filter over what counts as a viable target for RR. Further, in trying to tailor RR as a voluntary kind of respect, Darwall often slips into his murky “appropriateness” language.<<ref "15">> In charity, I take Darwall to be using a shotgun approach to defining RR, and only some of the expressions of RR should really stick in the final analysis. Despite my reservations, I think Darwall is quite right to emphasize the moral possibilities of RR. The voluntariness built into the concept of RR categorically separates it from AR. 

Broadly, AR is a kind of attitude or judgment in which one holds an object in high regard without necessarily “having any particular conception of just what behavior from oneself would be required or made appropriate” by that object's “having the features meriting such respect.”<<ref "16">> AR doesn’t take features, facts, or characteristics of an object to be factors in deliberations concerning action; rather, an object is esteemed to some degree as a consequence of evaluating some set of its features against some standard of merit. For Darwall, the target of AR is the object rather than the features of the object.<<ref "17">> AR is an esteem or awe for an object judged to be excellent or judged to have excellent features. This esteem is subjectively considered by the respecter to be merited or deserved.<<ref "18">> For example, when I evaluate Nelson Mandela as a moral agent or person, I consider certain features/ facts about him in measuring his moral virtue, and the result is my esteem for him. Those facts don’t necessarily cause me to act in any particular way. I have AR for him when I simply judge him to be a person of moral merit, when I hold him in high regard or esteem because of how he measures against my subjective standard of what counts as being a good moral person.

AR seems to have a lot in common with the attitude or belief formation of doxastic involuntarism. This lack of voluntariness of AR distinguishes it from RR in a strong manner. It is not clear that AR is something for which one can be morally responsible. There is a possibility, however, that I am overstating the involuntariness of AR. For example, esteem might be understood differently, where I consider the hypothetical situation in which it was possible and morally permissible for me to choose between an object existing as P or Q, where all else being equal, P has more merit. I would choose for the object to exist as P. I worry that even appraisal has a kind of hypothetical action built into it. If this is correct, then perhaps the distinction between AR and RR is not as clear as I had hoped (I’m not sure).

While Darwall doesn’t phrase it this way, we can think of AR as an attitude or belief formed from evaluating to what degree a particular token satisfies what the agent subjectively takes to be the standard of the good of its type.<<ref "19">> Esteem for a token object requires the respecter to have in mind some kind of standard which she uses to evaluate the token object. Presumably the respecter employs what she believes is the standard of the good of the type of the token. An instance of AR consists in a judgment formed by evaluating a token against the perceived standard of the good of its type.  Like RR, AR has an object and some set of features of the object, and a standard; unlike RR, AR uses its standard against which to measure the merit of an object’s features, rather than weighing features, and this results in a judgment (rather than an action).<<ref "20">> 

Vexingly, Darwall posits an artificial limitation on the concept of AR: the “appropriate characteristics” to be evaluated in AR are “those which are, or are based on, features of a person which we attribute to his character.”<<ref "21">> He says AR is “a positive appraisal of a person or his character-related features.”<<ref "22">>  He claims the only viable targets of AR are persons, and the only viable features available for judgment are the moral characteristics of a person. He does not present a real argument for this limitation, although he does claim that AR “for a person assessed in a particular pursuit seems to depend on features of this character (or his excellence as a person) in at least two ways.”<<ref "23">>
 
First, Darwall considers a tennis player who “may be widely acclaimed as one of the best players in the world and not be widely respected by his fellows.”<<ref "24">> On his view, the tennis player’s moral character is a necessary component of being an excellent tennis player, and he won’t be judged as deserving AR if he is considered vicious. This fails to capture the everyday phenomenon of AR as we ordinarily experience it.

It seems to me that the tennis player is receiving AR as a tennis player given our standard of good of a tennis player, even if he doesn't receive AR as a person given our standard of good of a person. There are various ways in which we can have AR for a token object, and that is because an object can have many types, and we may employ a different standard of good for each type. We can view an object with different type-lenses, and we can employ different standards in evaluating an object. We can evaluate the object as a token of the type tennis player, or as a token of the type human, or as a token of the type person, or as a token of the type husband, etc. He might be a good a tennis player given the appropriate standard, he might even be a decent token human specimen, but then he might turn out to be an awful husband or terrible person.<<ref "25">>
 
Darwell further claims that “purely 'natural' capacities and behavior manifesting them are not appropriate objects of appraisal respect...even in the context of a fairly narrowly defined human pursuit.”<<ref "26">> This is just another way of saying that the scope of AR is persons and their non-natural moral characteristics. I don’t see why we should agree. He also says, “there may well be characteristics of human beings which are regarded as human excellences but which are not appropriate grounds for appraisal respect.”<<ref "27">> He doesn’t offer a real argument for it. Even if he wanted to claim that we should focus on AR for persons (which is an interesting idea), to the exclusion of human excellence not involved in non-natural moral character, or any other type of excellence, it is obvious that AR is conceptually capable of targeting and evaluating other non-person types of objects, non-moral characteristics, and natural capacities.

A few examples can easily demonstrate why AR is more conceptually capable than Darwall claims. When I stand before Goliath, his natural gargantuan size (perhaps as a soldier in close-combat) fills me with awe. Goliath’s size is a natural capacity, but I can still be filled with AR for him when regarding him as a naturally gigantic soldier. When I see a particular tree flourishing according to the standard of the good of its kind, I evaluate it and appraise it as an excellent tree – a tree of merit. It deserves the title I give it because it meets the requirements set out by the standard of the good of trees. Even Darwall’s bank heist example is best understood by considering that the virtue of the practice of bank robbing and a vicious enough standard of morals (to be willing to steal and commit violent acts) are the standards one would use to reach AR for a particular bank robber. It is still a case of AR, even if it is an odd one. We have evaluated someone with a morally bad character as a good robber, according to the standard of what makes a good bank robber. Darwall’s definition and ad hoc limitations are a mistake.<<ref "28">>
 
In his zeal to reveal how we can simultaneously fail to have RfP, a kind of RR, and succeed in having AR for the same person, Darwall has unnecessarily embedded moral notions into his definitions and bent his conceptual analysis. His goal is a good one, but he made a mistake in his analysis. We can arrive at this revelation without placing the ad hoc limits that Darwall adds, and indeed we shouldn’t agree to these limits. It is quite unclear why we should believe AR (or RR, if Darwall meant to go that far) is conceptually linked to morality, or moral character, or restricted only to persons as objects. 

We are forced to generalize Darwall’s definitions of the concepts of respect which he has over-specified and artificially limits. What is necessary and sufficient? What should we eliminate? What matches our intuitions and our experiences of these phenomena? The bare metal notions are compelling. Darwall started out with kernels of truth, but then he took us down a rabbit hole.<<ref "29">>

I think Darwall’s overall project is generally right, and he gives us a useful framework for appreciating the various ordinary language uses of respect. The real goal, of course, is to better understand RfP. That is the sort of respect that matters the most. The claim that RfP is a kind of RR and not AR seems right. Honestly, I have no idea how to further define RfP, other than to claim it is simply being moral. I have no idea how to separate being moral from respecting persons in any significant way. I think it boils down to talking about two sides of the same coin. Define and explicate being moral, and I think you’ve defined and explicated RfP.

------------------

<<footnotes "1" "Darwall, Stephen. 'Two Kinds Of Respect.' //Ethics// 88, no. 1 (1977): 36">>
<<footnotes "2" "Ibid., 38">>
<<footnotes "3" "Ibid.">>
<<footnotes "4" "Unfortunately, Darwall leaves gaps in his definitions and explanations which are too large. Charity requires us to build some technical bridges to achieve an adequate understanding of his concepts. In the spirit of charity, I feel reluctantly forced to put words in Darwall’s mouth to make clearer what he likely means (or should mean). I will try to be charitable in my exegesis, and ultimately, I will walk away with definitions which may be different than Darwall intended, but I believe these concepts are much more useful, and don’t carry the same baggage.">>
<<footnotes "5" "Ibid. ">>
<<footnotes "6" "Ibid. ">>
<<footnotes "7" "Ibid., 39">>
<<footnotes "8" "Darwall often ambiguously injects an objective notion of “appropriateness” into RR, and it blurs his analysis. What is this objective appropriateness? I will take “appropriate” to mean that the agent is rational in his weighing the facts against his subjective standard – that the agent makes the appropriate, rational inferences given the facts and subjective standard used in deliberation. I worry that Darwall is often tempted to inject an objective moral notion of appropriateness into RR, especially since he later adulterates his definition of AR with an artificial conceptual limitation based on morality. If he meant that, then it is a mistake, especially since several contradictions immediately arise in his examples. Take my paper as either giving him the benefit of the doubt of not making that mistake or attempting to salvage a viable analysis despite that mistake.">>
<<footnotes "9" "The breakdown I’ve given is an atomic instance of RR, which is what I believe Darwall is arguing for. Of course, in many cases, an agent weighs multiple features of multiple objects, and essentially, we might conceive of these cases of deliberation and action as really a molecular set of atomic instances of RR. The crucial aspect of an atomic instance of RR is that it targets a single feature. The atomic components of a molecular instance of RR share the same action and deliberation, but they do not share the same targets: one feature, one atomic instance of RR.">>
<<footnotes "10" "How do we select our targets for RR? Don't we need a reason for picking them out? Isn't targeting a fact for RR a kind of mental action which is the result of some subsequent instance of RR? I fear a regress.">>
<<footnotes "11" "Ibid., 40">>
<<footnotes "12" "For example, it is possible that there are many features/facts of the moral law which are viable targets of RR, even when they are not deciding factors. It is possible these features can and should weigh in all my deliberations (hence, no deliberation should ever be an atomic instance of RR), even in those deliberations where these features ultimately have no impact on or in no way constrain what I can or should choose. The features of moral law, after all, do not always restrict my action (sometimes the moral law does not obligate or restrict any available choice in a circumstance), but I might want to say they can (and should) be viable targets of RR. ">>
<<footnotes "13" "What choices are possible in the various instances of RR? Can we choose our standard(s)? Can we choose whether or not to rationally weigh or how we apply the standard? Can we choose to disregard the results of that weighing? Can we choose whether or not to take a feature of an object as a factor in our weighing? Can we choose the weight of that feature and/or the other facts? ">>
<<footnotes "14" "Ibid. 40">>
<<footnotes "15" "Sometimes his language of “appropriateness” seems to imply an objective moral standard, but I don’t think we have to take him that way. In our conceptual analysis, it seems obvious that a vicious person, like his crook example, can have RR using a vicious standard. The standard the crook employs is not objectively, morally appropriate at all.">>
<<footnotes "16" "Ibid., 39">>
<<footnotes "17" "No argument is given for this switch in target types. Careful examination may reveal that the real target of AR is still the feature of an object and not the object itself.">>
<<footnotes "18" "I find the locution, 'when we speak of someone as meriting or deserving our respect, it is appraisal respect that we have in mind' on pg 39 somewhat odd. I think people merit or deserve our respect in the recognition sense as well. We can untangle this by realizing that appraisal 'desert' is judged via a standard of the good, while the recognition 'desert' is required by the standard of the right (the moral law).">>
<<footnotes "19" "Note that in some cases the agent could be using the wrong standard. A vicious, irrational, or simply mistaken agent may employ subjective standards which do not correspond to objectively correct standards.">>
<<footnotes "20" "Darwall’s explanation of RR implies an atomic/molecular perspective, but his analysis of AR doesn’t suggest a similar atomic/molecular perspective. Whether or not the concept of AR is capable of admitting atomic/molecular instances is not obvious to me.">>
<<footnotes "21" "Ibid. ">>
<<footnotes "22" "Ibid., 41">>
<<footnotes "23" "Ibid.">>
<<footnotes "24" "Ibid.">>
<<footnotes "25" "Note that human eudaimonia, as a standard, is significantly broader than the standard of moral virtue. Human excellence includes more than the moral excellence of being a person. A starving saint may be an excellent person, but not an excellent human.">>
<<footnotes "26" "Ibid., 42">>
<<footnotes "27" "Ibid., 43">>
<<footnotes "28" "I worry that Darwall then goes on to try and make a similar mistake with RR. He says on pg. 45, 'Recognition respect for persons, then, is identical with recognition respect for the moral requirements that are placed on one by the existence of other persons.' We might take him to be talking about RfP, in which case he might be right. I want to point out that not all RR for persons is necessarily the same as RfP though. Why can’t RR for persons be based upon some standard of fear for the harm that other persons may cause us? RR for persons is broader than RfP. Hiding or killing other persons out of fear is a case of RR for persons. It just happens to be a case where the standard isn’t the moral law.">>
<<footnotes "29" "Admittedly, RR seems to be far simpler than Darwall implies. The crux of the concept of RR is just a weighing of facts and an action resulting from that deliberation. If I take a fact to be salient for deliberation or weighing concerning my action, then that fact is the target of my RR. RR seems to be that simple and that broad, although the mechanics underlying it may be complex.">>
In this paper, I analyze Derek Parfit’s position on whether or not the requirement to treat others never merely as a means is a sufficient criterion of moral permissibility.<<ref "1">> Parfit seems to employ his own definition of treating people merely as a means, and that heavily influences his discussion of Kant and permissibility.<<ref "2">> I worry his criticism of Kant is not as strong as he thinks, but I’m partial to the motivational component which Parfit embeds in treatment of persons as mere means.

Parfit begins by considering the Mere Means Principle (MMP1), which is the claim that treating anyone merely as a means is morally impermissible.<<ref "3">> Before he can dissect MMP1, Parfit must distinguish treating as means (TM) from treating merely as a means (TMM). Indeed, this is a key question: what does Parfit mean by TM and TMM?<<ref "4">> He starts with the notion of use. In the Scientists example, both are said to treat the animals as means. He explains, however, that the second scientist does not treat the animals as merely means because “her use of them is restricted by her concern for their well-being.”<<ref "5">> For Parfit here, TMM is an act/reason pair, where the way we regard an object is part of our motivation for acting in a particular way.<<ref "6">>
 
In analyzing the first rough definition of TM, Parfit distinguishes “doing something to someone as a means of achieving some aim” from “treating this person as a means.”<<ref "7">> I don’t understand this distinction. In the Broken-Rib example, I believe the intuitive claim should be that the doctor’s use of my body is TM, but not TMM, which is why it could be morally permissible.<<ref "8">> Parfit doesn’t think this is even a case of TM, although he provides little evidence for this claim.

Parfit moves on to providing a rough definition of TMM, a conjunction of TM and regarding someone’s well-being and moral claims as completely irrelevant.<<ref "9">> In responding to Kamm’s criticism and the example of the slave-owner who gives only the slightest weight to the well-being of his slaves (which is not strictly TMM), Parfit essentially claims that the rough definition of TMM is not wrong, but rather MMP1 isn’t effective enough. It seems as though Kamm and Parfit are looking for a bi-conditional criterion of impermissibility – roughly: TMM ↔ Wrong – which MMP1 isn’t fit for in the first place, since it only goes one direction.<<ref "10">> While he doesn’t phrase it this way, Parfit seems to be agreeing here that TMM (as he defines it) alone, is too weak an antecedent for the bi-conditional, which is why he spends so much time strengthening it in this chapter.<<ref "11">>
 
In order to wrestle with the wrongness found in the Slave-Owner example, and attempting to be charitable to Kant, Parfit expands MMP1 to MMP2, which adds a clause of coming close to TMM.<<ref "12">> The coming close clause increases the burden of motivation, where we are required to not only not totally disregard a “person’s well-being or moral claims,” but also to not give “too little weight” to them.<<ref "13">> MMP2’s form is roughly: (TMM ∨ ComeClose) → Wrong. Since the slave-owner comes close, this principle condemns his choice.<<ref "14">>

Parfit goes on to flesh out the semantics of ¬(TMM ∨ ComeClose), namely “we do not treat someone merely as means, nor are we even close” if (1) “our treatment of a person is governed or guided in sufficiently important ways by some relevant…direct concern for the well-being or moral claims of the person” or (2) employing a policy wherein we would “choose to bear some great burden for this person’s sake.”<<ref "15">> We can understand MMP2 as saying: ¬Wrong →  ¬((1) ∨ (2)), which, again, is only a one-directional criterion.

The slave-owner who never whips his slaves because he believes it would wrongly give him sadistic pleasure isn’t properly motivated, and thus might still be accused of TMM according to (1).<<ref "16">> In examining the Scientists again, Parfit temporarily assumes that “cruelty to animals is wrong because it dulls our sympathy.”<<ref "17">> He goes on to claim that if this were the sole motivation of the second scientist, she would be guilty of TMM according to (1) because she wasn’t relevantly worried about their well-being.<<ref "18">> He also limits the coming close clause with the Chinese Bandits example, wherein he is inclined to believe bandits did not even come close to treating his mother as a mere means by robbing her of only half her belongings.<<ref "19">> I find this odd, since to my eyes, they obviously gave too little weight to her well-being or moral claims.<<ref "20">>
 
Here we see that, for Parfit, TM is clearly about an act (whatever reason there is for the act doesn’t really matter), when he claims that “whether we are treating someone as a means depends only on what we are intentionally doing.”<<ref "21">> Conversely, TMM depends on our “underlying attitudes or policies,” particularly regarding counterfactuals of “what we would have done, if the facts had been different.”<<ref "22">> The focus of TMM is not the act, but the reason or policy for that act. TMM is TM with the wrong motivation or policy. 

Parfit claims that Kant implies that “it is wrong to regard any rational or sentient being as a mere tool,” which assumes that motivation is an object of permissibility, and Parfit agrees to this claim.<<ref "23">> I’m not sure if that is an accurate portrayal of Kant, but it makes sense that Parfit would agree because his definitions of TMM revolve around reasons to act, but not so much the acts themselves (just as long as the acts are cases of TM). Kant, according to Parfit, implies TMM is necessarily a case of “acting wrongly.”<<ref "24">> This is likely the heart of the disagreement. He seems to be arguing that he and Kant and have different definitions of TMM; for Kant, TMM is a wrong act, and for Parfit, TMM is a wrong motivation. 

Admittedly, it is odd that Parfit at the same time believes Kant takes motivations to be an object of permissibility, but also that TMM is necessarily and conceptually linked to wrong acts. In particular, since Kant seems to agree to the bi-conditional, TMM ↔ Wrong, and since for him TMM is a wrong act, then all cases of impermissibility boil down to wrong acts. But if that is true, then why should Parfit think that Kant would agree to motivations as being objects of permissibility?  

Parfit shows there are choices which are morally wrong, even cases of TMM, which don’t rely upon a wrong act, but rather a wrong motivation. The Gangster who takes up a policy of treating a coffee seller as a vending machine, as a mere means, as someone whom he doesn’t kill only because it is easier to acquire coffee the usual way, is said to be wrong solely because of “his attitude to this person,” but “he does not act wrongly.”<<ref "25">> Similarly, the Egoist who saves a drowning child motivated solely by reward, hasn’t acted wrongly, but has simply had the wrong motivation.<<ref "26">> These examples also cry out to my intuitions as cases of TMM, and what makes these choices wrong are the motivations, not the acts. If Parfit reads Kant correctly, then I think Kant is wrong about the requirements of TMM, since I would disagree with him about the objects of permissibility.

To save Kant from the Gangster and Egoist examples demonstrating TMM without acting wrongly, Parfit tentatively adds (3) to (1) and (2), where TMM is not the case when we know “our acts will not harm this person.”<<ref "27">> By using (3), the Gangster and Egoist, who know their acts will not harm, are not to be accused of TMM. The motivational component of TMM still matters, but it is simply honed (in an arguably ad hoc manner). Even (3) does not save Kant, according to Parfit. The Mutual Benefit example, where Green marries Gold instead of murdering him because marriage is the easiest way to get some of Gold’s wealth, would not be condemned by (3).<<ref "28">> Parfit still thinks this is a case of TMM. Unlike Parfit, I don’t quite see a relevant difference between the Gangster/Egoist examples and the Mutual Benefit example. 

Speaking of Green, Parfit says “we should not claim that these acts are wrong,” but rather “given this man’s self-interested motives, his acts do not have what Kant calls moral worth.”<<ref "29">> Again, I take Parfit to be arguing that Green’s motivation is morally impermissible (this explains the wrongness), while his act, in itself, remains permissible.<<ref "30">>
In an effort to help Kant not condemn the acts of the previous examples, Parfit expands MMP2 to MMP3. MMP3 conjoins an “if our act will also be likely to harm this person” clause with the antecedent of MMP2.<<ref "31">> MMP3 is of the form: (LikelyHarm ∧ (TMM ∨ ComeClose)) → Wrong. At this point, Parfit, by his own admission, is entertaining too strong an antecedent for determining if never treating persons merely as a means is a sufficient criterion of moral permissibility or worth.<<ref "32">>
 
By his own definition of TMM, Parfit has clearly shown examples where someone has done wrong but wasn’t strictly treating anyone merely as a means.<<ref "33">> Essentially, Parfit believes moral impermissibility is not sufficient for TMM, i.e. ¬(Wrong → TMM). Equivalently, we can say that Parfit believes that not treating anyone merely as a means is not sufficient for moral permissibility, i.e. ¬(¬TMM → ¬Wrong).<<ref "34">> 

Unfortunately, I fear something unintentionally underhanded has occurred in the way Parfit has deployed his own definition of TMM against Kant. I can’t quite put my finger on it though. Parfit spends a lot of time on his own definitions of TMM. Does Parfit give Kant’s definition of TMM a fair shake? That remains unclear to me. I strongly agree with Parfit, however, on the claim that “it is wrong to regard anyone merely as a means.”<<ref "35">> 

It is clear we don’t have a choice over what acts are available to us. Most of us, however, would be willing to buy the claim that we choose how to act from the set of acts available to us. Much of moral philosophy surrounds the question of how persons ought to act, and rightly so, since we have a choice in the matter. Further, it is unclear if we have a choice over what motivations are available to us (arguably, we don’t). Even if we don’t, however, it seems as though we also have a choice over what motivates our acts. Is there an ought for motivation? I assume so. 

To be clear, when I claim one ought to be motivated to act in a certain way, I’m claiming that it is morally impermissible not to be motivated to act in that way. That’s just what ought means. To say one ought to act from duty is to say it is morally impermissible not to act from duty. We might take Kant as claiming that moral permissibility is acting in conformity with the moral law, while moral worth requires not only our act to conform to the moral law, but also to be correctly motivated by the moral law to act in that way. Moral permissibility, on this view, only makes demands on how one ought to act, while moral worth makes demands both on how one ought to act and be motivated. If that is an accurate portrayal of Kant’s position, then I believe Kant’s notion of moral permissibility is incomplete. Moral worth normatively extends Kant’s moral permissibility. What we really ought to choose isn’t simply an act, but rather both the right act and the right reason for it. On my view, the conditions of moral worth are the conditions of real moral permissibility. Essentially, the moral law governs choices of acts and motivations.

Moral permissibility is about choosing the right kind of act/reason pair. Some act/reason pairs might be wrong regardless of one’s reason (e.g. destroying the universe with a doomsday device). Conversely, any act/reason pair with an act not done for the right reason is impermissible. There are multiple ways for a particular act/reason pair to be morally impermissible, and that appears to be the heart of Parfit’s disagreement with Kant on the topic of mere means.

If I use Parfit’s definition of TMM, then I’m convinced that it isn’t a sufficient criterion of moral permissibility. What I like about his definition is that it captures the permissibility of motivation. It isn’t clear to me that Parfit’s definition is the right one, though. Surely there is more to treating people as a means than he has suggested. 

-------------------------

<<footnotes "1" "Parfit, D., & Scheffler, S. (2011). //On what matters: Volume one//. Oxford: Oxford University Press: 212-232">>
<<footnotes "2" "Parfit slow-rolls his audience with a detailed examination of a staggering sequence of principles and cases. He engages in a hypothetical dialectic with Kant, where he takes up what he believes is the Kantian position, then he shows a flaw, then he tries to improve the Kantian position, then shows a flaw, and rinse and repeat. I cannot do justice to all the details in this chapter. Getting at Parfit’s ultimate argument is not simple; charitably interpreting his argument-style requires meticulous parsing. There are a thousand moving parts in his argument, and it is difficult to hold them all.">>
<<footnotes "3" "Ibid., 212. ">>
<<footnotes "4" "He does not clearly define these terms from the outset. We must slowly piece together what he thinks. Oddly, he doesn’t much discuss Kant’s definitions.">>
<<footnotes "5" "Ibid.">>
<<footnotes "6" "Parfit seems to be implying that TM has to be a kind of act, while the reason for the act remains irrelevant. We should note that Parfit sometimes uses the word treat to mean more than simply act, particularly in the case of TMM.">>
<<footnotes "7" "Ibid., 213">>
<<footnotes "8" "Ibid.">>
<<footnotes "9" "Ibid.">>
<<footnotes "10" "Conversely, a bi-conditional criterion of permissibility would roughly be ¬TMM ↔ ¬Wrong. Unfortunately, MMP1 is only TMM → Wrong.">>
<<footnotes "11" "Oddly, however, this is not how he designs the principles, despite his argument moving in that direction in many cases. I regret that I may not fully understand the method to Parfit’s madness (or genius).">>
<<footnotes "12" "Ibid., 214. Parfit is strengthening the antecedent so that it captures more cases, and so that it may serve as the antecedent of the bi-conditional.">>
<<footnotes "13" "Ibid.">>
<<footnotes "14" "He says, on 214, 'condemns this man’s acts.' I read Parfit as taking MMP2 to condemn the motivation and not simply the act. The reason MMP2 can nail the slave-owner while MMP1 can’t is ultimately due to the slave-owner choosing the wrong motivation or policy from which the act springs. The reason MMP2 succeeds in condemning the slave-owner where MMP1 fails is a result of strengthening the motivational requirements.">>
<<footnotes "15" "Ibid. Condition (1) seems to be the real issue at stake.">>
<<footnotes "16" "Ibid.">>
<<footnotes "17" "Ibid.">>
<<footnotes "18" "Ibid., 214-215">>
<<footnotes "19" "Ibid., 215">>
<<footnotes "20" "It is sometimes difficult to draw the line, to know precisely when (1) is satisfied or not. For my intuition, this case so clearly crosses the line that I worry I’ve misunderstood Parfit’s point.">>
<<footnotes "21" "Ibid. There is a reason for the act, since that is part of the definition of an intentional act, but it doesn’t matter what the reason is.">>
<<footnotes "22" "Ibid.">>
<<footnotes "23" "Ibid.">>
<<footnotes "24" "Ibid., 216">>
<<footnotes "25" "Ibid.">>
<<footnotes "26" "Ibid.">>
<<footnotes "27" "Ibid., 217">>
<<footnotes "28" "Ibid.">>
<<footnotes "29" "Ibid.">>
<<footnotes "30" "I’m not convinced this is the best way to think about moral permissibility, but it seems to be the way Parfit rolls.">>
<<footnotes "31" "Ibid.">>
<<footnotes "32" "Ibid. I only have so much room in this paper. I have to find a stopping place. There are more moves going on later in this chapter, but they aren’t absolutely necessary to answering the question (or if they are, I certainly don’t have space to show it).">>
<<footnotes "33" "Ibid. 232">>
<<footnotes "34" "Whether or not TMM is a necessary condition of moral permissibility is another matter. ">>
<<footnotes "35" "Ibid.">>
Christine Korsgaard believes we owe respect to certain animals.<<ref "1">> She argues that we share in common with certain animals the morally significant attribute of the awareness of things being good or bad for us, and that when we employ her interpretation of Kantian ethics, this fact results in obligations towards certain animals. The problem I have with her argument is that she has several under-argued or perhaps even unjustified premises. She helps herself to a rich foundation and walks away with a significant claim concerning an obligation to non-persons; however, her argument style only works if you already agreed to her foundation. 

Korsgaard begins by explaining how humans share a history, a story, a context, and certain mental states with other animals.<<ref "2">> Both humans and other animals tend to have some similar needs, experiences, and purposes. Korsgaard channels an Aristotelian teleological account of the good for each species, and perhaps even for each individual specimen.<<ref "3">> Alongside humans, she attributes to a seemingly broad swathe of non-human animals the capacity to experience the world as good or bad for themselves.<<ref "4">> This common experience is vital to her end argument, and she considers it to be a morally significant factor or attribute in determining our duties to other organisms. 

For her, awareness (a term she employs broadly) is something like being conscious of or alert to one’s telos and the conditions of flourishing specific to oneself – what she calls the “natural good.”<<ref "5">> Awareness requires that an organism must have a teleological perspective of the world, where aware organisms experience things as being good or bad for themselves.<<ref "6">>  What she means by the “for” is not entirely clear, and that is unfortunate, because it is such an important condition in her argument.<<ref "7">> Ultimately, it seems as though she believes we have obligations towards other aware animals because we as humans share with them the experience of things being good or bad for us – i.e. they have rights because we all share the phenomenon of possessing a teleological perspective. 

While channeling Aristotle, Korsgaard seems to be either building on top of or offering a new interpretation of Kant’s arguments (or both). In this paper, she passes off  much of the justificatory work in her argument to her previous interpretations of Kant’s account, and this makes it difficult to see why we should be convinced by the argument she leaves us. She sees herself as explaining why Kant’s theory of reciprocal moral relationships between rational humans bears the fruit of our obligations towards (and corresponding rights for) other aware animals.<<ref "8">>

Korsgaard seems to agree to Kant’s differentiation between humans and other animals.<<ref "9">> Unlike the other animals, humans have freedom and reason, and hence we are moral creatures with the ability to legislate moral law.<<ref "10">> Humans can be morally obligated, but the other animals can’t. She parts with Kant, however, on what kinds of objects or beings can be the target of obligations. Unlike Kant, Korsgaard believes non-rational, non-moral beings can be rights-bearers, even if they can’t claim those rights or reciprocate. She claims that participating in this reciprocating community, which only free and reasonable beings can, is not the only way in which one can be owed obligations.<<ref "11">>
 
The reciprocity theory claims morality is “a system in which human beings mutually impose obligations on each other,”<<ref "12">> where  “for one person to make a claim on another, they must be under common laws that spring from their own shared authority: laws that they make—that they autonomously will—together.”<<ref "13">>
 
Korsgaard fleshes this theory out further with the notion of conferring value. She claims, “When we take our own concerns to be important and worth doing something about, we take ourselves to be capable of conferring objective value on our ends through rational choice.”<<ref "14">> On Korsgaard’s interpretation of Kant, valuing is “an act of legislation: you make it a law for yourself and everyone else that what is naturally good for you should be taken to be objectively good,” whereby “you make it a law that every other person must regard it as a good end—and so as a source of reasons—that you should achieve what is naturally good for you.”<<ref "15">> She takes the valuing of our own natural goods to be embedded in this reciprocity theory. She claims that since “we need to have reasons for what we do… we find those reasons in the things that are naturally good for us,”<<ref "16">> and we “treat what is naturally good for us as normatively and objectively good.”<<ref "17">> She explains that, “just by the act of making a rational choice, you confer normative value not only on the end that you choose, but also on yourself.”<<ref "18">> This is part of the crucial move in her argument, since she distinguishes the participants from the targets in the reciprocity process. Korsgaard argues that each human has two selves; one of our selves confers value on the other.

Korsgaard claims that the autonomous self confers value on the aware-animal self, the self for which things are naturally good.<<ref "19">> It seems as though there is a two-way (perhaps circular) relationship between each of our dual selves, whereby the natural good perceived by our aware-animals selves is a source of reasons to our autonomous selves to act and be obligated in certain ways, and in the other direction, our autonomous selves confer value on what is naturally good for our aware-animal selves. Further, by conferring value on the natural good for our aware-animal selves, Korsgaard believes we confer value on our aware-animals selves.

In subjectively conferring value on and respecting both what we perceive to be our natural goods and our aware-animal selves, we legislate that all creatures which have this kind of self and what they perceive to be their natural goods are objectively valuable and worthy of respect for the reciprocating community. Since the other aware animals are beings for whom there is a natural good, like us as humans, and since “our legislation is universal,” then “it follows that we will that all animals are to be treated as ends in themselves.”<<ref "20">> The community of autonomous selves together legislate obligations to the selves of all aware-animals. Therefore, Korsgaard believes we are obligated not only to aware humans, but to all aware animals.<<ref "21">>

The general problem with Korsgaard’s argument is that she assumes and relies upon a foundation of fairly unintuitive premises which require a significant amount of explanation and justification. First, Korsgaard assumes a schizophrenic view of our identity. Why should we agree that we have multiple selves? It is far more intuitive to think of my self has having multiple parts rather than me being a collection of multiple selves.  Does it hurt her argument to deny multiple selves? Maybe. Her argument looks artificially purer if she can pull apart our rational self from our animal self, since then she has a clean and easy target on which to confer value, and then analogize to the monolithic selves of the other animals. To deny multiple selves, and to accept that our single, whole selves are made up of many parts, may muddle her argument. If I value some part of my self, that doesn’t necessarily mean I should value any object which has such a part. She needs to explain and justify this issue further for her overall argument to work.

Secondly, she seems to ignore what human natural good is really like, and perhaps she has assumed a different understanding of the human good (but didn’t explain it). Part of our evolutionary story is that we: eat the meat of animals, defend ourselves against and attack other aware animals, and use other creatures as mere means. That may be part of our natural good of humans. To respect my own natural good may require engaging in behavior that prevents me from respecting the other animals in the ways Korsgaard implies. Perhaps very wealthy, modern humans can personally get by without such things, but most humans through history haven’t and can’t. Part of the telos of humans is using other animals – we have strong evidence to believe so from biology and history. Our natural good is in conflict with the natural good of other animals, and Korsgaard needs to explain how this works in her theory.

Thirdly, why is awareness or having a perspective of one’s telos or natural good morally significant and something to be valued in the way Korsgaard describes? Note there is a difference between having a perspective of what is good for you, and having an objectively accurate perspective. An organism could be deeply irrational, having an extremely inaccurate awareness of its natural good or telos, and yet would still qualify.

Accurate awareness seems useful and interesting, but insufficient for generating strong obligations beyond not causing pain for trivial reasons. I can see some intuitive force behind obligations being generated from the fact that an organism has a natural good, but I don’t see why the appended condition of awareness matters so much. It is the natural good which has the real force behind it, not awareness. Korsgaard has under-argued a foundational premise to her theory. 

I worry that Korsgaard has unintentionally added this awareness condition because her argument would border on the absurd if she didn’t. Namely, if we remove the awareness condition, and we simply value that we are the sorts of objects that have a natural good or telos, regardless of awareness, then when we universalize that move, her argument would require that we value all objects which have a natural good or telos. It would result in having obligations to lower animals, plants (which she doesn’t find plausible), and if we follow Aristotelian reasoning, even inanimate objects like chairs, hammers, and houses (which few, if any, would find plausible).

Even if she could explain why we should take into consideration how awareness increases our obligations to certain beings, it isn’t clear that it buys all that much. I reckon the best reason for thinking awareness is a morally significant attribute rests upon consequentialist grounds, but Korsgaard seems to boldly reject that move. She needs to explain why employing an experience machine (like The Matrix) or heavy anesthetics on animals we want to kill or use is a moral problem. She takes herself as having done this, but there isn’t an argument for it. We might make an argument that such processes impede our moral life (which could be morally wrong), but it doesn’t seem as though there is a moral life for animals. The condition of awareness may not be sufficient for obligating us to not use animals, by and large. 

Lastly, just because we take or assume or wish something to be objectively good, right, or valuable doesn’t make it objectively good, right, or valuable. Perhaps she is relying upon previous arguments of her interpretation of Kant to make that move, but I see no reason to think she is allowed to help herself to that claim. Now, we can sneak through the back door and claim that if the authentic self just is conceptually defined as a special flavor of reason (which is what I call begging the question), then what the authenticated “we” take to be objectively good or right just so happens to be objectively good or right by definition. However, you have to take on faith that we have that reason, that we are constituted that way, that what we take ourselves to really be is like that. That is not satisfactory. People who already agree with the groundwork she takes for granted may be convinced by the rest of her argument. The question, for me at least, is whether or not that groundwork and the rest of her under-argued premises are actually correct.

As to my own views, I’m not sure I can offer much. I think we are first and foremost obligated to the moral law (whatever that moral law may be). All claims on us trace their origins to the moral law. It is the fundamental source of normativity; it is the source of all other obligations. Even our obligations to other people are derivatives of our original obligation to the moral law. I also think that if there is a moral law, then it is conceptually independent of the existence of people. The same is true of any obligations we have to other animals. It is our job to figure out the contents of the moral law. Do we have obligations to the other animals? 

Probably. I don’t know what they are. Virtue theoretic accounts of “what kind of person should I be” may offer the most coherent requirements. “Don’t be cruel” entails “don’t be cruel to animals.” Beyond that, I just don’t know. My inabilities in this regard cause me great sympathy for what Korsgaard is trying to accomplish. I want to have solid reasons not to eat my cat or Korsgaard’s, and so does she. Unfortunately, I think neither of us can put forth a solid theory of why we are obligated to abstain from such behavior.

-------------------------------

<<footnotes "1" "Korsgaard, Christine M. 'Interacting with Animals: A Kantian Account.' //The Oxford Handbook of Animal Ethics. //Uncorrected Proof. Oxford: Oxford UP, 2011.">>
<<footnotes "2" "Ibid., 91">>
<<footnotes "3" "Ibid., 111-112, Footnote 4">>
<<footnotes "4" "Ibid., 92. Throughout the paper, I fear Korsgaard continuously anthropomorphizes a broad swathe of non-human animals without enough justification or subtlety. She may be exaggerating the analogy of the phenomenon of our human conscious experience with the minds of non-human animals. Much of her argument rests upon theories of mind which she neglected to flesh out for us.">>
<<footnotes "5" "Ibid., 92">>
<<footnotes "6" "Ibid.">>
<<footnotes "7" "It would be helpful for her to clarify this position, and to make clear for us exactly what theory of mind is necessary for awareness. I feel uncomfortably forced to guess.">>
<<footnotes "8" "We will get to this theory in a bit.">>
<<footnotes "9" "Although, at least in this paper, she seems open to the possibility that the traditional highest animals might possibly have freedom. I don’t read her, however, as suggesting this.">>
<<footnotes "10" "Ibid., 106-107">>
<<footnotes "11" "Ibid., 107">>
<<footnotes "12" "Ibid., 104">>
<<footnotes "13" "Ibid., 105">>
<<footnotes "14" "Ibid., 106">>
<<footnotes "15" "Ibid.">>
<<footnotes "16" "Ibid., 108">>
<<footnotes "17" "Ibid.">>
<<footnotes "18" "Ibid.">>
<<footnotes "19" "Ibid.">>
<<footnotes "20" "Ibid., 109">>
<<footnotes "21" "While Korsgaard argues we owe something to all aware animals, it isn’t clear what she thinks we do owe to them. The precise requirements or contents of these obligations remain unclear, but presumably they regard protecting and enabling the flourishing of aware animals. Admittedly, I can’t expect Korsgaard to solve everything. I’d be satisfied with just a middle-ground framework for beginning to think about animal rights, which seems to be what she attempts in this paper. At the very least, Korsgaard is arguing against the killing for eating of aware animals.">>
<<footnotes "22" "">>
Intellectual property (IP) rights are an increasingly vital area of philosophical inquiry in a global society dependent on information and intellectual labor. This paper investigates the challenges faced by a quasi-Lockean IP theory used to determine, explain, and justify moral, private IP rights. The status quo of legal IP rights, or something quite like it, is sometimes defended on quasi-Lockean moral grounds. This paper describes significant challenges for such an account, and provides reasons to think the status quo of IP rights, or similar states of affairs, may not be justified on Lockean grounds. 

I begin this paper by providing context and laying some groundwork to show where this extended IP theory is positioned in a general landscape of property concepts and theories. We will consider the basic and foundational quasi-Lockean theory for physical property and examine the standard Lockean IP extension built on top of that foundation. From there, I will offer a series of objections to this extension. In particular, I disagree with Lockean IP theorists about the targets of IP rights, the need for a property theory regarding non-rivalrous objects, the coherence and viability of rules and mechanics for IP acquisition, and the soundness of domain selection for IP rights. The standard quasi-Lockean IP theory may lack the explanatory qualities we should require for agreeing to the limitations on our freedom that it would impose. Ultimately, I advocate a non-interference right rather than private IP rights. In considering an alternative view, I will explore the possibility that discussions of IP have been too narrow and offer possible exceptions to this right of non-interference.

''Groundwork Property Concepts and Narrowing Our Focus''

IP is a hotly contested topic in philosophy, law, political science, library science, and perhaps other disciplines as well. Generally, the topic of IP is approached as a set of legal rights resulting from laws constructed by a legal system. Naturally, philosophical discussions of IP tend to revolve around political philosophy more so than ordinary moral philosophy. Granted, even in these discussions, IP laws are often justified on moral grounds. The normative force of an IP right generated by positive laws, however, isn’t necessarily based solely on moral grounds. Further, the construction of positive laws may often require certain kinds of pragmatic sacrifices which moral laws need not make. Depending on how we approach these issues, positive and moral laws can differ widely in many respects, and IP is no exception. 

This paper will focus on a modern quasi-Lockean framework for moral IP rights employed to justify and maintain the status quo of legal IP rights (or something similar) found in many Anglo-American nations.<<ref "1">> Before we dive in, we need to lay a basic groundwork. The topic of property is plagued with problems of definitions and challenging conceptual analysis, and we should briefly consider what we mean by property right. 

Generally, a property right is a bundled set of rights for some set of people concerning the access, use, or control of some set of objects. The origins of these rights are usually a set of rules (positive laws, moral laws, etc.). These rules bind a certain society or population. Property rules generate property claim rights for some set of people and corresponding obligations toward the rights-holder(s) regarding that property for another set of people. There are different classes of property rules and rights, including private, common, and collective. We will focus on private property.

Private property rights are often what we have in mind when we think of property rights. Broadly, some private entity (an individual or corporation) has some set of rights to access, use, or control some set of objects. The bundles of control, access, and use rights tend to clump together with a similar scope for private property rights. To a very significant extent, the control over private property belongs to the private property rights-holders.<<ref "2">> Of course, private property rights don’t necessarily have to include absolute control over some set of objects.<<ref "3">> 

Legions of philosophical perspectives surround the theory and practice of property rules and rights. The view I will dissect in this paper aims at moral, private IP rules and rights. This narrows the discussion considerably, since much of the literature on property focuses either on a legal realm or on traditional objects of property rights (e.g. land and other strictly physical objects). In this paper, we will see a tension between proponents of private IP rights and what I believe is the more intuitive and defensible position: a non-interference right which enables us to use our minds as we see fit.<<ref "4">>

There are different kinds of philosophical accounts and justifications for the lineage and development of moral, private IP rules and rights. Outside of Hegelian accounts, we generally hear two kinds of arguments today in favor of moral IP rights: utilitarian arguments concerning incentives and quasi-Lockean stories involving entitlement to the fruits of intellectual labor. 

As we shall see, Lockean IP theorists need a convincing story which explains the metaphysical and physical relationships between objects and owners. In contrast, utilitarians don’t necessarily need to provide that sort of story. Utilitarianism can demand national holidays for Cthulhu or require other ostensibly bogus obligations or rules, and that would be fine if it maximized utility. Utilitarians need to tell us a potent epistemic story. Lockean theorists, however, need to present us with a potent ontic story.<<ref "5">> Many of us may already buy the Lockean ontic story for the usual sorts of private physical property, but it is unclear whether a clean, relevant, and comprehensive ontic story can be told for intellectual property.

We will focus on a modern, quasi-Lockean perspective.6 The basic quasi-Lockean story for private physical property seems to have the ring of truth to it for most people. At least for physical objects, this account sketches a genealogical distribution and justificatory story which many of us take for granted. That foundational story, on which the IP story is built or extended, goes approximately like this:

Objects generally start out as being unowned, with the exception that we own ourselves to some significant extent. We have a basis for thinking that objects (since we are objects) can be owned. Further, we have practical reasons and needs for the use of resources and objects. Many objects are finite, and we assume there must be moral rules which govern how these unowned objects are appropriated and/or distributed.<<ref "7">> 

Barring some set of conditions, when someone becomes the first to occupy or fittingly mix his labor with some unowned object, many of us have the intuition that he appropriates that object.<<ref "8">> Roughly, he appropriates this object because he owns himself and his labor, and therefore he is entitled to the suitable fruits of his labor. In particular, his entitlement to the fruits of his labor only applies to labor upon objects he already owned, or unowned objects.<<ref "9">> Somehow, his labor imbues an object, perhaps becomes part of that object, and since he owns his labor, he appropriates the object. Exactly how this plays out is not clear. There could be many ways to explain this particular part of the story.

What we have here, then, is some set of some set of moral rules which we believe generate some set of private property rights for him with regards to the object he appropriates. Unless there are some intervening reasons or moral obligations, he will have a bundle of moral, private property rights to that object. Applying this process over and over, and in conjunction with the valid transfer of acquired properties (consensual trading, selling, giving, bequeathing, etc.), we see the skeleton of a broad genealogical picture of moral, private property rights and a basic justification.

There are many objections one might raise to this Lockean story, particularly regarding labor mixing. The notion of imbuing unowned objects might sound mystical to certain folks. Further, it isn’t clear precisely what rights resulting from mixing one’s labor ought to be included in the overall bundle. However, I’m not trying to debate the merits of this foundational, unextended quasi-Lockean perspective for physical objects. Many people at least see some merit in the notion that we own the fruits of our labor to a large extent. There seems to be a common sense notion that when you chop down an unowned tree and build a chair from it, you own that chair. Let’s assume the story works.

The quasi-Lockean IP theorist claims we can extend this basic theory for physical objects to intellectual objects. Can and should this story be extended to include intellectual property? Intellectual labor is a kind of labor, after all. At the very least, you surely own your thoughts, which is a kind of fruit of your intellectual labor. What other possible products of intellectual labor are you justified in morally, privately owning?

''Extending the Physical Property Framework for Intellectual Objects and Labor''

As far as I can tell, there isn’t a thorough, well-articulated, soup-to-nuts account of the IP extension of the Lockean physical property theory. What I have found is a loose collection of generally agreed upon assumptions and claims surrounding a sketch of an extended ontic story.<<ref "10">> It seems many IP theorists take such an account for granted and work from these assumptions; they are more likely interested in broader issues and questions which arise from or before such an account rather than the mechanics and internals of the account itself. That’s fair, though, since we have to start somewhere in the dialectic. What follows is my attempt to charitably construct an outline of this standard account. I will eventually argue that when we take a closer look under the hood, such an account is unintuitive and lacking in explanatory power, but I want to do my best to present their case.

For the standard Lockean IP extension, a litany of activities is thought to fall under the umbrella of intellectual labor, including inventing, innovating, writing, recording, systematizing, creating, and discovering. What are the fruits of intellectual labor? Beyond our mere thoughts and the physical objects we create, the standard answer is some sort of abstract idea, a metaphysical object or entity, often referred to as an intellectual object. 

We are forced to ask, then, what is an intellectual object? This is a tricky question, and the standard approach generally tries to evade talking about the critical metaphysics underpinning an answer. We seem to assume some robust sort of metaphysics in asserting the existence of these intellectual objects, although it doesn’t have to extend all the way to an extreme framework like Platonism.<<ref "11">> The answer to this question is not clear, and that’s okay. It may be difficult to defend a robust, systematic position in metaphysics (especially if you focus on ethics and political philosophy). The standard approach jumps ahead and answers a different question: What objects are the IP rights targeting? If we can answer this question, perhaps we can begin to clarify the fruits of our intellectual labor.

There seem to be two paths one could take. One path, the intellectual object thesis, is the claim that an IP rights-holder has a bundle of property rights targeting the intellectual object which has been created or discovered. This path entails the possibility that metaphysical entities or artifacts can be owned; they are themselves the targets of IP rights. The other path, the manifestations thesis, is the claim that an IP rights-holder has a bundle of rights concerning the use and distribution of humanly-made physical manifestations or expressions of an intellectual object. On this view, IP rights target the physical instantiations of intellectual objects, not the intellectual objects themselves. 

If the Lockean IP extension is built on the intellectual object thesis, it has a targeting mechanism quite similar to the underlying physical theory. Essentially, the fruits of intellectual labor are intellectual objects, and those objects are the targets of IP rights. The initial difference between this version of the extension and the underlying account can be found in what type of objects are targeted by the property rights. Directly owning metaphysical entities, like intellectual objects, is a significant departure from the physical theory. The targeting principles of this extended theory seem to parallel the unextended account, but the ontic story may be a bit different and more complicated because the type of object targeted is so dissimilar.

If, on the other hand, the IP extension is built on the manifestation thesis, it does not depart from the unextended account in terms of the type of object targeted by property rights. Property rights from both this extension and the underlying theory exclusively target physical objects. The manifestation thesis based extension radically departs from the unextended theory in the targeting mechanism. 

For unextended physical property rights, the object with which you mix your labor is what you directly own. According to an extension built on the manifestation thesis, however, you don’t own what you’ve created or discovered precisely, which in part is thought to be the intellectual object; rather, you have property rights to the corresponding humanly-made physical manifestations of that intellectual object.<<ref "12">> As Adam Moore explains it:

Rights do not surround the abstract non-physical entity, or res, of intellectual property; rather, intellectual property rights surround the control of physical manifestations or expressions… Intellectual property rights are rights that surround control of the physical manifestations or tokens of ideas.<<ref "13">>

This shift in targets may not be without reason. First, dealing with physical manifestations has far less mystique about it. This shift in targets grounds the discussion for folks who want as little do with metaphysics as possible. Secondly, when it comes to enforcement (which isn’t necessarily something a moral theory has to be concerned with), it may be more practical to target the physical instantiations. Lastly, some people might be persuaded by this case: if an intellectual object were directly owned by someone else, then I might be violating his rights simply by thinking about that object. This would be intolerable to many of our intuitions, and might lead someone to say the intellectual object isn’t directly owned, but rather the physical objects corresponding to it are the targets of IP rights.<<ref "14">> 

What it means to create a physical manifestation of an intellectual object can be non-obvious. Here is a fairly straightforward example: when you compose your own piece of music, you have created or discovered some intellectual object specifying a series of sound waves. The abstract specification or configuration of sounds waves is the intellectual object you’ve created or discovered.<<ref "15">> The corresponding .wav file on your hard drive is a physical expression of that intellectual object. If I were to code, record, compose, or copy that precise series of sound waves onto a CD, I would have created a physical manifestation of the intellectual object you labored to create or discover.

Given the extension built using the intellectual object thesis, you own the intellectual object directly. That specification of sound waves is yours. I’ve violated your IP rights by not getting your consent to use your intellectual object. On the extension built on the manifestations thesis, however, you own the physical manifestations, including the CD I burned. Presumably, if you had IP rights surrounding the physical manifestations of that intellectual object, then I’ve trampled on them. 

What if I created an adjusted manifestation, whereby I changed just a tiny bit of one of the sound waves? Overwhelmingly, and regardless of which thesis is selected for the extension, IP theorists believe I’m still violating your rights. My adjusted manifestation is considered a derivative of your work. That my manifestation was similar enough to your manifestation or the corresponding intellectual object is sufficient for claiming I’ve violated your IP rights. 

We can flesh out this view in at least two ways. It is possible that when you create or discover an intellectual object, you’ve really created or discovered a family of them which are sufficiently similar. Every manifestation would then directly correspond to some mirror-image intellectual object. The intellectual object thesis might lean in this direction. Another possibility is that you’ve only created or discovered a single intellectual object, but there are families of manifestations similar enough to the original, mirror-image manifestation.<<ref "16">> The manifestations thesis may be in a better position to adopt this view.

Eventually, however, there comes a point where I have made so many adjustments to the series of sound waves that I have a different song entirely, and, essentially, an intellectual object which you didn’t create or discover. 

While unstated, it may be assumed that intellectual property rights do not exist until there is some kind of humanly-made physical manifestation of the intellectual object. Presumably, this is for a practical reason: how else would we know someone had come up with or discovered an intellectual object? Technically, however, a moral theory isn’t conceptually bound to such practicalities.

Vitally, and regardless of the thesis selection, IP theorists believe the domain of protected objects is a limited subset of all intellectual objects. This domain is comprised almost entirely of works of copyright, patents, trade secrets, and trademarks. Each subdomain is generally associated with a different bundle of rights.

Those are the essential background points. There are numerous other factors and possibilities we could take into account. For example, some Lockean IP theorists may wrestle with possible proviso considerations, such as a spoilage or waste proviso, a charity proviso for those in extreme need, or the standard “enough, and as good left for others” sufficiency proviso.<<ref "17">> Other theorists may appeal to a more strictly historical Lockean perspective, attempting to ensure supreme and detailed compatibility between historical Lockean theory and an IP extension.<<ref "18">> I’ve set aside these kinds of considerations since I’m simply after the core and most widely accepted stance.

Given this standard background, the story of this quasi-Lockean IP extension for intellectual objects and labor goes something like this:

Someone intellectually labors; she creates or discovers a previously non-existing or undiscovered intellectual object. If the intellectual object falls into one of the protected subdomains, then either the humanly-made physical manifestations of that intellectual object are candidates for IP protection (manifestations thesis) or the intellectual object is a candidate for IP protection (intellectual object thesis). Using the manifestations thesis, the current and future humanly-made physical manifestations of that intellectual object will be the targets of her IP rights. Using the intellectual object thesis, her IP rights will target the intellectual object.

Since she owns herself, and she owns her labor, including her intellectual labor, then she will appropriate either the intellectual object or the humanly-made physical manifestations corresponding to the intellectual object she intellectually labored to create or discover. 

Barring some set of conditions or intervening moral obligations (presumably analogous to the unextended physical property theory), she will have a bundle of private, moral IP rights to either the intellectual object or the physical manifestations of this intellectual object, wherein the exact bundle is specific to the subdomain of the intellectual object. This bundle includes property rights to derivatives. 

At first glance, this seems like a reasonable story and a fairly appropriate extension of the Lockean theory for physical property rights. Many people seem to buy it. Creators or discoverers of intellectual objects are compensated for their intellectual labor. It feels like justice has been served when that occurs. While that is alluring, we must ask: Does this IP story work? Does it satisfactorily extend the initial physical theory? Do we need this theory? 

Almost everyone would agree that when you chop down an unowned tree and build a chair from it, you own that chair. IP stories, however, don’t seem as intuitive as this chair story because there are significant differences, glitches, and gaps. The rest of this paper is devoted to examining problems with this sketch and considering the space of arguments and dialectical moves available to the quasi-Lockean IP theorist to rebut these challenges. 

''Non-Rivalrousness and the Manifestations Thesis''

There seem to be at least two exceptionally compelling and intertwined reasons for wanting moral, private property rules and rights.<<ref "19">> First, many vital resources are finite, and we want a moral framework to account for fair and legitimate appropriation and private ownership of those scarce resources.<<ref "20">> Second, barring some intervening considerations, you should own the fruits of your labor, lest society verge on mass theft and possibly some form of slavery.<<ref "21">>
 
Generally, for physical objects and properties, both reasons matter. However, it is not clear that both reasons are relevant enough to intellectual objects and labor to result in IP rules and rights. In particular, intellectual objects are widely considered non-rivalrous. I can use an intellectual object (e.g. thinking about it or creating a physical manifestation of it) without directly impairing anyone else’s ability to use that intellectual object. 

An intellectual object can’t be consumed or destroyed. We can all simultaneously use it. Unless we have really good reasons showing otherwise, shouldn’t everyone have fair and complete access to non-rivalrous objects? Do we need a private property theory for non-rivalrous objects? It doesn’t seem like we do. 

Consider the number 2. This is an intellectual object. We can’t consume or destroy it. We can all simultaneously use it. We can all think about it at the same time. We can all concurrently create physical expressions of it by writing the numeral down on a page. We can all employ it in counting our thumbs without impairing each other. Like all other intellectual objects, its consumption is non-rivalrous. It is radically different from any physical object, since only a finite set of people can use a physical object in any given period of time.  The number 2, unlike physical objects, is available to everyone for all time.

At least to my intuitions, the obvious starting place for non-rivalrous objects, such as intellectual objects, would be no property rights, or perhaps a general right to non-interference concerning the access and use of those non-rivalrous objects.<<ref "22">> Fair and unlimited use is always possible. We need fantastic reasons to justify limiting the initial freedoms of people, and it isn’t easy to see why we need to put restrictions on the use of and access to non-rivalrous objects.<<ref "23">> 

I am not claiming that IP rights are irreversibly or conceptually illegitimate because intellectual objects are non-rivalrous.<<ref "24"> Rather, the non-rivalrous aspect of intellectual objects are significant prima facie reason against private IP rights, one which may be overcome with an effective argument. The non-rivalrous nature of intellectual objects shifts the burden of proof onto the Lockean IP theorist regarding why these non-rivalrous objects can and should be privately owned, particularly via labor-mixing acquisition.

Note, however, a Lockean IP theorist could rely upon the manifestation thesis, and in doing say claim that intellectual objects aren’t directly owned. On the manifestation thesis, IP rights target the physical manifestations of intellectual objects. Physical objects, however, are finite and rivalrous. Thus, one path available to the IP theorist for avoiding the issue of justifying the private ownership of non-rivalrous objects is by claiming the objects at stake here are actually rivalrous – namely, the physical manifestations.

Assuming we buy the manifestation thesis, if the only objects which are owned in this IP story are physical objects, then why do we need an IP story at all? We already have a theory to explain how physical objects are acquired. Why doesn’t the unextended Lockean property theory already explain the phenomena? The IP theorist relying on the manifestation thesis must offer a convincing argument for this. 

Here is an example of how the unextended quasi-Lockean property theory for physical objects might operate:

Let’s say you take the time to paint a fantasy landscape. You labored on physical objects previously unowned or owned by you, and the result is a painting you now own (which just so happens to correspond to a particular intellectual object). You then proudly show me your painting, and I love it. Later on, I paint my own fantasy landscape identical to yours (corresponding to the same intellectual object). I labored on physical objects previously unowned or owned by me, and the result is a painting I now own. That these paintings share the same intellectual object borders on irrelevant to the matter at hand. On the unextended theory, we each own our paintings that we labored to create. We both receive the actual fruits of our labor, the physical objects we each created, and that seems to be the end of the story. 

The same kind of story could be told in countless different ways, whether it’s about making a hat for ourselves, farming, or making a fire by rubbing sticks together. Any kind of human labor is going to require intellectual labor, and the correspondence to intellectual objects just isn’t relevant to the resulting rights. If we take the quasi-Lockean IP argument to be claiming that one owns the physical manifestations of intellectual objects, rather than the intellectual objects themselves, then it isn’t clear why we need to extend the basic, physical Lockean story. True, your labor required some intellectual labor, but what kind of labor doesn’t? 

Further, why should I not receive the fruits of my labor? The IP theorist must provide a compelling case. We need to see why it matters, in terms of ownership rights, that I’ve duplicated your work.

The IP theorist may be tempted to argue that you put forth more effort to create your work of art than I did, and so it isn’t fair that we both arrived at owning identical objects. There are at least two problems, however, with that claim. First, the results of our labor are not necessarily identical. For example, you owned your piece of art before I owned mine (many differences in results may follow from that). Second, even if the results of our labor are identical, is it really morally relevant in a Lockean framework that you worked harder for your results? 

Not everyone finds themselves in equal conditions genetically or circumstantially, and sometimes it takes differing amounts of labor to arrive at the same results. If the foundational Lockean perspective is actually going to drive the extension, it would be improper to dock people for having intellectual advantages which were outside their control. That simply isn’t what the Lockean perspective is about. I had a circumstantial advantage you did not have in creating my painting, but that wasn’t entirely up to either of us, and I don’t see why it should affect either of our ownership rights in a strictly Lockean story. 

The IP theorist may be tempted to fight back and claim that I’ve stolen your labor, even if only indirectly. But, how? Did I, to any degree, take anything from you or extract labor from you without your consent? No. You consented to everything you did. I didn’t take your painting or labor from you. I took nothing from you. It is up to the IP theorist relying on the manifestations thesis to demonstrate the theft occurring in this case which motivates an extension of the basic Lockean account. 

I agree with the intuition that there is something cosmically unfair about our labor/results ratio. A Lockean account, however, is the wrong story with which to argue about the type of unfairness found here. Fairness in the Lockean story alone is about being entitled to the appropriate fruits of one’s labor and preventing slavery, and not really the end distribution of ownership rights given how much we’ve labored.

Assuming we buy the manifestations thesis, the IP theorist needs to provide us a good argument for why we need to extend the basic Lockean story for physical objects in the first place. The IP theorist needs to convince us that theft is occurring, and I don’t see how they can when they assume that only physical objects are owned. Essentially, the path to avoiding the justification of the ownership of non-rivalrous objects, via switching the targets of ownership from intellectual objects to the corresponding physical objects, is fraught with challenges. 

A Lockean IP extension built on the manifestations thesis is likely unacceptable for at least two reasons. First, we don’t have a good argument for why we should switch targets. If we assume the fruit of intellectual labor is the intellectual object, then why isn’t that the target of IP rights? Surely it would be the obvious choice. Second, we say you “use” an intellectual object when creating a physical manifestation of it. The rights which prevent me from creating a physical manifestation of the intellectual object you created or discovered are rights concerning the use of that intellectual object in a particular way. But that seems to imply direct ownership of the intellectual object.  

The best version of the Lockean IP extension seems to rely upon the intellectual object thesis rather than the manifestation thesis. For the rest of the paper, then, I’m going to assume the path of the manifestations thesis is not taken. Instead, I take the quasi-Lockean IP theory to be concerned with the ownership of intellectual objects themselves.<<ref "25">> But, if we take up the intellectual object thesis, then we go back to the initial problem with the private ownership of non-rivalrous objects. The burden of proof is on the IP theorist to demonstrate how and why a non-rivalrous object could be privately owned to any degree.<<ref "26">>
 
Perhaps the claim that laborers are entitled to the appropriate fruits of their labor might justify the private ownership of these non-rivalrous objects. If so, then it is up to the IP theorist to demonstrate why the reasons for entitlement are so potent they override our initial non-interference rights to non-rivalrous intellectual objects, enabling the private ownership of these non-rivalrous objects via intellectual labor mixing. 

It makes sense why we want a property theory for being entitled to the fruits of our labor regarding rivalrous objects. When someone steals the taco salad I’ve made, they’ve stolen my labor. In contrast, when someone builds an identical taco salad after watching me build my mine, I still have my taco salad. My labor hasn’t been stolen from me. Maybe building his taco salad was easier for him, but so what? I could have just kept my taco salad, construction techniques, and recipe a secret, but I didn’t. In this situation, where has the theft occurred? More importantly, it isn’t clear why I should own a non-rivalrous object such as the intellectual object of a taco salad. We need reasons to justify a property theory for objects which don’t intuitively seem to need one.

''Unexplained Intellectual Objects, Derivatives, and Mechanics of Appropriation''

Since the IP theorist cannot or should not employ the manifestations thesis, then he must instead argue that one owns intellectual objects themselves. Justifying the private ownership of non-rivalrous object alone is an uphill battle. However, a Lockean account of IP is open to a network of other challenges as well. There are significant gaps to the operation of this ontic story which need to be explained because limiting our freedoms via private IP rights requires a worthy and comprehensive justification.

The standard account generally doesn’t specify many elements of the metaphysics in the ontic story. I sympathize with the desire to minimize the reliance upon metaphysics, but it seems reasonable to ask for a clearer account of the nature of intellectual objects and how the process of appropriation of these abstract objects functions. 

The fact is that intellectual objects are less understood than, and very different from, trees and chairs.'<<ref "27">> To arrive at private IP rights, a significant amount of work needs to be done to show how the analogy between the physical and the intellectual or abstract honestly holds, but that requires understanding the nature of intellectual objects and how ownership could possibly operate in the first place.

We don’t know if an intellectual object is actually a single intellectual object or if it is really a collection of many intellectual objects. We don’t know how intellectual objects relate to each other, either. It is unclear where derivatives end and original works begin. We don’t know how or why to draw lines of similarity and define derivatives. 

Science provides us a clean causal story for physical objects, and the unextended Lockean theory seems to add only a pinch of metaphysics to the ontic story. Lockean IP stories, by comparison, aren’t as clear (perhaps unacceptably so). Intellectual objects don’t have a nice timeline; we are much less capable of understanding their beginnings and ends. We might not even know precisely on what we intellectually labor. We have a fairly clean ontic story for physical objects and property, in which we work on unowned physical objects or objects we already own. We don’t have a similarly clean story for intellectual objects and labor. 

We can’t just bypass or merely guess at how these concerns work out. It is crucial to have some understanding of these sorts of issues in order to justify and know our various IP rights and obligations. The IP theorist needs to show he isn’t making it up as he goes; we need to see why the practical IP rules he enshrines aren’t arbitrary.

We need to know what counts as violating IP rights. For example, duplicating a modern Mona Lisa is a violation, but it isn’t clear if duplicating just a quadrant of the Mona Lisa is a violation (or why). It isn’t clear what principle we would use to determine how many particles must be duplicated or unaltered before a tribute to the Mona Lisa is a violation. 

Similarly, from our music example: at some point, I can speed up your song enough that it is a new intellectual object. We don’t know how much I need to speed up the song before it is no longer under your umbrella of protections. What rule governs this distinction? Further, we don’t really know why it is acceptable for me to play 5 seconds of your song on the radio without your consent, but not 50 seconds.<<ref "28">> For whatever rule we might use, it is hard to see how the rule itself could be defended on strictly Lockean grounds.

Unfortunately, IP rules and rights tend to generate conflicting intuitions all the time. Consider a case in which I’ve removed 50% of the sound waves from the original piece of music; surely that isn’t a protected derivative. Precisely how much is necessary to remove in order to avoid generating a derivative is another issue, but let’s assume 50% is fine. What if I’ve removed 50% of the sound waves, but none of the removed sound waves were in the range of frequencies which humans can hear? Or, consider the fact that our auditory systems are scientifically known to play tricks on us (filling in the gaps); what if I made radical alterations to the sound waves (producing many gaps), but humans couldn’t sense the difference? Suddenly, many IP theorists would be inclined to go the other direction and claim infringement. We need good rules that draw bright lines to answer these questions.

If you make a detailed mural on a wall, and I duplicate it in a tiny bitmap image, I’m still thought to be violating your rights. Lossy-compressed works of art are still derivatives of the original. Is there a point at which I’ve made such a tiny, compressed image of your mural that it is no longer considered a violation of your rights? I don’t know how or why we can draw that line. It can go the other direction too. If I make a tiny bitmap image first, and then you make a detailed mural on a wall which just “fills out” the details, you seem to be violating my supposed rights. Why and how?

IP theorists accept that computer generated objects are protectable under IP rules. This is interesting because it allows for a brute force thought experiment which applies to most kinds of IP. For example, it is extremely common for images and music to be computer generated today. What if I systematically create all possible previously unowned pieces of music and image bitmaps on a supercomputer?<<ref "29">> It seems like I would have an incredibly extensive set of IP rights. Anyone making any sort of music or image would be violating my IP rights. This is intolerable to the intuitions of most IP theorists, but they have to give reasons why I wouldn’t have appropriated all of these corresponding intellectual objects.

Consider a case in which you invent the combustion engine, a 2-stroke engine which can only use 91 octane gasoline as fuel. Do you have an IP right to the very general notion of a combustion engine or only a specific kind? To some intuitions, it would seem like I’m still violating your IP rights if I build an almost identical combustion engine which can only use 85 octane gasoline as fuel. What if I built a 4-stroke engine? What if I built a similar engine for diesel or even a non-petroleum fuel altogether? It is unclear when progress in the arena of engines is no longer a violation of your IP rights, but rather something counted as my invention. An effective IP theory requires justified principles or rules which draw these sorts of lines.

Or consider the case of the wrap dress. Diane von Fürstenberg designed the wrap dress in 1974. Despite the fact that von Fürstenberg is still living and still designing fabulous clothes, the wrap dress pattern, an intellectual object, is not considered to be her IP – anyone is free to buy a knock-off version or create their own. Why isn’t that intellectual object protected like other sorts of designs? It isn’t clear why Fürstenberg hasn’t acquired IP rights in these cases, and why these knock-offs, which appear to be derivatives of Fürstenberg wrap dresses, aren’t considered actual derivatives or duplicates.
  
As far as I can tell, all intellectual properties have these sorts of problems. These cases demonstrate how our understanding of intellectual objects and derivatives is filled with guesswork. My gut instinct is to claim derivatives are actually different intellectual objects entirely, and if the Lockean IP theory works at all, it should only grant IP rights to the original, but none of the derivatives.

If we don’t have effective reasons to include derivative objects under the umbrella protections of the original intellectual object, then all that is left are ownership rights to the original intellectual object. Depending on how detailed we take an intellectual object to be, that could mean IP rights are much slimmer than we thought. If these objects are detailed enough, it is possible that only one physical expression could correspond to an intellectual object, but then, by definition, no duplicate would really correspond to the intellectual object.<<ref "30">> Defending derivatives is likely crucial to the IP theorist’s view, but it is not obvious why we should buy into the notion that there are derivatives.

Even if we were to get past some of these line-drawing metaphysical problems, the actual mechanics of appropriation and the resulting IP rights aren’t clear, either. For example, what if multiple people independently create/discover an intellectual object?<<ref "31">>  Many timeframe and epistemic issues arise from this which fuzzes our understanding of IP rights and appropriation. 

If I’m the first person to create or discover an intellectual object, then supposedly I’m the owner. It is quite unclear why my creating or discovering an intellectual object at some point in time and place should result in rights which have anything to do with your independently creating or discovering the same intellectual object at some other point in time and place. An IP theorist could claim that we both somehow deserve shared IP rights, although it isn’t clear what those rights should look like (nor how we might know there was another creator/discoverer who also had shared rights). 

There are also many categories of intellectual progress which require stepping-stones to advance. Consider a case in which I’m inventing the car. It seems like I’m relying upon numerous other intellectual objects which I don’t own. I’m standing on the shoulders of giants.<<ref "32">> Am I allowed to invent the car if you own the wheel? Even if I can invent it, why would I own it? Almost any creation or discovery of an intellectual object relies upon a web of other intellectual objects (which supposedly may be owned). It is not clear if such creations or discoveries should result in IP rights, and even if they did, it is unclear what the bundles of IP rights should be, how they are distributed, and why. 

Further, is it enough that I simply dreamt up the basic notion of a car in order for me to own that intellectual object?<<ref "33">> That might not be enough. How much of the schematic do I need to have generated before I’ve really created or discovered the car? It would seem odd to require a working prototype; many patents are granted without one.  We need to know how much and precisely what kind of labor is necessary and sufficient for acquiring an intellectual object. 
 
For example, very recently, a nature photojournalist David Slater was in Indonesia when a Macara nigra monkey swiped David’s camera and took a famous selfie.<<ref "34">> Who has the IP rights to this photograph? Some people think Slater performed an appropriate kind and amount of work to have acquired the rights simply by venturing into the jungle of Indonesia, taking pictures, and accidentally earning this prize experience. Others think his luck just isn’t sufficient; after all, David didn’t take the picture, the monkey did. The IP theorist has to provide a theory comprehensive enough to draw the appropriate line and justify it.

These are many gaps in the ontic story which the quasi-Lockean IP theorist needs to fill in order for us to even understand what it means to be entitled to the fruits of intellectual labor. Without knowing what it really means to be entitled to the fruits of intellectual labor at this practical level, it is hard to see why we should agree there is any entitlement.

''Unexplained Domains of Protected Intellectual Objects''

Not all intellectual objects fall into the domains protected by IP. These kinds of domains are generally codified in Anglo-American laws, but they also happen to be, by and large, what IP theorists are trying to defend and justify.<<ref "35">> Unfortunately, it isn’t clear how to provide strictly Lockean arguments in favor of these particular domains and their various quirks. 

The different domains of IP each come with a different bundle of rights. For example, a copyright is associated with rights and obligations quite different from trade secrets or patents. In a utilitarian theory, we might be able to provide significantly dissimilar utility stories for intellectual objects divided into domains of copyrights, trademarks, trade secrets, and patents; hence the differences in the bundles of rights associated with these domains might be justified. Unfortunately, it isn’t clear how the differences in the domain-specific bundles of rights can be justified on exclusively quasi-Lockean grounds. Additionally, this may be a disanalogy with the unextended physical property theory where, unlike the IP extension, instances of private appropriation of physical objects generally result in a highly similar kind of bundles of rights.

These domains are accompanied by some odd bundles of rights which aren’t easily explained. There is a tradition of upheaval precisely at the point of identifying which bundle of rights is awarded for each domain; IP theorists and practitioners disagree on the correct bundles. A copyright, for example, hasn’t always been a lifetime property right (alternatively, some copyrights only extend for a certain number of years beyond the life of an author), nor is it necessarily a kind of property right which can be transferred to others indefinitely.  That you own something only for a limited period of time, and that you have impaired or limited control rights is odd. If there are Lockean IP rights, why would the ownership durations and control rights of these properties vary? It requires an explanation. We can justify these quirks with incentives-based utilitarian reasons for creative expression, but it isn’t clear how the strictly Lockean IP theorist can defend such quirky limitations on bundles of private property rights. 

Consider patents, which award a powerful monopoly over all expressions and implementations of an intellectual object for decades. Eligibility for the bundle of rights afforded by patent protection requires non-obvious novelty and usefulness. Maybe we can quickly defend novelty in terms of differentiating intellectual objects and ensuring a new intellectual object has actually been created or discovered.<<ref "36">> What rule draws the lines for usefulness and non-obviousness, and why should we agree to it? Even if we could provide this on Lockean grounds, we also need reasons why usefulness and non-obviousness are necessary for these IP rights. 

Trade secrets can have quirky bundles of rights, as well. For example, trade secret rights lapse when the owner communicates the secret to the public. But why should that communication matter? I can’t think of another kind of property in which my telling you about my property results in the lapse of my ownership rights to it.<<ref "37">>  We can see the word “secret” is in the name of this domain, but the Lockean IP theorist has to give us reasons why concealment could be so crucial for having and maintaining an IP right in the first place. 

I have sympathy for trade secrets. For any intellectual object which I alone know about, there is a natural pseudo-monopoly to that intellectual object. If I discover the recipe to the greatest hot sauce of all time, and I only make it for myself, and I never allow others to know about it, then it seems to result in something like an IP right. It would be immoral to torture me to release my secret information or to hack into my computer for my secret recipe.  Of course, the wrongness of these acts has little or, indeed, nothing to do with violating my supposed IP right. This natural pseudo-monopoly doesn’t need to be explained in terms of a real property right. If you aren’t precluded from figuring out the recipe for yourself and making your own hot sauce, then my secret is just a secret, and not obviously an IP right. An IP right should preclude you from discovering the recipe and making your own hot sauce. It isn’t clear why, on Lockean grounds, a trade secret should result in an IP right rather than just a natural pseudo-monopoly.

Trademarks are no exception to this unexplained quirkiness either. Trademarks are restricted by common, everyday language. You can’t own a word or symbol (or any other object which communicates semantics) which is an ordinary expression. What rule defines ordinary everydayness? What if trademarked words or symbols become ordinary expressions? We need clear rules and, vitally, justifications for those rules. While I can see how the utilitarian position might explain and justify these issues, I don’t see how the Lockean position can.

Admittedly, I am very sympathetic to the notion that people are morally obligated not to lie about who they are or who produced a product in the vast majority of circumstances. For example, I wouldn’t want Blackwater Security Consulting masquerading as UNICEF or the Red Cross since BSC and its various agents, services, and products don’t deserve the kind of respect or trust earned by entities like UNICEF and the RC. At first glance, that does seem like a trademark issue. These kinds of obligations not to deceive, however, aren’t necessarily tied to intellectual labor-mixing or anything which the Lockean IP extension provides.<<ref "38">> We can give other moral reasons not to deceive. 

Going back to the painting example, if we replace the painting with some other object, let’s say a chair (which also has a corresponding intellectual object), the IP theorist would surely claim no theft has occurred when I duplicate your chair. The chair could be a piece of art and/or an invention (I suppose it could technically fit any of the domains), but the IP theorist doesn’t think it can be covered by either copyright or patent protections (even if you were the first person to create a chair or a chair like that one). Why is the intellectual object corresponding to the physical painting ownable, but not the intellectual object corresponding to the physical chair? We can fabricate a utilitarian argument for this difference, but it is not obvious how the quasi-Lockean IP theorist can offer an effective argument for why certain intellectual objects which initially appear to fall under the protected domains end up not being protected. 

More problematic, and broader as well, the IP theorist needs to give a clear and effective argument for why only certain domains of intellectual objects are protected in the first place. This division needs an explanation; else the targets of IP protection seem arbitrary. What is the domain creating rule?  Why should only certain kinds of fruits of intellectual labor be open to ownership? These domains which are assumed to be protected require justifications.

I worry the quasi-Lockean IP theorist is forced to inject utilitarian justifications into his argument. In most IP discussions, this is generally how the domains are justified. I’m not against a mixed-method approach to justifying IP rights. The problem, however, is that this injection sullies the Lockean approach. The Lockean approach is interested in applying principles of justice, not utilitarian distributions. Once you bite the bullet in employing utilitarian justifications, why not stick to utilitarian arguments for IP? So many problems disappear when you do that.<<ref "39">> I’m going to set this aside since I’m investigating the merits of a purely quasi-Lockean account. Unfortunately, I don’t see how this justificatory and line-drawing work can be accomplished without utilitarian reasons.

There may be strictly Lockean paths for justifying domains, but they aren’t easy to provide. Consider the domains of mathematical equations, numbers, and other logical intellectual objects. These domains of intellectual objects are resoundingly rejected as being ownable. Why is that? It is common sense to us, but we need reasons for why numbers and equations don’t fall into the domains of privately ownable intellectual objects if there are somehow other intellectual objects which can be privately owned. 

The Lockean IP theorist may respond that these intellectual objects predate us.<<ref "40">> We merely discover them. One path available to the Lockean IP theorist is to claim intellectual objects like numbers and equations can’t be owned because they are discovered and aren’t created. Between the intellectual objects corresponding to a painting and a number or equation, it seems somewhat plausible to think that the painting’s intellectual object is created while the number or equation is discovered. Perhaps the distinction between discovered and created intellectual objects is a relevant way to cordon off the privately unownable intellectual objects from the privately ownable. But, even this view may generate conflicting intuitions for the IP theorist.

There is a world of questions and problems which arise from the philosophies of mathematics, information science, and computer science that bears upon the problem of domains for IP. For example, many assume computer programs are the kind of intellectual objects which can be owned. But, depending on your stances in these philosophies, you may be forced to concede that intellectual objects such as computer programs are mathematical objects. If mathematics can’t be owned, then computer programs couldn’t either. A host of similar problems can arise. Justifying boundaries for domains in Lockean IP theory requires an enormous set of controversial views on ontology.

In any case, an abundance of problems surround the formation and execution of these domains. So much rides on these unanswered issues. If IP theorists can’t provide a good reason for the domains, then it seems more likely that either all non-rivalrous intellectual objects can be privately owned or none can. Since the Lockean IP theorist already agrees that most numbers, equations, and the chair’s intellectual object can’t be privately owned, then none of them can be privately owned on Lockean grounds.

''Non-Interference Right and Exceptions''

I agree we own certain fruits of our intellectual labor. The physical manifestations we create are byproducts of our intellectual labor, and the unextended quasi-Lockean theory for physical objects makes sense of this appropriation. Our thoughts are products of intellectual labor, and we own those (even if we don’t own the corresponding intellectual objects), and that probably has something to do with self-ownership rights. We don’t own all the fruits of our intellectual labor, though. I deny that we own the intellectual objects which we create or discover via intellectual labor. 

Private IP rights acquired via labor mixing mistakenly limit our liberty. These obligations prevent us from creating, discovering, learning, experiencing, copying, building upon the work of others, and using our minds in the ways we want to use them. I’ve tried to point out how quasi-Lockean IP theorists haven’t given us a functional framework of reasons for why and how non-rivalrous objects, particularly intellectual objects, could be owned. Lockean IP theorists haven’t given us sufficient reasons for restricting individual liberties.

Along the way, I’ve suggested an alternative view and what I believe is a more plausible starting place for the Lockean. On solely Lockean grounds, we should either deny IP rights altogether or claim a general non-interference right to use and access intellectual objects. I prefer to think of it as a right to non-interference. This view maximizes our personal freedom and protects our self-ownership. 

IP rights are usually thought of as private property rights, and discussions tend reflect a very narrow conception of what counts as an IP right. My claim that we have non-interference rights to access and use intellectual objects doesn’t fit the normal discourse on the topic. Depending on how we flesh out property rights, it is possible that even the generalized non-interference right to intellectual objects should be classified as a type of IP right, even though it isn’t anything remotely like the standard, private IP rights we usually talk about. If what we mean by an IP right simply is some sort of right to an intellectual object, then perhaps I’m arguing for a kind of IP right.

A non-interference right is basically the claim that it is almost immoral to prevent people from using and accessing intellectual objects. Perhaps we really do have moral duties toward each other to refrain from interfering with how other people use their minds. It’s a positive thing! Denying any and all IP rights fails to capture this obligation and protection. Hence, I prefer to think of my view as promoting our personal rights rather than denying there are any IP rights at all, because I think we generally have moral obligations not to interfere with how people use their minds and intellectual objects. 

Admittedly, I’ve raised a number of objections to private IP rights in this paper, and we might worry a few of them somehow stick to the non-interference right. I’m not convinced, however, that a general non-interference right requires we deeply understand the metaphysics behind intellectual objects. Most of the objections I’ve raised just don’t matter if we aren’t thinking about private IP rights. Essentially, a non-interference right seems far easier to justify and doesn’t seem to require nearly as detailed an ontic story as private IP rights.

Lastly, while I’ve insisted on a non-interference right, it is certainly possible I’m wrong, or that I’ve overlooked some important exceptions. Perhaps I need to take a step back, since there may be unorthodox cases in which intellectual objects can be privately owned, even if not acquired via labor-mixing. The reasons for the possible private IP rights, however, aren’t based on Lockean grounds (although these reasons may be compatible with Lockean thought). Again, these unorthodox cases aren’t usually thought of as being IP rights, but if an IP right is simply a right to an intellectual object, then perhaps these unorthodox cases count.

In taking a step back from my blanket claim of a non-interference right to intellectual objects, I am also going to push back against an overly narrow understanding of IP rights. Just as a non-interference right might not normally be considered a genuine IP right, the exceptional domains for private IP rights which I have in mind are not usually considered genuine IP domains.
 
Perhaps there are certain intellectual objects which no one should use. Consider a doomsday device which can destroy the universe. Maybe that is the sort of intellectual object for which no one should build physical manifestations or even schematics. Presumably, we all are morally restricted from using that intellectual object in some ways. At least on some moral theories (which quasi-Lockeans may accept), we might say that my obligation in this case corresponds to a claim right each other person has against me not to use the doomsday intellectual object in certain ways. That seems to be a very specific bundle of ownership rights to the intellectual object, and it seems to be an exception to a non-interference right.

Maybe only governments and their officials have certain ownership rights to intellectual objects for nuclear weapons. Perhaps nobody except vetted librarians and scientists (for the sake of knowledge alone) should use intellectual objects concerning smallpox. These might be instances of private property rights to intellectual objects, albeit these rights are acquired in odd ways. 

We might interpret certain kinds of personal privacy rights in terms of IP rights. If I had a moral right to have my medical information not used in certain ways by others, then maybe I have a particular kind of IP right. My private data or private intellectual objects are really mine, no matter which server they live on or the paper on which they are recorded. 

Perhaps even censorship, duties against child pornography, and plagiarism can be understood as unique strains of IP rights, even if they aren’t justified via labor-mixing acquisition. This expansion of what it means to have some bundle of ownership rights to intellectual objects isn’t well explored. So many rights and obligations we wouldn’t normally think of as IP rights may actually be IP rights. Depending on how we define property rights, and how we flesh out our various obligations and rights, it is possible that some private IP rights exist.<<ref "41">>

There may be some moral limitations to how intellectual objects can be used, accessed, or controlled, based on claim rights of specific agents, governments, or corporate entities. If there are cases of private bundles of ownership rights to intellectual objects, they don’t seem to be due to any sort of labor-mixing acquisition. These rights are likely justified on other moral grounds. I’m not defending the claim that there are any private IP rights. Assuming the metaphysical framework/story can be structured clearly and reasonably, however, I’m certainly open to the possibility.

In any case, these possible exceptions seem to neither demonstrate the viability of the standard quasi-Lockean IP theory, nor interfere with the claim that we all generally have a non-interference right to use and access intellectual objects. I’ve agreed to the possibility of IP rights, but they are justified on other grounds – specifically, non-labor-mixing grounds. From what I can tell, Lockean IP theorists have yet to offer a potent ontic and conceptual tale which would convince us that there are limits on our freedom of use and access to almost all intellectual objects.

''Conclusion''

Perhaps we can accept some version of the unextended quasi-Lockean theory for physical property rights. There’s just something about chopping down an unowned tree and building chairs you subsequently come to own which is just common sense.<<ref "42">> I don’t see, however, why we should accept the quasi-Lockean IP extension. The standard Lockean IP theory has too many unexplained, and perhaps unexplainable, challenges. We might be able to justify moral, private IP rights connected to intellectual labor via utilitarian or Hegelian accounts, but I don’t see how an exclusively Lockean account can succeed at this particular goal. 

Essentially, I don’t think the quasi-Lockean IP theory should be used to justify the status quo of IP rights (or anything like it). It’s more plausible to think we have a non-interference right to use and access intellectual objects, perhaps with some exceptions for other moral requirements.


-----------

<<footnotes "1" "I’ve done my best to extract the core moral arguments from what is traditionally a legal-oriented set of debates concerning IP. Perhaps not everything will pull apart nicely in this arena; some of the discussion inevitably is forced to borrow from legal perspectives, but we have to start somewhere.">>
<<footnotes "2" "This may sit in contrast to other kinds of property rights, such as common and collective.">>
<<footnotes "3" "I’ve had to paint in broad strokes here. It is important to realize there are, at least conceptually, numerous possible variations of bundles of rights which are species of private property rights.">>
<<footnotes "4" "Some folks might prefer to claim I’m denying IP rights entirely. I appreciate that perspective, although I’m worried it isn’t accurate enough.">>
<<footnotes "5" "This isn’t to say that Utilitarians don’t need to provide an ontic story or Lockeans an epistemic story. Each approach usually faces different challenges. That’s all I’m pointing out.">>
<<footnotes "6" "I say quasi-Lockean because this account is generally not a detailed or strictly historical Lockean account of property. Rather, we’re aiming for the more general and basic Lockean story that already intuitively grips a broader audience of people.">>
<<footnotes "7" "We should note that the Lockean story doesn’t seem to concentrate so much on the distribution itself, but more on what process or principles brought us to a distribution.">>
<<footnotes "8" "Exactly what counts as these barring conditions is an incredibly significant debate. For now, I will assume that the quasi-Lockean view is conceptually open to a wide range of possible conditions, including very stringent conditions that prevent almost any sort of acquisition. ">>
<<footnotes "9" "He can’t, for example, labor on something I own and claim he is entitled to it because he labored on it. From a moral perspective, he has lost his labor and possibly violated my property rights.">>
<<footnotes "10" "See: Himma (2005), (2012); Moore (2012); Mossoff (2012); Tavani (2005); Vaughan (1996)">>
<<footnotes "11" "Generally, IP theorists don’t appear to hold metaphysical nominalist positions or even simply thin views of metaphysics. ">>
<<footnotes "12" "See: Moore (1997); Spinello and Tavani (2005); Hughes (1988)">>
<<footnotes "13" "Moore, Adam D. 'A Lockean Theory of Intellectual Property.' Hamline Law Review 21.Fall (1997): 66">>
<<footnotes "14" "Technically, this isn’t a sufficient reason to be against the direct ownership of intellectual objects. Ownership rights are generally a bundle of rights, and perhaps that bundle simply doesn’t include a claim that no one can think about the object, whether physical or intellectual. That is certainly true of the unextended theory. Yet, this issue of owning and having freedom of thought may spark some intuitions against the ownership of the intellectual objects themselves.">>
<<footnotes "15" "Many intuitions would lean toward creation here, but that could be wrong.">>
<<footnotes "16" "These stories would require different explanations, but both would need to justify how we draw lines of similarity.">>
<<footnotes "17" "Merges, Robert P. //Locke Remixed ;-)//. UC Berkeley Recent Work. UC Berkeley: Berkeley Center for Law and Technology, 2007. http://www.escholarship.org/uc/item/0hs768m2:1256">>
<<footnotes "18" "Hull, Gordon. 'Clearing the Rubbish: Locke, the Waste Proviso, and the Moral Justification of Intellectual Property.' //Public Affairs Quarterly// 23, no. 1 (January 2009). http://www.jstor.org/stable/40441517: 72-78">>
<<footnotes "19" "I am not claiming that either reason is necessary or sufficient for moral, private property rules and rights. I’m open to those possibilities, but I just don’t know for sure.">>
<<footnotes "20" "I am not claiming that a Lockean theory of property is the ultimate explanation of the morally correct distribution of resources, but it may play a role.">>
<<footnotes "21" "These considerations need not be a thick set of barriers. There could many moral obligations which are so strong they override most instances of private acquisition or ownership. Interestingly, one strength of the Lockean approach is that almost any theory can accept this acquisition story, as long as certain constraints are met. This is analogous to how many moral theories can accept that certain ethics cases which meet appropriate constraints simply boil down to utility problems as the last deciding factor.">>
<<footnotes "22" "There are, of course, those who have different intuitions on this matter. Perhaps cultural and generational differences may largely explain the distinct intuitions regarding prima facie rights to non-rivalrous objects. Non-Anglo-American cultures often have strikingly different intuitions on these kinds of matters. Anecdotally, I find many digital natives are more sympathetic to my intuition (granted, that doesn’t necessarily make the intuition correct). In either direction, this is an important assumption. Unfortunately, it isn’t clear that any answer can be justified via arguments alone. While we may be able to continue asking 'why' into regress, at some point, I think we have to make the pragmatic move of putting our tent pegs down somewhere. I assume this is a fair place to do so. The result is that my argument is weaker for anyone who doesn’t share my intuition here.">>
<<footnotes "23" "Technically, even a general non-interference right imposes obligations which limit the freedoms of others. These obligations, however, are generally easy to swallow and aren’t nearly as imposing as the obligations corresponding to private IP rights. ">>
<<footnotes "24" "Himma, Kenneth. //Abundance, Rights, and Interests: Thinking about the Legitimacy of Intellectual Property//. UC Berkeley Recent Work. UC Berkeley: Berkeley Center for Law and Technology, 2005. http://128.48.120.176/uc/item/7r5654bd: 1.">>
<<footnotes "25" "Although many of the objections and challenges I raise will still apply to those extensions which employ the manifestations thesis.">>
<<footnotes "26" "A utilitarian argument from incentives might give us suitable reasons, but Lockean arguments will need something else.">>
<<footnotes "27" "Even the unextended ontic story has its fair share of problems. I see the problems for the IP extension, however, as being far more difficult to defeat. If Nozick pours his tomato juice in the sea, it doesn’t result in his acquisition of the sea. But, unlike IP rights, the unextended physical property theory at least has some clear cases which aren’t ambiguous. The IP theory suffers from far more systematic problems and ambiguities.">>
<<footnotes "28" "At least on strictly Lockean grounds, the whole legal concept of Fair Use requires a non-utilitarian justification.">>
<<footnotes "29" "Given sufficiently low requirements, particularly for lossy-compressible objects, this is a very real possibility. It may be easier to understand the bitmap example here, but similar compression and brute-force principles can be applied to sound as well. Further, almost any of kind of intellectual object or domain which the IP theorist wishes to protect may be subject to this sort of brute-force attack. For example, I could try to generate a database of all possible ownable yet unowned strings of English words, and I could copyright and publish each of them individually. Writers would supposedly violate my IP rights all the time in such a case. But, that is intolerable!">>
<<footnotes "30" "We also might have a regress of intellectual objects corresponding to other intellectual objects. This is all very messy! I don’t know the answers to these questions, but they are the kinds of questions for which we need answers in order to effectively justify and elucidate IP rules and rights.">>
<<footnotes "31" "The controversy of Leibniz and Newton concerning the discovery or creation of calculus is one of many examples. ">>
<<footnotes "32" "Almost any modern idea is the result of a massive memetic network.">>
<<footnotes "33" "Similarly, Jules Verne dreamt up solar sails over a century before a formal, working solar sail was being created.">>
<<footnotes "34" "Kravets, David. 'Monkey's Selfie at Center of Copyright Brouhaha.' Ars Technica. August 6, 2014. http://arstechnica.com/tech-policy/2014/08/monkeys-selfie-at-center-of-copyright-brouhaha/ ">>
<<footnotes "35" "Many of the discussions of IP center on merely modifying our current system to be better. It’s a lot harder to find radical disagreement with the concepts of and justifications for domains or intellectual property more generally.">>
<<footnotes "36" "We’ve essentially already covered some of the difficulties in establishing novelty.">>
<<footnotes "37" "Except maybe some very forced example of a specialized contract releasing my property rights into the commons, upon my communication.">>
<<footnotes "38" "This sort of issue will be handled later in the paper.">>
<<footnotes "39" "Although, in biting that bullet, you accept a different class of problems which arise from using utilitarian arguments, including potent epistemic requirements.">>
<<footnotes "40" "Again, the quasi-Lockean is likely forced out of nominalism and must take up a robust sort of metaphysics.">>
<<footnotes "41" "As far as I can tell, property rights may be a kind of medium to express almost any sort of right.  It might not be useful to translate or interpret almost any moral right into property rights. Property rights seem to lose their bite when we do this. Similarly, I worry IP rights may lose their bite if we were to continue re-interpreting others kinds of rights as IP rights. I’m not sure how and why we should draw many of these lines.">>
<<footnotes "42" "Common sense, of course, isn’t necessarily correct. Further, casuistry has its pitfalls in the dialectic. We have to do the best with what we have.">>

------------

''Bibliography''

Himma, Kenneth.// Abundance, Rights, and Interests: Thinking about the Legitimacy of Intellectual Property//. UC Berkeley Recent Work. UC Berkeley: Berkeley Center for Law and Technology, 2005. http://128.48.120.176/uc/item/7r5654bd.

Himma, Kenneth. "Toward a Lockean Moral Justification of Legal Protection of Intellectual Property." //San Diego Law Review// 49, no. 4 (Fall 2012): 1105-181.

Hull, Gordon. "Clearing the Rubbish: Locke, the Waste Proviso, and the Moral Justification of Intellectual Property." //Public Affairs Quarterly// 23, no. 1 (January 2009): 67-93. http://www.jstor.org/stable/40441517.

Hughes, Justin. "The Philosophy of Intellectual Property." //Georgetown Law Journal //77.287 (1988): n. pag. Web.

Kravets, David. "Monkey's Selfie at Center of Copyright Brouhaha."// Ars Technica//. August 6, 2014. http://arstechnica.com/tech-policy/2014/08/monkeys-selfie-at-center-of-copyright-brouhaha/.

Merges, Robert P. //Locke Remixed ;-)//. UC Berkeley Recent Work. UC Berkeley: Berkeley Center for Law and Technology, 2007. http://www.escholarship.org/uc/item/0hs768m2.

Moore, Adam D. "A Lockean Theory of Intellectual Property." //Hamline Law Review// 21.Fall (1997): 65-108. Web. 09 Nov. 2014.

Moore, Adam D. "A Lockean Theory of Intellectual Property Revisited. (2012 Editors' Symposium)." //San Diego Law// Review 49, no. 4 (Fall 2012): 1069-103.

Mossoff, Adam. "Saving Locke From Marx: The Labor Theory Of Value In Intellectual Property Theory." //Social Philosophy and Policy// 29, no. 2 (2012): 283-317. doi:10.1017/S0265052511000288.

Tavani, Herman T. "Locke, Intellectual Property Rights, and the Information Commons." //Ethics and Information Technology// 7, no. 2 (2005): 87-97. doi:10.1007/s10676-005-4584-1.

Spinello, Richard A., and Herman T. Tavani. //Intellectual Property Rights in a Networked World: Theory and Practice//. Hershey, PA: Information Science Pub., 2005. Print.

Vaughan, Richard E. "Defining Terms in the Intellectual Property Protection Debate: Are the North and South Arguing Past Each Other When We Say "Property"? A Lockean, Confucian, and Islamic Comparison." //2 ILSA Journal of International & Comparative Law,// Winter 1996, 307.

Dear Mom and Dad,

If we sum up the time that we will spend together over the course of the remainder of our lives, I might guess we have 30-40 weeks of time left.<<ref "1">>  I want to make sure our precious time together counts. I want us to look forward to our visits together. I want us to enjoy them. I want them to be some of the highlights of our lives. I know you do too. I write [[this letter|About this Letter]] to extend an olive branch to you in the hope that we can achieve this happiness together.  

Our last conversation was a catastrophe. It weighs heavily on me.<<ref "2">> It haunts me. It kills me to see our relationship dying.<<ref "3">> I have spent a great deal of time and energy soulsearching, researching, and contemplating a solution.<<ref "4">> Problematic to resolving our issues: I don’t want to be hurt, and I don’t want to hurt you either.<<ref "5">> Attempting to fix this relationship feels like a high-stakes risk. Paradoxically, I think we both feel we are in a "lose-lose" position. It appears<<ref "6">>  as though there's no way to "win" and be happy together, as though all the roads we share lead to pain. So, why take the risk?

Here's why: I'm not sure I can be happy if we fail to mend our relationship. I'm not sure you can either. That isn't to say we can't live on without each other, but in doing so our lives will be disfigured and unfulfilled.<<ref "ns">> Hence, this risk is worth taking.

I think we are both hurting a lot, and success here would make us happier. We love each other, and I believe we both strongly desire to resolve our tension. I want to build healing bridges over the gulf that grows between us.

I don't know what it will take to heal our relationship, to whatever degree we can, and I realize we may not salvage it. In any case, I desperately need our next visit to work (or at least be a giant step in the right direction). To that end, I have worked hard to respond to you as best as I can in this letter. I hope you will take my claims seriously and with maximum charity; they are hard-won. I seek to be delicate and yet directly honest with you. I'm seek to be as neutral and objective as I can in my analysis.<<ref "x">> I seek to address our problems with kindness and [[empathy|Empathy]]. In empathy, I believe we both have good intentions, and I hope we have the tools (or the tools to acquire the tools we need) to build these bridges.<<ref "7">>

Here is where I'm going to start (re)building: I deeply love you, and I always will. I am truly sorry I hurt you. I wish I could go back in time and undo the damage I've caused. That's not who I'm trying to be. I wish I had the wisdom, understanding, and foresight to know how to do it right. I wish I had the resources and awareness to never have been in this position in the first place. This sucks. I'm [[doing the best I can with what I have|Doing our Best]], and that has not been sufficient. I'm sorry. Please forgive me. 

Of course, none of us are [[perfect|The Good]]. We are fallible, finite, and limited; we all fall short; we are blemished and defective. We each have emotional conflicts and logical dissonance in ourselves.<<ref "8">> On top of that, we are all vulnerable, [[intelligent|We are Intelligent]],<<ref "9">> and highly sensitive<<ref "10">> human beings who happen to have radically divergent and often incompatible experiences, journeys, memories, inferential-styles, values, goals, projects, desires, feelings, and points of view. We have different modes toward and systematic understandings of ourselves and the world. In other words, we have different [[reality maps|Reality map]], and finding a harmony for our fragile relationship is fraught with unique challenges.<<ref "11">> 

Our reality maps are critically incongruent; we have [[fundamental disagreements|Fundamental Disagreement]].<<ref "y">> Of course, disagreement is normal (and can be a vital, good thing), especially for imaginative and intelligent people. Many disagreements can be passed over without any real analysis or major resolution.<<ref "12">> Diversity in beliefs should often be celebrated or even understood as being evolutionarily adaptive. Unfortunately, for practical reasons, some kinds of disagreement require resolution.<<ref "13">> Resolution doesn't necessarily mean we radically change each others minds (although that happens once in a while), but it does require we find a way to make ourselves compatible with each other.

Right now, we aren't compatible; we can barely sit in the same room with each other.<<ref "14">>  We are just hurting each other. If we can't find a way to stop it, then it is clear that we can't have a significant relationship.<<ref "15">>

I recognize that the significance of our [[friendship|Friendship]] comes in degrees. We may never be perfectly close, even though we want to be.<<ref "16">> If all else fails, if we somehow couldn't make a significant relationship work with each other, then we could always fall back on a distant, hollow, merely polite relationship with each other.<<ref "17">> We would ask each other "how have you been?" and the other would respond with a hollow "great, thank you for asking" alongside whatever minimal information or banalities we would be required to provide in the context. We'd get together when necessary and help each other when asked, but we wouldn't really engage in meaningful bonding beyond that. We wouldn't really //be with// each other to the degree that we really crave. We wouldn't really get to know each other, and we wouldn't really be walking together in the journeys of our lives. Our interactions would be reduced to social niceties and etiquette. Our relationship would be tedious and merely a chore we fulfill in order to maintain basic social ties. It would be joyless duty. It would be a form of mere instrumental social networking and tending to social capital we've built in each other. It would be a lie. It would be repulsive. It would be dreadful. It would be heart-breaking, and because it would be so crazy painful, I hope failure is not an option. I can't bear to imagine going down that road.

Suffice it to say, we need compatibility bridges between our reality maps instead of galactic rifts and clashes between them. We must come to a mutual, shared, and more secured understanding between our reality maps if our relationship is going to have depth and meaning. I believe we can eventually and hopefully effortlessly pass over much of our disagreement, but only after we have a better grasp of what we disagree on (even if we can only get that picture painted in broad strokes).<<ref "18">> This gives us vital information for not stepping on each others toes or pissing in each others' pools.<<ref "19">> Essentially, by cultivating our empathy and working towards mutual understanding (even if only an understanding of our disagreement), we will be better positioned to know what not to say or do in front of each other. We will able to see the contours of our conflict and avoid collision where possible.<<ref "20">> If we're lucky, we may even be able to accept our disagreement so thoroughly that we just laugh about it together and enjoy each others company without reservation.




My struggle with you is deeply entangled with struggle with myself. Part of you who are, your reality maps, is deeply embedded in me. I am at war in myself, and by proxy, I am at war with you.








I believe this is the epicenter of our conflict:

This isn't about being right now. It is not about finding the truth. It is not about trying to convince each other of our reality maps or even defend our reality maps against each other in any significant way. 

I think my autism is something you believe I should overcome and not something that should be embraced. 


We don't seem to agree on the moral rules of the social game (whether or not the game is fundamental to our existence is another question, one which we both desperately try to support) we are participating in.  

Let me straight up grant that you have a right to believe what you want to believe (assume I take up moral relativism for your position, but not mine). So, only I might have moral duties, and you either don't or I have nothing to say about it. I don't take you to be morally culpable for who you are, and I'm fine with you being whoever you want to be (that doesn't mean I won't change my behavior with you). 

I feel like I've journeyed logically and emotionally deep existential, philosophical, religious territory. Note, our disagreement doesn't make you wrong, but it 


 I reasonably have a right to feel and think what I do.

I have earned my right to think differently than you on crucial matters. We are going to disagree, which is totally fine. But 


Here's the ugly fact: I can't be who you want me to be. I don't think that makes me immoral. I don't think that makes me irrational. I don't think that means I lack integrity. I don't think you should //otherise //me because I believe so fundamentally different from you, and I owe the exact same token of respect to you. This is agreeing to disagree. 

Problematically, agreeing to disagree is an oversimplification of the process. There are networks of inferences that branch off disagreement, and recognizing how and where it branches off is required for us to fully agree to disagree on the implications of our starting disagreement. I really do think I understand the set of inferences which result from your starting place; I see the implications of your point of view to a significant extent. I do not think the same can be said for you of me. 

Obviously, you can't have experienced and thought everything I have; you aren't me. But, you do have to try harder to understand why it is that I think what I do. You don't have to "revolve" around me like this. I think, however, that's what being a parent is really like sometimes. It means you have to develop an appreciation for who your children really are. They're really different from you, they have different minds than you, they have different reality maps from you in radical ways, and that means you'll have to spend more time learning to empathize with them than other parents with their children.

We have to get past judgement. We can't be cynical about each other. If we are, we'll both just hate each other. 

Let's be clear here: I'm ridiculously judgmental. This is pot calling kettle black. I judge you to be less judgmental than me. Judging and making arguments which passed judgement from experts is what I did as a vocation. I think you have and do much the same as a vocation.

 Making judgement calls is what we're forced to do. At the bottom of our hearts, we both know how awful human beings really are. You have hope for them, and I do not. Not having hope for people, in a predictive sense, is not the same as saying I won't have empathy for them. It just means I know longer empathize with the people who you hope they really can be. I'm no longer working to help that person because that person won't actually exist (here's where prediction matters).

Can we co-exist without judging each other? 


I forgive you for whatever mistakes you have committed against me because I legitimately think you are good people who honestly seek to do the right thing. I think you are addicted to being moral <and I don't think that a bad thing> I think trying to be moral rules your life. I think you are extremely good at it in certain ways, I think you aren't as rational in your pursuit of morality as you would hope. I think I'm the exact same way. I think in our pursuit of being moral, we've come to understand the very concept of Virtue differently. What it means to be excellent persons is different for us. We both think the other is incredibly wrong about some of the most important things in the world, the things which define who we are to the core. The cores of reality maps, the most fundamental questions and assumptions we take up, have some differences. We both took a handful of existential questions and answered them the same in some ways, but differently in others. Even tiny differences at the beginning core of our reality maps will result in a tidal wave ripple of differences throughout a network of wildly chaotic fractal of inferences made surrounding that core.

I've had to find my own way. And, I can see, I will continue to need to do that. I feel burned by the authorities I have accepted in my life. I now must strongly buffer and reflect upon who and what I take to be authoritative. It is our plight, in this deep epistemic existential center of who we are, of what our freedom is, of the 

Don't you hear two people in this document? Don't you see in these words that there is an internal cataclysm between the Red Pilled Man and Kant's Agent fighting within me? Don't you see the Kantian Crossroads!? Don't you fucking see the Road to Damascus!!! Neitzsche, that piece of shit (regardless of whether he's right or wrong), is sitting on the sidewalk laughing his off. I'm being driven to madness at the crossroads. 

Why can't you accept that I am just a mortal man at the crossroads deciding who I will be here? Why can't you empathize with that man? Why would you begrudge him any pathways to happiness, especially when they are rational? Do you not understand him, do you think he is confused, or do you really think he's just evil? 

Can you live with the fact that our reality maps are very different in important ways? Can you accept what that means? Can we be close again despite these differences?

I definitely have respect for people who have different opinions than me. I couldn't have been shaped as radically as I have been over the past 30 years if I didn't take others seriously.  


Don't you see that I'm at The Crossroads? Don't you see that I wandered deep down a path that started at this crossroads, and I was deeply and systematically wrong at an epic level. My starting choice at central Crossroads of my reality map may have been wrong. I clearly have been wrong about so very much. I can't trust anyone, not even myself. 

Who and What can I trust? Well. Reason seems amazing. Even if reason is just the constructed thing, a set of social rules and memes in our society which define "how to think," where we play a public game in shaming those who don't reason well and worshipping those who reason well (where each contestant comes with their own definitions of what is reasonable).

I don't have miracles. I don't have authority besides myself at this point. The real me is a naked, weak, broken man at the crossroads, yet again. It is like Groundhog Day againness. I can't keep doing this. It is the true meaning of purgatory. I am caught between a heavenly way and the way of the hellian. Problematically, they both look like hell, but oddly, the hellian way at least gives me reasons to live. I can't be a slave anymore. I care about myself too much to accept my slavery. I have dignity. Ah, is this a slip into the dark triad or actually practicing empathy for myself?

I think you take yourselves to be excellent psychologists and students of human nature. I think you are very much so in certain ways. I've also seen you be wrong too often on these topics to trust you much on them. 



I think you are reasonable enough that if you experienced what I have experienced, you would agree with me. I think that if you were transplanted out of your soul and into where mine has been, and you walked observingly on my lifepath, with empathy, where you saw what you saw and didn't see what you didn't see, where you had the billions of choice-time-slice-instances (and many choices to choose from in each instanst) in front of you every day

I think if you were the ideal epistemic agent, an agent of maximum possible empathy, flying above me the forest of my lifepaths, you'd see that I did the best I could with what I had, that given my reality map at each choice timeslice-instance, I made the best, most rational choice I could have at that instance. It is almost certainly not the objectively best choice given the ideal epistemic agent's truly objective reality map. But, I didn't have that reality map to work with. I had my shitty, hilarious, almost farcical map that I've cultivated over time (just like the rest of us). 

 the reality map I have w with while journeying on this path



I'm interested in being authentic. In being myself. I see now why I can't trust authority. Many times I have thought that, and now I re-understand what it means to not trust authority. There are many levels and kinds of authority. 





I have to trust myself. If I don't then we can go nowhere. How much should I trust myself? 

The man who is wrong about the Red Pilled road 













Reaching a point where we aren't stabbed by the pain of our disagreement may not be easy. We see each others' reality maps as being desperately wrong, as dangerous, as a significant cause of much of our personal pain. 

I think we both worry the other has completely nixed the other's map in their map. Like we both might somehow be thinking the other is completely off their rocker, doesn't have all they'remarbles, that their missing the bigger picture so strongly that it's insane. 












From your point of view, unless some miracle happens, unless the Potter can successfully reshape His lump of clay, unless I somehow reshaped my reality map, or unless God judges by some other standard than what you accept, I'm going to hell. My short life on this Earth will translate into eternal damnation; that's God's justice for me. 

That is a powerful point of view to have. It shapes your reality map in dealing with me very strongly. 


You have spent your lives trying to convert people, and by your own standard, you have failed with your sons. Can you stoically accept my fate and just be with this sinner as he sins? Can you do without judgment? Can you let it go? I assume not. It is deeply ingrained in you. It is your vocation and purpose. 


[[Your Faith and my Lack thereof]]


 I'm okay with the fact that we have different reality maps. I think there are asymmetries in our relationship that need correction. Namely, I think I understand your reality map (I've experienced it) a lot more more than you understand mine. I think the key to our compatibility is two fold:

Being explicitly okay with each other having different reality maps.
Understanding what we disagree on.

Understand my reality map is understand me. If you don't want to understand me, to empathize with me, to see if my shoes, then I'm not really convinced you care about me. 


 


Do you want to me say you've thrown your life away? That you are making a gigantic mistake in your irrational, addicted pursuit of faith? Do you want me to groan at every thing you say, to be pissed at the causes and consequences of the beliefs that led to your words and actions? No. I expect the same from you.



I think this document is worth studying. I’m not looking for you to grade my paper (which wasn't ultimately why I sent you my papers ; I was trying to give you breadcrumbs to my reality, to have the content to interact with me [I eventually just stopped, since I saw it wasn't working]), but I am hoping you will listen to me because I will listen back. 





[[Mom]]

[[Dad]]

[[J.R.E.]]

[[A.I.R.]]



[[Freedom]]

[[Humanity]]

Some beliefs might have to change for that to occur. Some notion of what we ought to do and why might have to change. Understanding how to wisely and politely have fundamental disagreement is not easy. 



[[Whine like a Baby|The "Whine like a Baby" Section]]

[[A son's thank you|Thank you]]


[[Charity]]

We have other impediments to consider. Importantly, we are not as articulate as we wish. Even if we have the right intentions and ideas, it is hard to find the right words (particularly in the moment) to unlock our relationship.

[[medical treatment|Medical Treatment]]

[[my depression|My Depression]]

[[my recovery|My Recovery]]

[[my friend M.B.A.|M.B.A.]]

I believe your reality map has brought about significant pain in my life. You have such a coherent view that it can be intoxicating. It took me a long time to peel away from it. 

Despite our differences, we obviously share plenty of beliefs in common. 

[[where I am Now|Where I Am Now]]

[[Meme]]. Meme video.

[[Roots]]

 In addition to our conflict, I'm dealing with a network of other crucial issues. I would say I have disintegrated, and I am trying to find a way to integrate myself. 


We all think we are right. We find it hard to act on the assumption that we aren't. It is our plight as humans to both know our fallibility and at least temporarily assume we aren't in our calculations and choices.


Do you remember when I was 11, and I decided not to speak to H.O.E.?

Do you remember when I moved to college? We had a falling out.


The happiness and well-being of my children may be an impediment. They are not a bargaining chip, a tool, or a social totem for us to dance around. We have conflicting views on what is best for my children. Let there be no mistake, J.E.W. and I call the shots. 


In all likelihood, we will not dispel our fundamental disagreements. That's okay. Hopefully, we share enough common ground that we can build bridges across our gaps.



Admittedly, I have unhappy memories of your relationships with all of my grandparents, except [[B.B.C.|Betty Boop]]. This is not what I want for M.S.N. and I.M.F.. I want them to know you and experience joy with you. Unfortunately, I don't want you to infect their reality maps (which I'm sure I have already damaged - as is the nature of fallible, human parenting). 



As to your qualms with my self-medication, I hope you will in time see that I have done the best I could with what I had. There are not many viable resources available to me. I also think I have been justified in my mistrust of others and my willingness to be my own advocate when no healer or remedy worked. I think you know very little about my journey and progress for mental health and happiness (this is not an assignment of blame). Were you to have an ideal, more objective, third-personal view of my experience, I think you would find I did you proud. You have not been there for the countless conversations I have had with other family members about this issue. I have been positively scientific in my pursuit of stability and happiness. Problems are not solved overnight. 

Obviously, everyone wants unconditional happiness, and if medicine or drugs are conditional

I have found an incredibly helpful substance: Ketamine. It's literally magic for depression. I entreat you to research it. 

I have heard you say that you don’t feel like you can “win” with me. I think we both feel that way about each other. We don’t know the right words to say to each other. We don’t have the keys to unlock our compatibility.


This letter is densely packed, and I hope the scope and depth of it enables us to experience a quantum leap in our friendship.


If I were there, I'd hug you. I love you very much. 

I am listening.

Love,

Your son




-------------------------------------------

<<footnotes "1" "I could be wrong (hopefully it would be far more time), but it seems at least a distinct and realistic possibility. Of course, we may have distant interactions in between, but they seem categorically not the same. Here's hoping that at least this letter is an exception to the previous sentence. I may only write a handful of letters in my life that passionately matter to me, and I hope this one does the job we need it to do.">>

<<footnotes "2" "In addition to a number of other significant emotional and intellectual requirements of me.">>

<<footnotes "3" "That pain is part of my motivation to fix the problem. The happiness we can achieve together is another.">>

<<footnotes "4" "I have been in a deep think for many years now about a number of serious problems. That obviously doesn’t validate or show superiority in anything I’m saying, but I hope it demonstrates how seriously I take the task. Without a doubt, I am sure you have done the same.">>

<<footnotes "5" "Eliminating overwhelming pain (pain isn't always unconditionally bad) from my life is crucial to making my life worth living. I’m not sure I can effectively articulate the pain I have experienced. You have seen the signs of it though.">> 

<<footnotes "ns" "I think having a good relationship with your family is a necessary condition to the happiness of most people, even if it isn't sufficient.">>

<<footnotes "6" "Appearances can be deceiving.">>

<<footnotes "x" "But, no longer “whatever the costs.” Unfortunately, for too long I had dogmatically reflected upon this change in my stance toward to world (which amounted to a change in the epistemic algorithm of the rewards center of my brain ) as a kind of unacceptable, Camusian philosophical suicide, a move lacking in rationally justified integrity. My lust for certainty (which failed), and then later for mere confidence or acceptable justification has chipped away at me. In a way, I hated myself. The modernist in me hated my journey and reshaping. I was wrong though. The naked pursuit of truth is not always worth it. Some things are not worth thinking about. To be clear, I’m not looking to be perfectly happy; I’m after a semblance of eudaimonia. Flourishing human specimens must accept their bias and fallibility. Bias, in a terrifying way, is our plight, and a thing we must stoically acknowledge. At some point, we can't reshape our bias, we can only be enveloped by it. I want to flourish, and that means learning to be okay with and to live with my bias. There is the rationalization, if you seek one. I call it a practical leap worth taking.">>

<<footnotes "7" "We're xNTJs, so maybe we can figure this out. In my opinion, a strong habit and meme that permeates our family is having the wisdom+sensitivity to recognize how often and to what degree we’ve failed to be intelligent over the course of our lives. We evaluate ourselves and see our limits in an honest way that others often do not and very often cannot. Sometimes we are too critical, and sometimes we think too highly of ourselves or thoughts. In my opinion, having the humility to consistently recognize our mistakes and flaws has been one of our family’s greatest assets (and sometimes an incredible source of pain).">>

<<footnotes "8" "We are not perfectly constituted or [[integrated|Theory of Positive Disintegration]] selves.">>

<<footnotes "9" "It is unfashionable and lacking in (false) humility to imply or openly admit to being intelligent (particularly when you are). It causes others to have a kneejerk reaction to 'put you in your place.' Of course, who doesn't have the inescapable bias of acting on the assumption they are smart, or right, or the hero of their own story? You have to hide your intelligence in many ways, especially when you don't agree with others. I believe we simply have to own up to it in this conversation because it is part of the root of the complexity of our problem.">>

<<footnotes "10" "Sensitivity is the foundation of intelligence, a reason we see the world differently than others, and the source of some of our atypical pleasures and pains.">>

<<footnotes "11" "Unfortunately, in my opinion, we don't have access to an objective, ideal referee or guide to help us make sense of our reality maps, to disentangle our conflicts, to heal our wounds, or to clarify our common ground. I honestly believe that if this is going to succeed, we'll both have to work for it.">> 

<<footnotes "y" "For the record, even when we disagree, I know you are still some of the smartest people I’ve ever met. Listen: I strongly care what you think. Even without your approval or understanding, I respect you. I think about what you say, a lot (perhaps too much). When all else fails, I try to think about what you would say. Before we get all weepy-eyed at that critical admission which supposedly no 'self-respecting' offspring would ever utter, I will rescue myself: It’s a fact that offspring tend to be within 10 IQ points of their parents. I don’t count myself as an exception to that rule. Further, I (almost delusionally) take myself to be absurdly intelligent (go team arrogance!), and thus, I have excellent reasons to believe you are too. The bad news is that our brains are deteriorating, thinking is heavy lifting, and we’ve hit our peaks. At some point in our lives, there is an acceleration in the crystallization of our reality maps, and we become less agile and able to radically alter and reorganize our reality maps (in my experience, that process begins or becomes more noticeable around 25-35 years old for most adults [and, I'm no exception] -- roughly within the decade after our frontal lobes have finished developing). At which point, our mental growth tends to fit our reality map instead of fundamentally shaping it. I hope we can squeeze through this gap while we still have what it takes.">>

<<footnotes "12" "e.g. I think pepperoni pizza is better than sausage pizza. You might disagree. Practically-speaking, we don't and shouldn't really care about this disagreement (although, in a valuable theoretical way, I'm fully willing to entertain the possibility there are cases in which we should consistently care). Maybe it only matters when we have exceptionally limited shared resources, and then maybe we 'take turns' or select other ways to demonstrate that we still care for these lesser-kinds of disagreed-upon preferences of each other. In any case, this disagreement almost never matters and poses no serious problem to resolve.">>

<<footnotes "13" "e.g. It would not be useful or kind of me to confront, interrogate, or humiliate a relative in his 70's for watching Fox News or reading Facebook or Breitbart as his primary information sources. Our disagreement on our political and epistemic duties can't feasibly be resolved through careful argumentation. In fact, so much of our reality maps are so far apart that we can't even engage the normal game of public reasoning, of enjoying each others' reality maps, and rooting for each others' reality maps is over in that instance. We don't understand each other enough. Thus, we begin playing a different game, wherein we aren't strong or significant friends that can talk to each other (and never will be), but we hug and say a few nice words to each other.  If one asked the other for help, we'd gladly give it. We try to share in what little we have in common.We honestly wish the other well. We love each other, but we don't really like each other (or what we like about the person is really only a distinct set of slivers of their reality map). It sucks, but that's about the best resolution we can get. It was the best we could work for.">>

<<footnotes "14" "Which is not assignment of blame. If we enter a blame game, we are put into a defensive position. We might even move on the offense by pointing out the other's hypocrisy. In considering blame, I worry that we are forced to pit the metaethical regions of our reality maps against each other (regions we have both worked hard to cultivate, ground that neither of us are willing cede). This is may not be useful to us. It may not help us listen to each other. Unfortunately, no matter how much we cushion it, some minimal degree of understanding our blameworthiness (in each others' eyes) may be inescapable to our conflict resolution.">>

<<footnotes "15" "I'm not trying to draw a line in the sand (although, I'm sure each of us has our own personal line). I'm trying to point out that it isn't a practical option for us to continually hurt each other. It isn't the loving thing to do. I take your maxim, 'if you have nothing nice to say, then say nothing at all,' to be applicable here. Unfortunately, we have a rich enough history together and we know each other so well that facial expressions, body language, pauses, the way a conversation is steered, word choice, and other aspects of our circumstances impart enormous meaning to each of us (that doesn't make us good at communicating with each other, but it means that we are sensitive to each other in ways that we aren't to others). Problematically, those cases of needing to 'say nothing at all' require more than not saying 'words' for us. Finding a way not to communicate not nice things, which can be more than our flat words, is difficult for us. This may not be a solvable problem for either of us. Worst case scenario: let's try until we can't.">>

<<footnotes "16" "My default settings tend to have an all or nothing kind of attitude (which serves me well in some ways and terribly in others). It's particularly bad for the problem of friendship. I'm working on it.">>

<<footnotes "17" "A minimum that I've spectacularly failed to accomplish since our last meeting. I am sorry I haven't been able to give you even that.">>

<<footnotes "18" "Admittedly, I (arrogantly) believe I can put my finger on the problematic disparities between our reality maps. I have had the benefit of being able to study your reality map in great detail (which I believe has begun to crystallize, which is only natural). I still share much of your map. We share a legacy of continents together, and I think we still share a crucial core. Importantly, it's not your fault that you don't know many parts of my reality map, just as it's not my fault for not knowing or having traveled the unknown parts of your reality maps.">>

<<footnotes "19" "Ideally, strong relationships enable great latitude in this respect. We afford each other spaces to make these mistakes. We have the chance to be ourselves, screw up, and it ends up being okay at the end of day. We embrace each other warts and all. But, there comes a point where we can't, where the pain is simply unbearable.">>

<<footnotes "20" "I fear this is a prime target for dismissal, as though I'm asking us to 'revolve' around each other. But, that's just what friendship is. Maybe you don't want to be friends like that. We don't have to be. I'm not claiming you have to or should. I'm saying that it is the cost of being friends with such disparate reality maps. It's simply more work to empathize with someone with a radically different reality map than it is with someone with a highly similar reality map.">>


Dear Mom and Dad,

I love you.

Thank you for making Christmas so special for my children. They've been asking for/hinting at tablets/phones (any handheld touchscreen devices) for a while now (it is a yearly cycle in our household [I am trying to ensure that my children care about, plan for, identify with, and empathize with their future selves, in this case, enough so to make sure they do not break their tablets this year]). The child-protective covering will no doubt be useful (may the yearliness cycle end with persistent, cared-for devices that we take up as extensions of ourselves). Thank you. 

[[IMF]] and I are going to use the Minecraft stopmotion kit for homeschooling together. I'm not sure [[IMF]] immediately appreciated it (that's okay) since he was overloaded in the Christmas bonanza-feeling. He's going to enjoy it. I hope it will open up a cool world for him and allow him to cultivate theories of mind and a richer sense of the 4-dimensional stage of life. Imho, it is was a very well selected gift for an autistic child. I wish I had thought of it. 

[[MSN]] loves her Minecraft handbook collection. She has been exploring its metagame and the toolchains which surround its landscape. In a plain and non-ironic sense, it is a decorated embodiment of her project. Thank you for appreciating her project and putting the grandparent seal of approval on it. It's part of who she is. 

You chose your gifts well. It shows you understand my children well, and I appreciate your empathy. You made their day, and in virtue of that, you made mine. Thank you!

Thank you for being good parents and grandparents. You have done well with what you have, where you are, who you are, and your context. 

It's hard to have a conversation when we are both crying. If I could reach out and hold you, I would. These words are the only hug I am able to give you. I'm sorry, and I love you. 

I'm sorry I don't have a gift for you yet (I'm not sure how to describe it; I am trying to make us all happy).

We're very much looking forward to seeing you soon.

Love,

[[h0p3]]
* [[2017.01.05 -- Pipefitting Log]]
* [[2017.01.11 -- Pipefitting Log]]
* [[2017.01.12 -- Pipefitting Log]]
* [[2017.01.13 -- Pipefitting Log]] 
* [[2017.01.19 -- Pipefitting Log]] 
* [[2017.01.25 -- Pipefitting Log]]
* [[2017.01.26 -- Pipefitting Log]]
* [[2017.01.28 -- Pipefitting Log]]
* [[2017.01.31 -- Pipefitting Log]]
* [[2017.01.23 -- TPP]]
* [[2017.01.27 -- RNC's Impeachment of Trump]]
* [[2017.01.30 -- Early Warning Signs of Fascism]]
* [[2017.01.31 -- Open Shadow Government]]
After visiting the Pipefitters and Plumbers Union, I found out that the earliest I'd be able to join would be in 6 months. So, I decided to go back to the technical school. Serendipitously, I came on the day they started class. They still had my application from when we first moved here, and even knew me by name (which is impressive after only having met me once or twice). They just changed me from Machining (they didn't find a teach for this class until a couple weeks ago) to Pipefitting in the system, I paid for my tuition, and went straight to class. 

<<<
[[KIN]]: The fellows I'm working with are salt of the Earth. Poor misfits, rough living, etc. I fit in fine if I hide amongst them, which isn't really fitting in. I'm not very good at hiding. I hope defensively-positioned or preemptive kindness will be enough. My sense of humor, my appreciation of substances, an ability to be a librarian for them (which I am happy to do for people), listening without judgment, and perhaps the value they may see in networking with me will be enough to at least have positive relationships with most of them (can't please everyone). 
<<<

<<<
[[RPIN]]: My brother says I will be an alien among them. He is right, or at least partially right. I do not deny my weirdness. My goal will be to network, specifically ensuring I have the space and freedom I need in my life (political, financial, and social autonomy) without burning bridges. It will be difficult. Here I feel [[KIN]]'s pull very strongly. We both build on the Marxist ground (which is obviously practical; it is innately a Redpilled theory [which can be twisted for 'evil' prescriptions]). 
<<<

I barely slept (I was excited and had a lot on my my mind) last night. When I got there today, I was taken straight to a computer lab. I'm not even supposed to be in the shop without safety training (although, it seems to be an unenforced rule). Further, I have a ton of timesink busywork they've handed me on the computer. I'm smashing through it though.<<ref "1">> I've jumped ahead with pre-testing, but the rest of the work they let you do either in their lab or at home. I've figured out that they only care about your tests in the computing part, so that's what I'm gunning straight for. I work much faster at home, especially since I have music, a chair that doesn't kill my back, and more tools available to smash. 

Passing all the pretests in a day (or a few hours) is rare. Finishing the entire computer-based learning program in a weekend will be a record at the school. In addition to just catapulting me closer to the actual Pipefitting part of the education (which is why I'm there), I'm hoping it will put me in good graces with the staff (I see that it affects funding/scholarship options). 

My teacher is both made fun of (functional alcoholic who barely spends time in the shop) but also somehow respected by the students. It will be interesting to see how much he will be able to help me. I'm going to talk to him about a co-op situation where I get to work and goto school. I desperately need to start acquiring work experience in the field. Not only is it crucial practice at the trade itself, but a chance to network, build rep, feel my way out through organizations and the landscape. I do intend to try to get on with the union. I may need to feel out first how he even feels about the union. That said, I don't even know how much his reputation matters or what social capital he has. I have to assume, at least for now, that he is an asset to me ([[RPIN]]: "that is a planning issue, not an empathy one. Obviously, I'm looking to preserve my bridges and empathize with the man."). 

Two guys, Keith and another (don't know his name yet; I forgot!), go out of their way to talk to me. It's nice. One is brand new, the other has been an apprentice for 6 years(didn't move up though, and he says he needs to come back to school to do it [I don't know if this is true]). They've been guiding me about the structure and social norms of the shop and school. They are helping to orient me. I'm glad I have people that I can talk to there, and especially to have people who will try to answer my questions (I have so many that I have to hold it back; it annoys people when I ask too many). 

I may not be going tomorrow. Very likely snowday. Fridays are apparently very relaxed too (heard they just clean the shop and leave at noon). I hope that I will have the chance to push myself hard and become adept at the technical aspects (giving me time to figure out the non-technical aspects in the field with more attention). 



----------------------------------

<<footnotes "1" "Yay, my booklearnin' has been useful">>
We received your letter from October in the mail today. It was good to hear you again.

I also forgot to say thank you for the birthday presents for the kids. j3d1h says thank you for the GoPro. She said she wants to make piano videos with it. She's definitely interested in making content/art. 1uxb0x says he loves the marble racing kit (the kids spent the better part of two days making towers). Also, they made their first stopmotion video: https://www.youtube.com/watch?v=ErFFTa4NbXc (1uxb0x is in charge of directing and narrative, j3d1h setup the tech side [she'll still do the uploading/posting, but he now can create the videos himself]). Thank you for the making their birthdays special. 

It snowed two days ago. I haven't seen real snow in a while. Our home is warm though (we found some plastic that creates an air bubble insulation for our patio + windows), and we're doing normal mammal things together (yay, I love being a mammal). You guys may want to bring some warm clothes. 

I mean this literally: you are welcome to stay with us. 

[[LET and K]] found our place (understandably) claustrophobic on their first visit, so they stayed at a hotel on their last visit. It can be tricky having family over with a small place. I know I can't provide the space that you may need, so I want you to choose whatever will make you feel comfortable. I don't want you to feel you aren't welcome, because you are. I also don't want you to feel forced to stay in a cramped room, because you aren't. 

Whatever works, let's do that.

Love,

[[h0p3]]
<<<
Hey R,

Here is the site you are looking for:

https://h0p3.xyz

I suggest starting with the About wikipage.

Fun facts:

# h0p3 = hope (https://en.wikipedia.org/wiki/Leet)
#Traditionally, getting your computer to print "hello world" on the screen is the first program that every newbie writes in a programming language.
#The top-right hand corner has a double arrow to open the sidebar. You can see see recent edits there (among many other options/tools).

Let me know if you need anything. It is very much a work in progress.

You can reach me at this e-mail (or however you wish).

Sincerely,
h0p3
<<<

-----------------------------

<<<
Hi, h0p3.

Still reading. You are a brilliant writer. And you are boldly honest. I appreciate that. It is rare.

I see your struggle. I will understand more as I get deeper into it, I am sure, but I am not offended or angry at all. Our perspectives are different, but I respect your willingness to chase the truth. I also see the despair that is chasing you. Keep ahead of it, and send out a clear signal if you sense it closing on you. We are here, and we will help.

I know that you worried on some level that I would break contact with you out of shock. Worry less. I am right here and I am not going anywhere. Lean this way when you need to lean. I choose to believe that the faith you lost will find you. I know you won't deny me the comfort of that belief, even if you find it highly unlikely.

Thank you again for trusting me with this level of transparency. More Later.

Love you! 
R
<<<

-----------------------------

<<<
Hey R,

(I'm sorry, I didn't know the last half of your first name was capitalized.)

Thank you. I don't have the words to tell you how much it means to me that you are listening and talking to me about this. It is encouraging to not be so alone on this path.

Love,
h0p3
<<<

Much has transpired since my last log. I'm learning how little we (the students) know. Our teacher is very qualified in multiple fields, has a huge list of contacts, and a lot of experience in teaching. We talked for an hour or so. I think we will get along just fine. He can see I'm chomping at the bit, and I think he will help me get where I'm going. 

I have not yet finished all of my computer work, but I'm close. I'm finally doing some bookwork too. I aced the safety exam (the welders were vexed at the difficulty of our exam that the pipefitters take). I'm going to smash the math exam (I have to take a surprising number of these, despite already demonstrating my competency). I want to cruise through the "core" book which all tradesman must complete so that I can get onto the actual pipefitting. The teacher suggests I take electives as well, so I will. 

What I lack in practical construction experience I will make up for (at least in the beginning) with raw memory, computational skill, and intense practice. I need to build a good reputation (which, at this point, amounts to a form of manipulation that I find sufficiently morally acceptable by necessity). I'm looking for portions of the job that are worth memorizing; I do have a good memory when I'm not depressed (it used to be godly before puberty). I need to first understand where the real analysis and spatial reasoning occurs. My teacher explained that planning, measuring, and blueprint/modeling is what makes a successful pipefitter. I think these will fit me very nicely. 

Our first real shop experience (whenever it eventually comes) will be pipethreading. I've been reading through our first pipefitting book and looking through our blue books (everyday carry kind of manual for the field). Fellow students have walked me through it as well. I'm excited to try my hand. 

I spoke with a 3rd-party institution which helps fund students who need it. I do, and I have a lady who has really gone to bat for me (despite the fact that I have 10 years of postsecondary education, which is normally grounds for denial of help). She is my advocate. We've gone through testing and a lot of paperwork (and apparently she had to argue with her boss), but I think there is a reasonable chance that my second and third trimester's tuition will be paid for, and I will get a bunch of tools, work clothes/glasses, books, and possibly travel expenses paid for. This is the break I need. I find out in the next two days if my application is accepted at the state level. If not, my lady says she'll appeal the decision. She gets my predicament.

The more I understand about pipefitting, the more I like it. I think this is an excellent path.




I hate to say it, but the school appears disorganized and staff incompetent in many ways (at least in my experience with schools). I have now found out the truth. I have only finished the testing requirements for the school. I actually have to pay to take "fake" certification tests (I do not respect the content of these tests) necessary to join the union or a few other companies. I'm going to take them immediately, since they may easily open local doors for me which I desperately need. The elective tests might actually be disappearing (the test makers are doing away with it). I'm not sure if they will be worth my time/money. I think I may anyways, just in case.

Be voracious and humble. Your genetic + memetic background is functionally (not morally) superior, and your competence will shine. Do it amiably and kindly. As IASIP's Dennis is unfortunately correct about, in his redpilled assessment, I must demonstrate my value to these people (only, I'm going to be empathic in the way I do it). 
AB&T's grant came through for me. My tuition (except this trimester), tools ($750 worth), boots ($200), optometrist visit, prescription safety glasses, other supplies (they call it "the bucket"), and even gas money are paid for. I am ecstatic! I wasn't sure how we were going to pay for it, and it is a huge relief to know I don't have to. I'm very lucky, and I have extensively thanked my advocate. She has made it possible for me to succeed.

Time to feel cocky (and then reign it in):

My teacher thinks I'm a high-functioning rainman or something (apparently, after hearing his stories, he has worked with couple autistic savants in his decades of pipefitting). I can perform mildly complex arithmetic and basic algebra fairly quickly in my head, and so I can snap answers back to questions he expects his students to take several minutes to solve. The trig aspects are of the job are so standardized that they can just be straight up memorized. I regularly hear praise such as "nobody has ever done it that fast" or "nobody...on the first try" etc. from him (I appreciate the praise, but that's not why I'm doing it); the other students look at me with a mix of awe and disgust (except my friend Nash [nickname for him], who started the program with me). My spatial reasoning is where I believe I'm going to blow him out of the water though. I rock blueprints, transforming objects in my head, etc. In time, with practice, I expect to do much of this CAD, self-made isometric drawing (he prides himself on this), and miniature modeling (they use wire) work in my head instantly.<<ref "1">> It is convenient to instantly understand some things. Hopefully, with hard work and a carefully balanced attitude, I can make up for my many practical deficiencies.

 I actually might do all of the work in 6 months if I can keep up my blistering pace. Unfortunately, I am bottlenecked by Nash. I'm not allowed to progress through certain modules without him at the moment. That means I have to teach Nash as we go along (help him pass his tests and assignments) so he can keep up. Nash seems okay with it though. I like the kid. He has a checkered past for someone his age, but it's fine. It was weird realizing that when I got kicked out of school, he was being born. I feel like an old man. Hell, I am an old man in this class.

It might be better to go for the full 12 months though. I might try to go for all 4 books instead of the standard 2 for the class. I want to soak up as much as I possibly can while I still can. I could also practice welding. 

I need something like 8k hours to hit journeyman. With hefty overtime (which is par for the course, apparently), I might be able to squeeze the 5 year apprecentive into 2.5 years. Regardless, I've heard you test into being a helper, and that high-end helpers can make $26 an hour + per diem. That would be sick. 

My teacher loves my idea of using a van (or trailer, or whatever) if I'm traveling for work. 




--------------------

<<footnotes "1" "//So modest!...// /s, but for real, I believe I will accel in this area. It's also considered the hardest part of the job, which may be good for me. Being a good planner and doing the abstract work effortlessly may give me serious upward mobility. I hope to be someone they desperately need. Keep dat marketability and demand as high as possible.">>
<<<
Good morning. I trust you are well today.

In reading your entries I am working hard at finding the underlying feelings feeding into them and generated by them. I believe that is what you are asking of me, and I believe that is what you most need. I want the connection between us here to be one of mutual compassion. You have been in a lot of pain for a long time. That isn't really news to me. You don't broadcast your pain, but you don't exactly mask it, either.

I will not pretend to understand everything that you say. I am tech-challenged and my training has moved in different realms. But I do understand a great deal of what you share, and have wrestled a few of the same arguments, though with different outcomes. I respect your process.  

Let me ask you how you are dealing with some practical issues. (I ask out of concern, not judgment.) In most of the programs I have encountered, there is a screening policy. Have you thought about that, and how you will cope with it if it is a part of the program in which you are participating? Of course I am also concerned for your safety. I don't know what machinery you are handling, but please take great care to be alert and maintain a good reaction time. It is hard to be objective about personal balance. There are good reasons for professional monitoring of the balance between desired and side effects. You need another set of eyes on that with you.

Networking is good, but it does not replace forming friendships. Remember to find a space in your life for friendship. It is harder work than networking, but it is more durable and more valuable. Networks are useful, but friendships are more formational. You don't need a lot of friends, but life is easier when you have a few.

Fresh air and sunshine are more than elements of a walk outside. A friend is someone who brings the social, emotional and spiritual equivalent of fresh air and sunshine into your life. I pray for a friend to come alongside you to open windows to possibilities you have not discovered.

Love always,

Me [R]
<<<

-----------------------------

<<<
Hey R,

I am doing well today. Thank you for asking (it is important to ask). To be specific: I've been feeling better since I feel like I have more direction in my life. Even if the plan isn't perfect, I have goals and a vision now. I wake up in the morning with a mission. I finally have a fire in my belly again. I hope I am not too polarized by and addicted to that mission, purpose-filled, vocation feeling. I am watching myself. Also, my sleep schedule has normalized (woot!).

How are you doing? I hope you don't think I'm out of place to ask, and you shouldn't feel compelled to answer. You are my counselor+friend+family, and it might be weird for you to reply with substance (you won't offend me). Rest assured, your response here will be redacted from my posting. I am privacy conscious (and I can see even in your word choice that you are as well). My posts are sanitized (yet honest).

If I understand you correctly, I think you are right about what I need. I'm trying to isolate the causes of these underlying feelings, which I take to be a set of beliefs (conscious or subconscious) which aren't coherent together or may be incorrect in themselves. I hope writing about these feelings and beliefs will help me change. Of course, I'm not always sure what I need to be writing about. I've been taking a shotgun approach to the problem. I write about whatever pops into my head, whatever my gut is telling me (since I think my gut/intuition is where the problems reside). Reading my spaghetti might be frustrating. Feel free to prompt me with a topic or area you want me to think about and write on. If you want me to clarify something for you or myself, please tell me. I make many mistakes. 

I also want mutual compassion. To be clear, you have been compassionate. I hear your voice as I read your letters. Conversely, I also know there is enormous anger (and sometimes insanity) in my writing here. I hope you don't take it personally (I know you have spoken to this already). I don't mean it as an attack on you at all. My mind can be dark and messy, and I'm sorry for that. I'm not good at hiding things, and I'm not sure if it would be a good thing to try and whitewash it. Unfortunately, I lack tact, and my honesty is destructive even when I don't intend it to be (I am working to be more empathic, especially in my delivery; it is not an innate skill of mine). If I'm not being compassionate, please call me out on it in the manner you see fit. I appreciate your taking the time to be my accountabilibuddy. I am listening to you, and I will do so with charity.

Your practical questions are important to me (keep them coming). I appreciate your concern. It is important to ask me! In this case, I have thought about these problems for a while. 

The program does not screen. To be clear, they couldn't have a program if they did. The class is a wonderful group of misfits, felons, and substance users. So, no problems on that front. However, you are correct that the screening process can be a real barrier in the job market. It would not be wise to close doors or burn bridges. 

Ketamine is the most valuable of medicines for treatment-resistant depression. It and its analogues are fairly uncommon substances to use illegally (recreationally or medicinally). None of the standardized drug tests actually test for ketamine. There are some extended panel lab tests which check for ketamine metabolites, but these are rare (although, I saw one study that showed some tests will give false positives for phencyclidine). Regardless, the half-life of the substance is 3-7 days, taking between 1-2 weeks to reach baseline. Both blood and urine samples can only detect within that 2 week range (2-4 days is the usual detection range for these tests, and only the specialized tests can go all the way to 2 weeks), except for very heavy use. Abstaining from a weekly 20mg DCK dose would enable someone to pass even the most extensive testing. Interviews and testing procedures can usually be planned for within this time frame.

Cannabis, however, is always tested. Unfortunately, edible users have extra difficulties as well, especially because THC is fat-soluble. Unfortunately, an obese person may still have THC-COOH stored up in their fat cells generated even a couple years ago (yikes). Needless to say, this is a minefield. Losing weight and maximizing one's metabolism is only way to flush this out. 

In microdosing cannabutter (6 days a week) and taking 2-week tolerance-breaks/reality-checks every 2 months, a chronic medicinal user would need to abstain for a bare minimum of 21 days to pass a urine test, and more likely 33-48 days (I've even seen recommendations up to 72-90 days). Hair test detection ranges from 7-90 days. Blood tests detect up to 7 days and saliva for only 24-48 hours. 

Basically, employers using saliva tests are seeking to make sure all (or nearly all) their employers pass, regardless of reality. The most common test to worry about is the urine test. A wise man would begin abstaining at least a month before he projected the testing procedure, and probably 2 months for good measure. He would also create dossiers on the employers in his area, including their pre-employment, scheduled, and random drug-testing procedures (although, you can't always find accurate information). Self-testing kits are also necessary. There is no point to going through the interview+testing procedure if you can't pass it on your own.

One must be concerned with random drugtesting. With good relationships, an employee can often be warned well in advance (especially if they are seen as an asset to the employer). This varies with the company you work for. It is crucial to understand the actual enforcement of drug policies in a company. Unfortunately, it can't always be planned for. If there is an accident, many companies will immediately administer testing on the spot. Thankfully, a wise person who uses cannabis medicinally would never endanger themselves or others by using on the job (that defeats the purpose of it). While high THC-COOH levels (being under the influence on the job) will never be found (avoiding liability), one would still fail the test (sufficient for being fired). This is where real risk analysis comes in. It's a judgment call that one must take into account given one's broader context.

Ultimately, it is the goal of every unwell person to become well, and if possible, unconditionally so. That is to say, nobody wants to use medicine if they could be just as happy, functioning, and fruitful without it. Cannabis, at least for some people, is an excellent tool for dealing with anxiety. Thus, anxiety-based medicinal users should seek to identify and solve the sources of their anxiety and find coping mechanisms which allow them to forego medicine when possible. Random testing only further motivates that problem. 

As to having a professional monitor, I'm not convinced this is nicely solvable. I agree on the objectivity problem. I am not, however, convinced there are good options available. I have been down that road. Sometimes, you have to be your own health advocate because no one else is going to do it. That is far from ideal, but it may be the only practical option. I realize that everyone feels they are the exception to the rule, and down that path we rationalize and confabulate (so, you may be saying to me: "Danger, Will Robinson!"). I am open to talking about it. Admittedly, I need to be convinced. For now, the only consistent (yet non-professional) sources of (pseudo)objectivity I have available to me are from my conversations with my brothers (every couple days) and family. 

The practical problem of socialization is also significant. I have vanishingly few people I can talk to, especially in person. Loneliness sucks. It sounds weird to be lonely even with a spouse as amazing as my wife. She is the One. She gets me. Of course, I fear I cannot complete her without believing in God (I am aware of the outlines of the theology of marriage), but not the other way around. We are best friends, and my loneliness is in no way her fault, but I think it is reasonable to hope for more than one friend (she does too). 

It's a fact that men tend to develop smaller networks (I do not mean in this the "networking" sense) of true friends. It is why they tend to die within a few years of their spouse passing, but not the other way around. Men, for genetic and memetic evolutionary reasons, lack strong social support structures. 

You are very right about the lack of friendship. I am slowly cataloging my history of friendships so that I can closely inspect them and understand what I've done right and wrong. Without trying to be arrogant, finding peers is not easy for me. There may easily be something deeply wrong about my assumptions and the way I approach friendship. It is a concept I've been thinking about for a long time now.

To be clear: I don't care about networking, except insofar as it is instrumental to me. Ugh. I could write a book on my disdain for networking, the generation of social capital. My Kantian side finds it abhorrent. I think it is the equivalent of using people. It's icky to me, and I can't double-effect my way out of it. I have no interest in shallow relationships. I demand honesty, authenticity, and directness. I want to "be myself" with my friends (not many people would appreciate who I am). Anything less is, at least to that degree, not really friendship to me. Of course, I realize this doesn't happen overnight. 

I'm a man who prefers having a few very close friends rather than a bunch of acquaintances. I am a control freak, and I rarely make myself fundamentally vulnerable to others. Few pass into my inner circle, and those who violate my personal code are rarely allowed to enter it again (you are hereby explicitly granted immunity for our letters). 

I have been on a mission to "find the others" for a while now. I'm looking for people I'd lay down in the middle of traffic for, and vice versa. Actually, I'm looking for family. Perhaps I'm seeking people I value more than myself. Unfortunately, I moved away from one of "the others" in New Orleans (we stay in touch and plan visits, but long-distance relationships really aren't the same). My brother and I have a deal we made with each other to find good friends (we both need them). It's slow going. Cool enough, I may have found one here. 

My neighbor (my wife's boss) is an exceptional man. He's autistic with graduate degrees in library science, theology, and something else (something to do with biology, I think). He said it is his new year's resolution to get to know me (and our family) this year. He is a very quirky man (as am I), and I like him a lot. We sometimes walk and talk, and I see we have similar struggles. I must do that more. I need to make a point of it. He's very finicky about certain things (not in a bad way, it's just part of his nature), so I will see if I can schedule time with him on a weekly basis. Maybe we can have a game night with our families. 

On a related note, I've actually tried to reaching out to your brother. He's not very talkative over e-mail (that doesn't mean he isn't paying attention though). Our brief phone conversation over Thanksgiving was good though. It's much easier to connect with him that way. While I know you love me, it may be possible you view me as a kind of poison: a volatile-appearing, broken man with dangerous ideas. I would never seek to endanger our family. So, I'll just straight up ask you: is it okay with you if I become better friends with your brother? I doubt we would ever be super close, but I'd like to be his friend. I love talking to him. He's wonderful.

This may also sound dumb, but how do you define friendship? We are in agreement on the assessment you've given so far.

Let me say again, I could easily be wrong about these things. This is a work in progress. Admittedly, I seek reasons to accept and reject my beliefs. Of course, I may just be accused of lacking integrity here, that somehow trying to be so excruciatingly rational is itself a thought-terminator, a smoke-screen, and a method to confabulate.

Anyways, I know you might not have the answers or be able to say it in the way I need to hear it, but I am listening. Thank you for listening to me. I know this is a lot of work, and I'm not claiming you are obligated to help me. 

Sincerely,

h0p3
<<<


<<<
I will respond in greater detail to your note later, but let me hit a couple of things really quickly before I head out to help a family with funeral arrangements. These are things I don't want you to wonder about. 

I do not consider you a toxic person. I think of you as a seeker. There is a huge difference. 

I am delighted that you and my brother are talking. [[CG]] is a great person once you get through his barriers.  

Love you!

[[R]]
<<<
AB&T came through. It includes: a $10 per diem, a voucher for my books (I was able to "return" my books for a refund to immediately buy them back with the voucher), some $170 work boots that fit like a dream, a $230 bucket of work-related paraphernalia (which I sorely need for the class), and soon to have my prescription safety glasses. In the future, I will receive a custom $750 tool package (apparently, I'll have to chance to select my tools) and my tuition for the remaining two trimesters will be paid for. I'll continue to seek out funding and help. I need it.

I have completed all the computerized coursework, and I've passed the paid "union" tests (these are official tests which we prepare for in the coursework) with my fastest + highest record breaking perfect scores (Platinum "certification"...I'll treasure it forever, lulz). I am glad to have it out of the way though; it is a load off my chest to be done with this part. It allows me to focus on the next task. An optional paid OSHA course+exam is available. I'll be taking it upon my teacher's advice. Apparently, there are imposed time limits that prevent you from moving too quickly through the course, so I'll be breaking it up and digest it in smaller increments.

I've spoken with my teacher, and since I'll have nothing to do in the computer labs on Thursdays, he agreed to allow me to focus on hands-on practice (likely the most important thing in the school itself, and the thing I am least naturally talented at). I believe I will crush the bookwork (I have been so far). It's the application that I must perfect. I do not anticipate I will be immediately excellent at this (I could easily be awful at it), but with hardwork, I will excel. 

My attitude and fire will set me apart. I must remember that I will fail, that I will mess up, and that I must stand up again and again. I must remember that my attitude itself will falter, that I will be akratic, and that I will need to have a self-monitor program to continually guard against lettting my flame die out. I have to hope I will succeed. What other option is there?

Appearing humble pays off, particularly with rural people. Show them humility, make them falsely feel superior (or if you are lucky, you can help them realize they are equal in some respect they value), make them feel like you "deserve" their help because you are humble (and "know your place" in relation to them), and they will.<<ref "1">> I must restrain demonstrations of pride (since that incites irrational retaliation); I must be the underdog they want to cheer on, but at the same time, I will be the best fucking student they have ever had. I must since I have no reputation, background, network or other resources to rely upon. While I will do my best to network and plan, I believe the word of the school, my certifications, and my teacher's recommendations will be some valuable keys to unlocking my pipefitting career's gateway. Jump through all the hoops! I need to look good on paper and in the eyes of others because I want to succeed. My family is counting on me to succeed, and I may not have much time left with Trump as president to safeguard us against the world.

On a different not: the pipefitting class is having a unique "bear meat" cookout tomorrow. I'm excited to try it; I've never tasted it before. I'm bringing k0sh3k's "mousse" pumpkin pies (we made a few more for the family, since they are delicious). The teacher has already offered to let me bring some bear meat home for k0sh3k. 


----------------------

<<footnotes "1" "Let's be crystal fucking clear here: their attitude towards humility is NOT rationally empathic or Kantian at all. Those arguments will be dismissed out of hand; they have no time for the truth. This is a gutteral response, an envy, a hatred, an otherising affect. People relish taking others down a 'peg or two' in public. It is a classic trait of humans, and Southerner's (my heritage) are no exception. I will dance for them, as is required. Sometimes people will not respect your human dignity (it is easy to be irrational), and then you must take it from them: it may be the only practical option.">>
Good morning, [[h0p3]].

I am glad that you are doing better on a practical level, and I believe that you are. I am also pleased that you are asking about my well-being. I am not afraid of dual relationships since I firmly believe that all human interaction is multi-faceted. (See – I am no counselor!) We are family, and I want us to always be that for each other. To answer you, I am well but tired, which seems to be my usual state.

I have been reading your work and pondering, meditating and praying about what I need to say to you. I want to say it in words that convey my profound respect for you and my need to be absolutely honest with you about the ways that my process and yours are alike and differ. But more than that, I need to swim beyond my depth in so many ways to get to you! I don’t want my faltering to damage you. (And, while I say that, please know that you are in no way damaging or offending me.) Still, I need to say this while I am listening in the hope that you can (and will) listen while you are mentally decompressing – which is something you obviously need to do.

We come at the same truth from different perspectives, so we must stretch to see things from each other’s point of view. I am hearing you, but as I am listening, I am convinced that I am hearing more than you hear when you listen to yourself. You are a deeply spiritually awake and aware person. It is that spiritual awareness that is causing much of your intense pain.

As I see it, you define all that you recognize as reality by your senses and the extension of those senses through enhanced observation. You prove things to yourself before you believe them. What you cannot prove, you do not want to believe. This urge comes from a brilliant understanding of natural law and the inner workings of the observable world. You can, in effect, see things that others cannot see, so you reason that what you cannot see (figure, understand, define) does not actually exist. I get that.

But what do you do with that nagging pull you call residual Christianity?
Ask yourself why you didn’t rage at Santa Claus when you learned that he didn’t exist. Even if you grew up believing that his was just a sweet children’s story, the question is still valid. You might denounce him, but you are not angry with him because there is no “him” with which to be angry. The same goes for a whole array of fictional characters who were real to you on some level, but whose existence you know to deny. You might learn from them, react to them and even model after them to some extent, but you do not rail at them because they are not there in any real sense of the word.

God is different. You can deny the existence of God (or, at least of the God to whom you were introduced) because you can neither define Him nor accept the definition of others for Him, but you can’t seem to shake Him. He doesn’t exist for you, but He relentlessly follows you around.

Put that in your pocket for a minute and ask yourself this: do you fully understand the natural world? I know that you understand it in a deeper and richer way than I do, but does it still hold any mystery for you? How does one grasp the concept of mystery when mystery is a rare commodity? So, look up from the natural world and consider the concept of “concepts.”

Do you believe that peace exists? I doubt that you have ever seen a moment of it in your life. I know that I haven’t. And yet we both chase it with all our might. 

Do you believe in justice? How often have you seen it in pure form? But you reach for it, don’t you?

Consider for a moment that there is a layer of reality beyond the observable that we do not have senses to detect, but that we are bound to acknowledge because it resonates with something inside us that we can’t define. We are drawn to peace even though we don’t experience it. We reach for justice even though it hovers beyond us. We cannot see, hear, taste, touch or smell them. We do not have adequate equations to quantify them. But we know that they are there and we ache to be where they are. 

What causes that?

We are like air bubbles floating through miles of seawater trying to burst into the expanse of the sky. We are spirit-things surrounded by a constructed reality – we understand the reality around us because we are encased in it and we are equipped to sense and interact with it, still we cannot resist the urge to rise. 

The sense of desperation in you is conviction. Now, let me redefine that for you, because you probably know the term conviction as a sort of shaming awareness of sin, and that is one of its functions, but that is not what it truly is. Conviction is a deep-seated spiritual awareness of a reality beyond proof. It is faith in its raw form. It is what Scripture calls the “measure of faith” resident in everyone created in God’s image.

Michael, you are spirit, and you are reaching for Spirit, but you are both attracted and repelled by your experience of God. You might blame that on your parents’ presentation of God, or on the way God filters through the muck of the world, but what really generates that angst is the way you – yourself – are experiencing God. It is so hard to see the wrath of which God is capable when we have so little experience with an inability to understand. We are used to working things out to a proven resolution, and here we have a problem that won’t resolve. How can a good and loving God permit – even generate to some extent – such obvious evil?  

Paul dealt with it in Romans 8:18-25 (NASB): “For I consider that the sufferings of this present time are not worthy to be compared with the glory that is to be revealed to us. For the anxious longing of the creation waits eagerly for the revealing of the sons of God. For the creation was subjected to futility, not willingly, but because of Him who subjected it, in hope that the creation itself also will be set free from its slavery to corruption into the freedom of the glory of the children of God. For we know that the whole creation groans and suffers the pains of childbirth together until now. And not only this, but also we ourselves, having the first fruits of the Spirit, even we ourselves groan within ourselves, waiting eagerly for our adoption as sons, the redemption of our body. For in hope we have been saved, but hope that is seen is not hope; for who hopes for what he already sees? But if we hope for what we do not see, with perseverance we wait eagerly for it.”

Why is creation subjected to all this futility? In what way can any of this apparent barbarity be related to hope? God, we simply cannot understand!
Now put that in your pocket with the idea that this God is chasing you around and think about this:

You know the story Jesus told about how hard it is for rich men to break through to the Kingdom of God? Why is it so hard? It is because they have to lay down something they value more than anything else in the world, and they have so stinkin’ much of it to lay down! I don’t have that problem, and neither do you. 

Or do we?

What if the same rule applies to other forms of wealth? A wealth of knowledge, of intuition, of creativity, of intellect… is any one of these easier to lay down than a few billion dollars? I think not. We are very accustomed to leaning into our own strength, and we have seen it topple all the problems we have turned it on. All, that is, but One.

What if your greatest strength is your greatest impediment to knowing the God you cannot stop seeking because He is relentlessly seeking you? What if the fact that you cannot understand Him is compelling you to deny Him when you cannot deny Him without denying yourself? What if I told you that that is the extreme end of every gifted person’s quest for (flight from) God?

In the end, you come to the realization that you cannot reconcile God with the natural world any more than you can blend the sea with the sky. You just have to decide whether you will recognize yourself for who you are – an air-bubble transforming into your true self above the reality around you – or a part of the reality encasing you and divorced from the sky. No matter what you decide, you will rise. All you are deciding now is how the air above you will receive you when you are freed from this present reality. 

I believe that you will make peace with the God you are presently denying, because I am convinced that you are too mentally honest to do otherwise. I pray that God protects you and your family – my family – in the process. I would tell you to stop making it so hard on yourself, but that would be like telling you to stop breathing the air. This is your journey. I would not presume to drag you along it even if I could. But can you see my little light shining from where you are? I am a bit further along on a very similar journey. I am listening to you. I am praying for you. And if you need me, I am here.

​Now that that's said, I can get back to my listening, and you can (I hope) get back to your decompressing. (You knew I was a preacher, and that preachers preach, right?) Still, I want you to be heard and to know that your journey matters. 


I love you, Son,

[[R]]
//For the record, I'm completely against IP rights as they are defined by all standard Western legal, political, ethical, academic, and philosophical systems. Intellectual objects should not be treated as objects we can own and prevent others from using for the sake of economic gain (it's hard to unbrainwash people on this topic -- a lot of otherwise intelligent people cannot see the forest for the trees here).
//

TPP (in its various incarnations) is the South East Asian (SEAsian [I'll call it Seasia]) equivalent of NAFTA at face value. At first glance, TPP seems reasonably justified by US nationalist and capitalist frameworks (but even they have been fooled beyond their normal foolishness). It's a fact that many tech and service jobs would be hit by TPP as badly as NAFTA hit manufacturing (I'm cosmopolitan enough in my theory of justice that I'm not necessarily against it; I care about humans, not merely Americans). Essentially, the US would export large swathes of our tech and service industries to Seasia in exchange for an expanded IP-based (intellectual property) industries penetration of Seasian countries by syncretically injecting and enforcing US IP laws within Seasia's various legal systems. 

IP-based corporations have been unable to make serious progress in Seasia specifically because IP rights are not actually enforced in the region. Of course, lip service and sacrificial lambs are paid, but not an iota more is enforced (it makes sense too, since there is a vast amount of utility to gain from not subjecting their people to IP regimes). By using the US government's power to generate the legal obligations to enforce the kinds of IP rights that exist in the US in other Seasia, IP-based corporations stand to make a ton of money.

We sacrifice our tech (considered by corporations to be absurdly overpaid, hence H1B visas, etc.) and some of the better paying service industry sectors by outsourcing it to other nations in exchange for making our IP-based corporations extremely wealthy. This is supposed to be the trade the American people are thought to be accepting. Supposedly, our IP-industries will flourish (but not the average American, since those jobs will only continue to be outsourced through TPP). Further supposed, IP-based companies will pay taxes on their growth, but it is obvious that they do not pay taxes in the first place. Go ahead and check. These multi-nationals, especially the IP-based, tend to keep their transactions and their wealth outside of the US and its tax policy quite effectively. 

With the outsourcing of our tech jobs, it is obvious that Americans will only be losing at every turn, and it seems that Seasians face a mixed bag (I see short term gains, but I think it's also bad for them in the long run). IP-rights-holders are the only clear winners here. They will pay people less, have legal powers to maintain their monopolies and control of information, and continue to avoid paying taxes.

It gets worse though. By hijacking the US legal system, the US is being used to enforce the will of IP-based corporations (Tech Giants like Google, Apple, Microsoft, IBM, etc., but also Pharma, Auto, and many more). Essentially, US corporations would have a treaty-based transnational method to enforce their US-like IP rights in Seasia. Problematically, "third-party" arbiters for these transnational legal disputes generated through TPP are controlled primarily (or entirely) by the IP-based US corporations seeking to enforce the US IP regime in Seasia. When the Plaintiff owns all the Judges, guess who always wins? Exactly. 

The fundamental political problem here is that we all assume that legal power in the US is very often equivalent to a significant degree of international legal power, and unfortunately, we have been tricked into thinking TPP will simply increase US power. This is a half truth. So, Seasia is the key to IP rights enforcement (among others) in Asia. TPP is thought to be the foothold the West needs to politically and economically penetrate the Asian giants like China, India, and probably Russia. The goal of the US and Europe is to inject Western legal systems into Asia; i.e. for Western power to spread in Asia. If we convert Seasia, crucial trading partners to China, we will have the bargaining chips to force China's hand to open their markets and legal systems to us. We are made to be afraid of the big bad Asian Tiger. The problem is that it isn't the Western people who are gaining power (assuming that's even a good thing), but that it is the owners of Western IP-based corporations gaining the power.

Ah, so here now we see the scarier Golem emerge: in bootstrapping transnational legal power through the US legal system, these IP-based corporations generate a partial yet significant kind of transnational legal sovereignty. This is the legal transfer of a non-trivial degree of sovereignty from every TPP-signing nation-state to owners of IP-based multi-national corporations largely based in the US. The owners of these corporations become serious wielders of US political, economic, and perhaps indirectly militaristic might; they do so without paying for it and while suffering few, if any, checks-and-balances on their empowerment. Nation-state legal sovereignty is giving way to a new kind of entity in political philosophy which we have not yet effectively named or understood.

TPP exists to make IP-based owners of US corporations incredibly wealthy while generating a 2nd-order kind of internationally politically sovereign entity through the US legal system. This is the continued emergence of the [[Hyperclass]]. Our sacrifice will only enrich the multi-national elite, those who are subjects to no sovereign. They are the new international aristocracy. They are eating us from the inside out using our own tools of statecraft against us. 

So, let's be clear. The U.S. sacrifices significant portions of its better paying jobs with no safety nets or educational mobility, falling wages, which is part of the systematic transfer of our wealth to the [[Hyperclass]]. The economic power of the people is being squeezed out of them, and it's happening to even the middle and upper classes (only the 1% of the 1% of the 1% are gaining in a winner-take all economy). Further, Seasia and eventually China and the rest of Asia will bow down to Western legal systems trojan-horsed through IP-rights enforcement enabled by TPP. It is not obvious we will get cheaper products, but even if we did, it is not obvious that the overall loss of income would be worth it (it very much seems not if the past 30 years have shown us anything). Not to mention, the people of Asia will be enslaved to an IP system (a legal regime with no fitting political and moral theory to justify it, as I have argued against elsewhere). The loss of intellectual freedoms, our wealth, and our mobility is frightening. And, this is all done in the name of US power, when it isn't even an increase in democratic Western power in Asia at all, but rather the empowerment of the owners of IP-based US corporations.

This is Trickle-up Economics and the centralization of political power in the hands of people who aren't themselves subject to the rule of law and taxes of various nations. They aren't citizens of any nation. They are beholden to no one. They are thieves of our political rights and wealth. 

Google is widely known to have had Obama's ear. I doubt they own Trump though. It appears Trump did the right act, but for who knows what reason. I am pleased with TPP being off the table. How does this empower, enrich, or help Trump? That's what I want to understand. Is he owned by someone else, and to what degree? I believe Donald Trump is likely going to make a significant amount of money off this (or perhaps pay off a significant number of debts). 

My current guess as to why Trump killed TPP was because China and Russia incentivized the behavior in Trump, since they definitely don't want their trading partners being injected with Western legal systems while handing authority over to IP-owners. This would be bad news for their economies.

So, TPP appears foiled for now. We will see how the Hyperclass will continue to cultivate, centralize, and consolidate their power through Trump. The proletariat class will only continue to become poorer, less-educated, less-powerful, and essentially more enslaved.

I'm finished with all the major tests except for OSHA-10. We finally got through the major bookwork necessary to start working in the shop. I actually threaded pipe today. It's easy. I'm glad it is easy too. I want to perfect it and streamline this process, from the tiny handmovements, to planning, to logistics, etc. I want to understand the variations in the tools, to be an effective troubleshooter. 

Today, my partner, Nash, clearly failed to measure correctly (twice) and fucked up the threads a couple times. At least for now, I work faster and with few errors without him I believe (with time, I'm sure we'll equalize). Thankfully, there are two different threading machines (one shop and another portable) which we will take turns on. We've decided we are going to divide the work to complete projects and to plan how to divide the work wisely, fairly, etc. We want to smash this course.
Today I didn't have any computer labwork to do because I'm done (minus OSHA-10 [not part of the curriculum, but I'm doing it because I was advised of its value], but I'm very close to done). Since I threaded pipes well enough yesterday, I was allowed to start working on "drawings" as my teacher called it (I call them schematics; I predict I will hear many different names for it).<<ref "1">> Basically, he handed me a schematic:

*I understood what it looked like
** I built a wire replica for good measure, but this one was as simple as it got
*I did the math to find the correct lengths and angles
** I checked my work twice. 
***If I get it wrong here, I will have wasted enormous amounts of time and energy. I want to be intelligent in my laziness (to work hard in the right way at being lazy).
*I found the unprocessed pieces I needed
** I made sure I had decent fittings especially. Our pipe, fittings, etc. (the raw materials of our trade) are unacceptably used and chewed up because the school skimps and cost-cuts a bit too hard. I mean that in a grateful way too. Further, that isn't to say I don't need practice with these materials (I will deal with used parts in the field plenty. But, most of the work is done with much higher quality (new) material because the labor alone is so expensive that you want new parts. I would like my shop to match as best as possible the conditions of the field. 
* I would generally (with exceptions) cut, ream, and thread. I'd clean, test (3-ish spins by hand, but 4 is fine). and also dismount it. I'd measure if necessary, then cut, ream, and thread. I'd give a final clean, measure it, and if it passed set in my 
* We went to the table, secured pieces in place, and started screwing our threaded pipe together<<ref "1">>
** We had to reorient and resecure the object being produced many times.
** We needed to know the directions to place the object in, and we needed to know which direction to put in a new fitting (and essentially where the next pipe would be installed.
***The further you could see into the future here, the fewer reorientations and adjustments you'd need to make. This is a key point of efficiency.
*** I hope to become very good at this. I will practice rotations in my mind because I will constantly be rotating these larger schematic objects I'm building. It's part of the building process. Being able to orient myself (or it) instantly will call me to intuitively know the right way to build these objects. The efficient, fast, and lowest effort way to build them. Work smarter, not harder. This is about measuring twice before you cut in a process-management sort of way. There are a stream of things we do in a certain order. The goal is to build the right streamlined process. 
* I spent time balancing things because a peer said I should. The teacher came by and said we didn't need to. He told us to break it down, and he gave me another schematic to do.

I'm working out how I should setup my workspaces and workflow (and on how I want to develop it and learn to test). 

* Should I get used to measuring on the threader?
** It's harder to make sure you get it right. There isn't much space, it's a dangerous place (the torque on this machine is insane, and even if you feel safe, why take the risk?), you feel rushed when you do it that way, and I've seen a lot of actualy measurement mistakes happen after relying upon measuring at the threader. 
*** I fear I need the right measuring dance and tool to get this done well. I should think about it.
** I wish I had the schematic and math with me and that marking it on the threader would be the way to go. It would be nice to just bring the raw pipe up, bang them out all on the spot, and then bring them to the table to do the work. Walking between the table over and over is a waste of time.  
* I found it best to keep my pieces organized and separated in piles. I also drew out my schematic on the table with my pieces (2-d). This made it very easy to put together.
** It was weird that my teacher did not immediately understand what I had done on the table. It was obviously useful.
* I measured more often than I needed to. We want to measure enough and at the righto confusingly called TL) times to avoid risks, but we need to make sure we are efficient about it. For now, you measure too often, but work to find when it isn't necessary, and find out exactly why it was necessary when it was.

So, the dream process (as I understand it) goes like this:

# Receive and understand schematic
# Write quantity of each fitting type we need
# Write the Nominal Size TO90, 2TO90, Flanges, and if necessary TO45, 2TO45 
## I've made up these names. It's a decent convention though.
## Find "90's" TO (takeouts) on page 90 (delicious coincidence) in my manual.
## Assuming BF is 45° (it has been so far), find "45's" TO in Notes section of my manual (teacher just gave them to us to write down). 
###I should actually understand this better and have my own extensive cheat sheet. 

# Write the CL (cut length) of individual pipes 
## I have no idea why this part isn't done in a CAD program. It seems like it would be the best way to do it. Why rely upon humans for calculations?
## Find special travel lengths (anything that isn't taking a 90° angle on the isometric graph)
###The easy ones show two 45° angles. 
####We immediately know our BF° 
####We can easily calculate our Travel length (hypotenuse) =  √(a^^2^^ + b^^2^^)
###Special Travel Boxes (literally show a box on the isometric graph)
####TL of Travel (also sometimes called TL) ≈ √(Run^^2^^ + Set^^2^^ + Rise^^2^^) to the nearest 1/16th of an inch.
####Roll° ≈ tan^^-1^^(Set/Run) to the nearest whole degee.
####Rise° ≈ sin^^-1^^(Rise/Travel) to the nearest whole degee.
####BF° (Bottom Fitting, but also identical to the top fitting in parallel Runs) ≈ cos^^-1^^(cos(Roll°) * cos(Rise°)) to the nearest whole degee.
## Construct formulas for each pipe
### Subtract True length from appropriate TOs: here are the combinations I've seen:
#### TL - (TO90)
#### TL - (2TO90)
#### TL - (TO90 + Flange)
#### TL - (TO90 + TO45)
#### TL - (2TO45)
## Solve formulas for each pipe
## Check formulas and answers to each pipe
### Make sure you got the math right. Your theoretical measurements need to be checked twice because the application of theory is a metaphorical cut. You have to start trusting trust in the move from doxa to praxis, and therefore you should double check your doxa because you won't be able to undo the damage it causes when you get it wrong. This sounds paranoid and like a lot of work, and perhaps I will become so adept that I won't need to measure twice in my math. For now, assume you make mistakes: you are not a virtuous pipefitter (although, you can strive to be a virtuous pipefitter apprecentice). 
# Gather pipefittings and the raw pipe (we have to hunt through scraps)
## Organize it. Have a workflow.
# Cutting and Threading
## Check equipment
## Work from largest to small pipes
### If you make a mistake, the lost effort can be mitigated by building other smaller pieces from our mistaken piece.
## Pre-measure (again!) the pipe to make sure it can produce the threaded pipe we want to make
## The Cycle:
### Mount
### Cut
### Ream
### Thread
### Dismount
### Clean
### Test
####It can be skipped, but it is unclear when and why. 
#####You obviously must do it on the first one. 
#####If you did it once every pipe, then doing it on the first thread seems best since, if there's a problem, then you haven't wasted too much work. 
### Measure and mark
### Repeat
# Tape/Seal your pipethreads
## I suggest laying out the taped pipe in the schematic's isometric build pattern (with fittings at the joints) on the table. Know where you are, where you are going, and how it fits. If you can't, then at least have an ordering to retrieve the part you need when you need it. We want an efficient assembly line.
# Building the Object in the Schematic
## You may need a second person. The counterleverage (need a word) is necessary for certain turns of the pipe/fittings.
## The order is not always clear. Think about this one. Your teacher had no advice to give other than possibly starting with the largest one (he did not have much to say here). Your building space and mounting requirements may dictate much of what counts as the right order.
## Make it level and plumb along all necessary axes while being "tight enough" (still unclear on what counts as that)
# ???
# Profit

My teacher does a measurement after all the cuts where he adds his TO's to his CL by overextending his measuring tape. It does not seem necessary or useful to me. I do not see why he wants to do it that way another than as another check on whether or not he did the math right. If you trust your math (and you should be the time you are cutting), then why not just check your actual cut pipe lengths to the CL variable?

-------------------

<<footnotes "1" "Tangent: I think my teacher's vocabulary is interesting. He knows his job, no doubt. He's an excellent practitioner, highly respected in our small community. He doesn't seem to understand the theory of his job very well though. It's like how my dad says my grandpa can't perform algebra and doesn't really understand that he is actually implementing algebra in his everyday work. We use basic trig everyday (which I barely understand), but my teacher doesn't even know the word //hypotenuse//. He gives us formulas literally as a step-by-step choreography on our calculators (you push this button, then this button, and so on...) without a sufficient understanding or interest in how or why or what he is doing. He doesn't understand the formulas themselves, and I worry he doesn't even care that he doesn't understand. It makes me both both impressed and sad at the same time. It is clear that significant portions of the intellectual part will be me doing all the lifting (which is fine, ultimately, we all learn alone [even when we have a teacher]).">>

<<footnotes "2" "That is literally the gayest sentence I have ever written.">>
A while back, [[k0sh3k]] suggested to me a speculative murmur that I can't quite shake. Her claim was that the RNC is going to impeach Trump. After reflection, I'm increasingly convinced this is a real possibility. Pence is a fairly standard Republican for this day and age, and obviously more in line with the RNC's policies and strategies. He's the leader the RNC really wants. So, I'm open to the possibility that Trump's presidency is an egg which will hatch Pence's presidency. Before Pence emerges, the RNC will extract as much political capital from Trump as they can.

The idea is that Trump, attention and media whore that he is (there is no such thing as bad press in his eyes, just as long as everyone thinks he's rich and powerful, that is good enough to him), will happily and perhaps unknowingly (in a sense) take credit for doing the RNC's dirty work (stuff they wanted implemented, but stuff they don't want to sacrifice their political capital on unless they must). I'm not sure all of what is on the dirty work list that Trump will be scapegoated for during impeachment (even if and when he doesn't actually have the power and influence to support and push these through), but I believe that "dreamlist" includes:

* The elimination of social safety nets, opportunity equalizers, medicare, SS,<<ref "1">> etc.
* Deregulating markets at all levels, including the limiting, removal, or twisting of environmental and natural resource preservation, mobility and neutrality protections, conflict of interest and collusion prevention, and anti-competitive laws and policies.
* Raising taxes on the poor and the remainder of the middle class while simultaneously giving enormous tax breaks, shelters, and higher financial mobility to the wealthy. 
* A marked assault on voter rights and continued gerrymandering.
* Opening the gates for a striking expansion of the prison-industrial-complex, debtor's prisons, police-militarization, the erosion of due process, etc.
* Advancing US imperialism and nationalism (while isolating us in other respects) and continuing to feed our gargantuan military-industrial-complex
* Dismantling some international "legal" obligations and many relationships (as rumored: to the benefit of Russia)
* Injecting steroids into the surveillance+censorship-industrial-complex, codifying what Big Brother already does and perhaps forcing mandatory backdoors on us all.

I don't know when the RNC would slip the Impeachment dagger in Trump's back, but I'm sure they would want to make use of their "sacrificial lamb" as much as possible before disposing of him. Maybe Trump is going to politically hang himself, and the RNC will feed him the rope. Even if it never comes to fruition, it could simply be a form of leverage, a threat the majority-holding RNC hold over Trump's head.

Ultimately, while I think Trump is good at campaigning and getting screen time, I'm not yet convinced he has any clue what he is doing politically in some crucial respects (although, he is clearly very talented at what he does). While power and wealth will likely centralize strongly under his reign, I'm still convinced Trump is accepting being used as a political pawn in exchange for 'dat publicity and wealth-based virtue signaling.

If I am wrong, if Trump is more competent than I can discern, then we may have an even bigger problem. Trump's moral insanity is the stuff of fascist dictators. 

I hope I am completely wrong. So far, his executive orders have not given me much hope. We are all holding our breaths and biding time.

-------------------------

<<footnotes "1" "Not that the Baby Boomers deserve my help. We're in a mess they have largely created with their psychopathic, egoistic destruction of all of ours futures (I believe they have already thrown the human species off the cliff). Even if I ignore blame via maximum empathy, it is clear that they are in no small part causally (even though they aren't morally) responsible for the state of our world. Time will tell if my generation will be the saviors our species needs or just more of the same. I'm betting we will fail.">>
Nash and I put together a more complex object before it was time to do our weekly cleaning of the shop (apparently, the teacher designed the schematic just for us, the "upperclassmen" hadn't seen it before; they said that Nash and I were likely going to do a lot more work than they did). Getting the right Level and Plumb is not easy with our materials. Our teacher is a stickler too. We had a pipe very slightly off, but we passed the test.

I clearly need more practice on the construction of these objects. I do not have the sense of knowing exactly what to do when, where, and why. It will be a road to travel to become virtuous at this.

I've finished the OSHA-10! What a time consuming process it was. I think I might also take the optional assessments just in case. I don't want to have to do this again. Plus, there is a Welding and Cutting assessment that may be important to know.
 I read Animal Farm two decades ago, and it set me on a path. I've long thought there was something deeply right about that genre's descriptions of who we are as human beings. I see the golem we are raising. Of course, we always risk violating Godwin's law. What regime isn't compared to Hitler? Here's the crucial fact: fascism comes in degrees and kinds, and it seems to have many definitions and associations. I think we are slipping into "new normals." Below you will find Britt's "Early Warning Signs of Fascism."<<ref "1">> Included are my oversimplified, sweepingly generalized ratings (with bias!) of the current political climate:

* USA | Political Problematic
* 4/10 | Powerful and continuing nationalism
* 7/10 | Disdain for human rights
* 5/10 | Identification of enemies as a unifying cause
* 3/10 | Supremacy of the military
* 2/10 | Rampant sexism
* 8/10 | Controlled mass media
* 9/10 | Obsession with national security
* 6/10 | Religion and government intertwined
* 9/10 | Corporate power protected
* 6/10 | Labor power suppressed
* 5/10 | Disdain for intellectuals and the arts
* 5/10 | Obsession with crime and punishment
* 8/10 | Rampant cronyism and corruption
* 6/10 | Fraudulent elections

Lists like these are useless, except when they aren't.

Obviously the US is not monolithic. It's large, diverse, complex, and deeply divided. The various sects within each of the proletariat, bourgeoisie, ruling, and hyper classes have their own ratings, as well as different contributions and relationships to these warnings signs.<<ref "2">> 

Fascism is the last defense of capitalism. This is late stage capitalism in the developed world. 

-----------------------

<<footnotes "1" "Laurence W. Britt wrote about the common signs of fascism in April, 2003, after researching seven fascist regimes: Hitler's Nazi Germany; Mussolini's Italy; Franco's Spain; Salazar's Portugal; Papadopoulos' Greece; Pinochet's Chile; Suharto's Indonesia. It pulls on my heart strings, but that doesn't mean this is an accurate list. Something about it seems obviously right though.">>

<<footnotes "2" "I have the kneejerk reaction to put Proles one side and everyone else on the the other. There is some truth to being that generalized, but our opponents are divided in crucial ways.">>
Governments aren't monolithic. Shadows come in degrees, and this administration is undoubtedly shady. Yes, there is an odd interplay between open and shadow. I'm not quite sure what to think of it.

It is clear, however, that policy design and the process of generating, clarifying, and disseminating information inside the execute branch is moving away from standard conventions and constructs. We've elected an administration which is eschewing record keeping and stakeholder-based policy sculpting in favor of empowering an unaccountable restricted cabal of Trump's //trusted// advisors. This is terrible precedent for historical reasons, but it is also a bad thing in an immediate and practical way. Internal transparency is increasingly opaque. The paper trail is disappearing and perhaps no longer even being generated. There are internal witch hunts and an alarming paranoia permeates. Power is brazenly being centralized behind closed doors. Fewer and fewer men control our lives. 

I'm increasingly convinced that Trump is at least quarter-puppet. Beyond Trump's engagement in a dangerous prosperity cult (outside of a handful of unique Christians I've met, ultimately all Christians buy into some prosperity teaching), Fox News and Breitbart (also prosperity cults in a way) are enormously influential in his life. They have his ear, and I think they are integrated into this new shadow government. 
I gave my mom the first pipe I threaded. 

We did much of the same: take a schematic, build it, have it checked, take it down, change pipe size, do it again. I expect to become adept at this process. I hope it becomes second nature to me to the point that I can think about other stuff as I do it (safely, ofc). I'm told I will have many such similar projects over the course of the trimester. So be it. I need the practice.

Atm, I'm fairly sore. I'm not used to this level of physical exertion. It isn't on the order of lifting weights and serious workouts though. We'll see as the week progresses how it goes. I'm sure I will grow into it. I tend to develop muscle quickly enough. As long as I take care of my flexibility, my natural strength growth factor will carry me.
* [[2017.02.02 -- Pipefitting Log]]
* [[2017.02.03 -- Pipefitting Log]]
* [[2017.02.07 -- Pipefitting Log]]
* [[2017.02.09 -- Pipefitting Log]]
* [[2017.02.10 -- Pipefitting Log]]
* [[2017.02.13 -- Pipefitting Log]]
* [[2017.02.14 -- Pipefitting Log]]
* [[2017.02.15 -- Pipefitting Log]]
* [[2017.02.16 -- Pipefitting Log]]
* [[2017.02.19 -- Pipefitting Log]]
* [[2017.02.20 -- Pipefitting Log]]
* [[2017.02.21 -- Pipefitting Log]]
* [[2017.02.23 -- Pipefitting Log]]
* [[2017.02.24 -- Pipefitting Log]]
* [[2017.02.28 -- Pipefitting Log]]
* [[2017.02.02 -- Conservative DNC]]
* [[2017.02.12 -- Devices of the Hyperclass]]
* [[2017.02.13 -- Trump's Incentives to Reign as POTUS]]
* [[2017.02.14 -- Real Unemployment]]
* [[2017.02.14 -- Russian-Trump Relations]]
* [[2017.02.14 -- Automated Memetic Warfare]]
* [[2017.02.16 -- Democratic Hypocrisy on Whistleblowing]]
* [[2017.02.18 -- The Crisis of 21st Century Science]]
* [[2017.02.18 -- Our Failure to Empathize with the Future of Humanity]]
* [[2017.02.19 -- The American Education System]]
* [[2017.02.24 -- Trumpocalypse Trumpdate]]
* [[2017.02.24 -- The Militarization of Police]]
* [[2017.02.24 -- Redpilled Socialism]]
* [[2017.02.26 -- The DNC: Republicans in Democratic Clothing]]
* [[2017.02.26 -- Moore's Law and the Centralization of Power]]
* [[2017.02.28 -- Web Assembly: The Browser VM as Decentralized Cloud]]
Through a series of false compromises, the DNC has inched more and more to the right over the decades. Pelosi herself praises Capitalist dogma. The Clinton's are a wonderful box of contradictions. Obama was an incredible disappointment; he's a war-criminal. The core of the DNC has already been hollowed out by corporate interests. 

Bernie was an indication of a more leftist possibility for the party (and I consider Bernie lacking zeal and direction, but at least he's remotely on the left path), and he was denied by influential and powerful people at every turn (despite having the obvious popular majority). The DNC has clearly not learned their lesson, those fools and selfish assholes. I think they see the Trump presidency as a conflict to thrive upon and a way to only further entrench their version of conservativism through yet another false compromise. 

Give me a parliament and game theoretically correct voting procedures. Even the will of our retarded people is better. It is sad to see that no one represents us. Expectation (ought) and prediction (is), of course, are different.
We had a graduate from my program come in yesterday. He joined the union. He came in a journeyman due to previous experience. He made $50k in the past 4 months. That's sick.

I've heard that much of the fabrication work I do in the shop does not transfer to the field. Much of the industrial pipefitting work is so large scale and prefabricated that I'm really doing the installation and not the more detailed aspects of construction. I will learn what I can though. This is me getting my foot in the door, understanding it from the ground up, understanding the nooks and crannies, etc.

My body is sore, but that is to be expected. Eventually it will be nothing. I'm glad I can work my way up to it.
Nash annoyed me today. He cut the threads too deep. When we screwed the pipes into the fittings, they went too deep. The center-to-center true measurement will be too short if we make the pipe tight enough. Otherwise, if we get the correct true length, then it isn't tight enough. Basically, we will have to redo it all, I fear. That said, I made a mistake (well, be both did): I forgot takeouts on the offset. This is our first time actually building offsets (but, I shouldn't have made the math error; hell, I drew the schematic myself). We got to use flanges as well.

After we cleaned up the shop, I went home, finished my union application, and visited the local union office. I talked with the office manager for a while (she remembered me, which is surprising). She gave me directions to the union's shop, which turned out to be within a quarter of mile of my school. I met the training coordinator; he was expecting me (office manager must have called him). We basically had an impromptu interview, and he said I'm doing what I need to do to get into the union. I'll keep bugging him (which he said wouldn't help, but that I should still do anyways). 
I love you.

I don't even know what love means yet (and from what I can tell, I may never fully), but I love you.<<ref "1">>

You and I don't know what that fully entails yet. That's okay. Son and Daughter of mine, if I could end my life to make yours happy, I would. If only I had that option! My life, from inception to death, is an experiment gone wrong. This is not your fault, and all I can do is try my best to help you be systematically happy. I must shield and cultivate you. You must stand on my shoulders: breathe the fresh air, do not drown in the chaos!  I am yours.<<ref "2">> I have been through a version of hell to be with you. I am sorry for who I am, my deficiencies and imperfections, and the pain that I have caused you. I am not the creator you deserve.<<ref "3">> All I have is yours. I love you.

My mother once said something like these words to me. I hope I can only build on what she said. We must find hope in our tragedy, a reason to live, and you are my reason. Creators are indebted to their creations because it wasn't the creations' fault that they came into being. If there is moral responsibility, then creators are responsible for their creations. 

I do not know how free we are. I wish I did. I wish I knew the meaning, the concept, the source, the criterion, the conditions, and the groundwork and foundations. I wish I had the answers for you. I do not. I am sorry. I don't know what life you will live. I can't see that far. I desperately hope it is a happy one. We each have our own plight, minds and reality maps, contexts, accidents and plans. I am an unprepared, fallible, and flawed creator. I am truly sorry for the ways in which I've failed you.

I will do my best for you. 

I love you.

----------------

<<footnotes "1" "Yes, that sounds like a contradiction. It isn't. How can I say I'm engaging in something which I don't even understand? I don't know. Let us call it the magic of bootstrapping and hope. I do not understand the paradoxes of love, but I will do my best. It's all I have.">>

<<footnotes "2" "Kantians cannot give good reasons for self-sacrifice. It is one of the fundamental flaws in their work. I am here to sacrifice myself for you. I don't believe Jesus was God (since I don't believe in God), but if there was a human Jesus (surely he existed; it's a helluva meme), I'd like to think he fundamentally understood sacrifice. It is such a special notion. It is the tragic exchange, losses, and transactions of those things we hold most dear, where we trade with objects whose values reach beyond our comprehension. We are monkeys trading existential gems.">>

<<footnotes "3" "Which is not the claim that there is a Creator we deserve.">>
I live for you. You are the reason I exist, not just in a biological sense, but more fundamentally in an existential sense. You are the reason I grind, the reason I move forward, and the reason I would enslave myself. This is the part where I say, "I would die for you." I would. I seek to make us happy because I can't find anything else worth pursuing (I have searched the desert!). I want the people in my life that I love to be happy. I care about the happiness of others like ripples in a pond, like onion layers, in degrees, perhaps sets and orders, as deontic priorities. The decision procedure proceeds.

The rubber meets the road. The icky is here. I must prioritize. This is the programmatic priority. It is only practical.

While I might always be on the fence about my own life (it is still not obvious to me that my life, in itself, is worth living), I am clearly instrumental to the happiness of those I categorically cherish. I am laserbeam resolute in my devotion to my wife and children, and while I know I fail them and myself in numerous ways, I will be and do my best for them. I must be their tool to happiness, and I throw myself upon that task. It is mine. Give it to me!!!!!! They are my spark. They are my reason for living. I desire their happiness. I seek to enslave myselves to their happiness because their happiness really is my happiness. That is resounding commitment I make. They are my hope. This is existential grit.
Dear [[R]],

I know it has been almost two weeks since you sent your last letter. I want you to know I've not been avoiding responding; I've been working hard on a response. The reason for the delay: I've been thinking quite a bit and dealing with other issues. My parents came to visit last week. I was very anxious, to say the least. I wanted to make sure I did not offend them while still being myself and honest (this is not easy to do). More painfully though, I found out my mother's thyroid problem is destroying her kidneys (my fear has been confirmed). I think she will die of renal failure; she is convinced as well (they are walking through her bucketlist). Steroids and dialysis have serious limitations for her. I have wept many times over the past week.

My mother is a classic boomer workaholic by choice (even she agrees). She has sacrificed her basic health (and arguably many things and people in her life) for her ministry. She has been consumed by vocational zeal to the point of lacking empathy for herself and family (classic PK/MK problems arise). Have you ever read 'The Poisonwood Bible,' and what did you think of it? It has been difficult to see and accept that her hard way of life joined with the stress that I have caused her (among many others) has led to her pending death.

I hope her remaining year(s) is/are peaceful. Whatever strongly mixed feelings I have about my mother (and vice versa), I want her to be happy. I want to be empathic and kind toward her. I love her. It's part of who I am. It's part of being unified. I hope with time and wisdom, I will see her narrative with more charity (which, admittedly, is hard to do when it isn't reciprocated during times of crisis [when I need it most]). I want to have a good relationship with my mom. It kills me that we don't. We are a house divided by the truth.

My mother and I talked this past Monday for a couple hours. We cried. We talked, carefully couched, about our plans, our analyses of who we are and how we fit, and our existential points of view. We are trying to find common ground, but it is obvious we will fail. We will always stand on thin ice with each other. Knowing it very well could be the conversation I have with her in person, I told her what we she meant to me, how grateful I am, that I love her. It was bittersweet since every word was inevitably coated and coded with the meanings of our suffering and conflict. I tried to scrape it off, but we both know how damaged we and our words are. We both understand each other (and ourselves) and yet don't in crucial ways. Our bifurcated relationship is not how life is meant to be. The scar is already there, and she hasn't even died yet.

They have the kids for the week. I have stipulated before that my parents are not permitted to evangelize to my children. This is not out of spite. Of course I want my children to have a good relationship with their grandparents. Problematically, my parents are skilled rhetoricians who sincerely love God in their broken way, and by His command love other people as well, but they do not pursue the truth. Unfortunately, they are incredibly talented manipulators. I respect their work with the poor, but not their methods, reasons, and the costs they've incurred. Of course, the result is that they don't get to share a part of themselves with my children (although, whether purposely or not, it stills oozes out).

I see the paths they could have taken and did not. Even they agree that I know them better than anyone else on the planet. As harsh as it sounds: it is clear that after raising 3 suicidal sons so deeply unprepared for the world that they aren't good parents. My parents had the means to be good parents, but not the will. They should have followed Paul's advice and not have had children in the first place while pouring themselves into their ministry. And, yet, I have to move past my judgment. I'm a failure too. Judgment must be withheld as a matter of practical wisdom. Judgement destroys us. I have been inspecting the concept of "Doing Our Best" yet again. I at least partially know how little I know. We must build together a new house while we still can.

I'm going to ask my brothers to throw a party at my brother [[JRE]]'s house for the family. My youngest brother, [[AIR]], can't even be in the same room with them (I see why; my parents often lack empathy for him). But, I think he will feel safe at JRE's house (but not my parents'). A last hurrah and a celebration of my mother's life would be nice. If she does die soon, I want us to part on amiable terms.

What kind of relationship did you have with your parents? What do you regret? What did you do right? Does it ever get easier?

I will only mention the tip of your letter for now: As we age, do we become worldworn? What is the source of tiredness? Is your tiredness like that of others? How, and why?

Love,

[[h0p3]]
[sic]

I am so sorry about your Mom's health. 

I was very close to my parents. We had different views on some things, but I always felt heard and respected. I don't have a lot of regrets. It is hard to regret the things that formed you without regretting that you are who you are, and I am okay with who I am. I want to say that I regret staying in an abusive marriage for ten years, but I have three amazing daughters that I wouldn't have had otherwise. I want to say that I regret not being more present in my daughters' lives, but the full court press for survival, when plunged into poverty, is a consuming activity. And we survived. I own that and all that it implies. There are parts of that story no one else knows or needs to know. 

Does it get easier? No. It gets different. I am not sure it gets harder, but the focus changes as we age. Family means something else and time replaces a chunk of responsibility with respect. We may regret what we built (or failed to build) into our families, but we recognize that our power to heal or wound them is diminished. We are no longer the critics of society (or family) but the ones under indictment. The saddest part is that we are usually judged and sentenced before any inquiry begins. The sweetest part is that the most important judges are usually prejudiced in our favor, at least a bit.

My tiredness is a pure form - I go to bed too late and get up too early, and do too much between the two. I don't know how or why others experience tiredness, but mine is not due to being worldworn if I understand the term. When I am tired, I am  not usually missing my youth or the age to come - just my pillow and my sheets. 

If there is anything we can do to be of help to you and your brothers right now, we are here. Also, if you need anything tangible, please let us know. Don't do without.

[sic]
There's an old man who walks through the building from time to time. He speaks with the instructors, leads strangers around, etc. I wasn't sure what he did or who he was. I just introduced myself to him out of the blue. Apparently, he knew a lot about me, where I was from, what I did for a living before, how I was doing in the program, etc. He said he was already looking out for me. He spends 3 days a week recruiting. He seems to be a liaison between various communities, students, and employers. He is clearly well-networked. This guy literally created the pipefitting program I'm in (not the curriculum or physical infrastructure, but the bureaucratic and financial aspects of it) because the HR department of the largest industrial employer in the area asked him to create the program at my tech school. 

The old man suggested I consider the union in a city 3.5 hours away. They guarantee local work during the apprenticeship. Few are allowed into the program, but I am told I have a great chance of getting in if I wanted it. He said the local union isn't worthwhile just yet, but that it could be in a year or so. 

Changing topics, today's work was frustrating. It is very difficult to make everything level and aplomb with 45's. I need to tighten and balance at each stage. I need to make sure Nash is following this (he'll see the reason of it). Do it right the first time. Tighten now and worker harder to untighten because it is worth avoiding fixing the problems of loose joints destroying balance every time we make an adjustment.

It is difficult to get the right tightenness while also getting the right direction. Let's think about this problem.

Also, Keith said that I should consider Johnson Controls yesterday. He said something about automated valve control (remote in). He obviously heard/figured out that I adore computers (likely from Keaton). I'm glad he said something though. Finding ways to leverage my computing, formal, and systems skills into Pipefitting could land kushy yet thrilling jobs which pay sick money.
I learned how to use the scientific calculator for reals this time. I adore it. I can see what I need to memorize now. I still do my math twice. It's an extra 5 minutes, but it limits a lot of risk. 

I obsessively check measurements at opportune moments in my build process so I feel confident when I get to building. I'm very organized, and I have a process that I can analyze, enrich, and improve upon. I am building my work-stack (or one of them). I am very fast (and safe), and I think I can continue to ramp it up. 

My teacher gave us a schematic which we did as a math problem before. I have everything saved in my skein notebook. Nobody has actually built this thing in class. Of course, since we've been crushing it, he's throwing us curveballs and possible busywork. He's giving us work he hasn't given anyone else. I suspect this is because he needs to look like he is doing something. My teacher is clearly an alcoholic (but I still respect him, shaky hands and all; he has led an interesting life), he yells at the guys a lot (very emotional, not terribly rational...but never at me [he's far more formal and polite with me; I must think carefully about how I would react if people yelled at me {defusion is not necessarily the best answer, but it sometimes is best}]), and he is not deeply concerned about his students(although still  partially concerned, even if only for redpilled honest shopkeeper kinds of reasons and appearances for keeping his job). I am slowly trying to unspokenly or less-spokenly convince him to advance me at the pace I deserve (perhaps separate from Nash, or with additional unique content, but at least at a fast pace) to move at and to show me everything he knows; we may have different definitions of what counts as this. It seems to me that I have regularly had to make him think (I have watched carefully); but, I don't know if that is a good thing or a bad thing.

I'm trying to develop a basic relationship with him, but I also show the respect of students to teachers (regardless of the merit of such a practice, I still want to show that I'm paying attention, listening, and want to know what he knows). I keep it professionally jovial with him and show him I'm serious. I work my ass off in that class, and he's see it every time he walks into the shop (because he's often screwing around and missing from the classroom [every student has complained about this, and they are not wrong], taking up sidejobs, etc.) in. I rarely take my full breaks; I don't chit chat; I don't play games; I take initiative and study between downtime; I'm consistently looking to improve and become virtuous at this practice. I do not waste my time like the other students because I need this education to get the best paying job I can, and I need my excellence to shine and open doors for me. I need to learn this really well, I need him to be the best teacher he can be (whether that means removing barriers or helping him understand what that is for this context), and I need his drunken recommendation. 

I complete ~1 project a day (projects appear to take 2-3 days for good students, and a week or more for bad), and I have passed every test he's thrown at me (even the optional ones). It is not obvious that Nash is actually passing these tests; I seem to be doing a lot of the work for us (I suspect my teacher knows this). Nash is too content to chillax when this is clearly his chance to dive in. Working with Nash has been difficult, and it showed strongly on this project. He is simply not as adept at this (only because he doesn't try: this kid is smart enough and has enough background that this could be much easier for him). He can't do the math, he mismeasures all the time, he doesn't tighten his work (which is awful for us because it means that it is moving around and very frustrating to level), he is terrible at understanding where he should be placing his wrenches (including which direction, how much force, and even why he is doing it), he can't see the right build order, and more. I do my best to help him, especially since I realize that I may not be able to move forward unless he is at least getting it decently enough that my teacher will not feel compelled to slow me down. 

Yesterday, he threw the chuck for the threader so hard (repeatedly) that it adjusted the diameter of the die set. Despite checking with a spare fitting for turns at random times, we didn't figure out that he had done this until too late. Many of our pipes weren't threaded deeply enough because of it. We found out the hard way, and we didn't find out until the end of the day. It is obvious that Nash is frustrated working on these things and working with me (his failures really cost us now, and even when I don't say anything, I seem to wear my inferences and beliefs on my face so plainly to others at times and in certain ways). I ended up having to redo the work today (rethreading already threaded pipe), taping again (we run through it quickly, especially with mistakes like these, and our teacher has complained about how much we use [although, we complete a lot of work]), and then building the entire thing by myself (in less time than Nash and I had to spend the day before). I was actually proud of what I did this time. It was clearly meant to be tricky, and I did a good job.

This curveball yesterday was obviously a curveball for even my teacher. He could not rotate the isometric schematic and my fabricated object in his head well enough to see they matched. He had to run to his office to build a model of the schematic out of wire (I believe he was suggesting to me that he was embarrassed about it later after he was done checking my work). He figured out I did it correctly (but not before making us unnecessarily rotate the heavy bastard off our table). Everything was good, and I felt confident it would be (it's nice to have confidence in the face of tests). I hope to continue to work hard, learn, do well, and feel confident.

Sometimes I feel compelled to make suggestions to him about what I want to learn. I'm straight up eager to learn and master this art. I do not want to waste an ounce of my schooling (I've had 10 years of post-secondary education already, and I appreciate that maxim: you get out what you put in). Does he know he has a Formula 1 racecar for a student? Is it my fault here? Is it out of my control? I can only do my best (be rational) with a good attitude (empathy).

He measured the pipebender (which has never been used, and he has to find the manual for). I might get to practice that. Even an introduction would be useful.

He is likely going to have us make things on the simulator (no one has done this for a while, but we will get to). I'm excited since I'll actually have used Flanges instead of merely installing them on the ends of my fabricated objects. The simulator is unimpressive looking, and it is only a screwpipe simulator (perhaps that's all we really need one for, since welding does the rest). I'm hoping that I will get to design the schematics we use on the simulator. I want it to say something. What should it say? What will I draw with these pipes? I drew some cool ones before (and made two of them; I liked the spiral the most [it looked cool]). This is a different challenge. I should measure and plan, draw and present it to him.

He said that in a week or week and half, he wants to let me start beveling and butt welding (tack welding only, but I want to learn the beadwork too). This is normally late first trimester or early second trimester work. I would really like to have a strong introduction to welding in this class, while I have the chance with the materials, machines, time, and teachers. 

I see mistakes everywhere. Finding mistakes in myself is what makes me good at things. It also makes me not like people (and vice versa). I am probably an extrovert who tests strongly as an INTJ simply because I'm misanthropic (I usually love, but rarely like). The fact is: I am a loner. I do infinitely better when I only have to analyze for me and not for and especially with a group of people. It's why I'm not a good team player (still wildly better than average, but my giftedness does not shine in a group). If I have to group, I will. Sometimes I even enjoy it. I find I'm often happier in video games when I'm by myself or working closely with a couple people. The more the not merrier. Basically, I'm saying that I'm a bad empathizer. I don't think it's my fault as an autistic person either. I try to empathize as best as I can, but it often isn't good enough. There are only so many things in my control. If I only have so many resources I can devote to empathizing (it is emotionally draining for me in a way that it isn't for others, I suspect), I want to make sure it is on my family; we need it. I need to be there for us as best as I can. That means I need to be wise in how I spend my social-energy. I can see why business men often have such low empathy (there seem to be a variety of causes and possibilities). I will be respectful and kind, but I will make sure that I guide myself to opportunities to have maximal alone time (on something fun) with as minimal sacrifices to pay (including my enslavement) as is worth it. Do the utilitarian math, or get the right feel for it, h0p3!
Ask, and ye shall receive. Today, my teacher threw me a curveball and I struck out (although, I thankfully didn't land on my ass). He told me he purposely designed it to fool me, and it did (I'm glad I at least offer the appearance of humility in my face and words when I ask him to check my work). The schematic had a beautiful trick in it that made it easy to misread. He said, "I finally gotcha! You did something wrong," and he smiled with pride. I took it in stride and laughed with him. It was bound to happen. I knew at once where the mistake was to be found. Something felt really funny about that part of the schematic, and I didn't pay enough attention to really understand what it should look like. It was a clever curveball. I told him what I thought my mistake was and how it was supposed to look. 

By not understanding the schematic well enough, I could not perform the fitting<<ref "1">> math, which meant that not only was my shape wrong, but the lengths were slightly off. I took the offending portion of the construct apart, and thankfully I had spare pipes ready just in case I needed them (be prepared to fail). I fixed it very quickly. 

Afterwards, I asked to see a stack of schematics. I clearly need practice in understanding them. I want it to be second nature, like reading a map I've seen a thousand times, or reading English, etc. I must remember that nobody does this instantly. I must work for it. My hard work will pay off; my talent will shine; I will succeed eventually; I will breathe this. Being someone who understands will be useful. I suspect it will be something that separates me and maximizes the value others see in me. It is bargaining power and mobility. Anyways, he gave me a stack of actual CAD schematics used in actual projects. They are different in some ways, with way more information to decipher. There is much to learn.

The teacher said that he was worried that I would not be able to say he challenged me on the his course evaluations. He said he didn't know why the other students are there, but he knew I was there to become a pipefitter. This is the second day that my partner Nash has missed. He can't afford to miss that many days before he gets kicked out. Our class dwindles. 

I visited the union training facility again today. The boss man wasn't there, but I met another guy who seemed relatively high on the totem pole. It was obvious to him in the course of our conversation that I didn't know much of anything. After he found out that I was nobody, he was far less interested in me. Redpills for everyone.

--------------------------

<<footnotes "1" "Yes, Plato's Statesman, I hear you! All day, every day. I cannot escape it.">>
Clear stereotypical generalizations. Problematically, they are too often correct for me to set aside. These patterns I see seem too hard to shake. The virtuous person can distinguish when to apply this rule of thumb and when not to.

<<<
We all love our own puns. 
<<<

<<<
Everyone believes they are the hero of their own story.
<<<


<<<
Everyone believes they are right.
<<<

<<<
Everyone has a boss (e.g. the customer's, the board of directors', the CEO's, your manager's, etc.'s); i.e. Everyone feels like (or exists as) a slave from time to time.
<<<

The gnostic "Illuminati" and "Targeted Individuals" conspiracy theorists see many false shadows, but I believe they have felt and identified a real political undercurrent in the world. Let me be clear, they are fucking crazy, yo. And, yet, we should still listen to the murmurs and mumbling of crazy people. Their insanity is not entirely accidental, and the causes and triggers are worth examining. Unfortunately, they are crucially right (and have been for a long time) about the existence of the deep state, dark money, mass surveillance, and the absurd power inequalities in our world. Their exaggerations, lack of tact and careful examination, however, allows us to dismiss them. This ad hominem, unfortunately, is not always accurate (the fallacy itself is actually fallacious sometimes).

Even the sometimes less fringe-like appearing (but still crazy) libertarians are often half-right about many things (dat Lockean allure and Randian charm, lulz). The fact is that the federal reserve and the monetary policy of the US (which has profound impact on the monetary policy of the world) is not answerable to the people of the US, not controlled by elected officials, and is clearly owned and operated by multi-national corporations and their pets.<<ref "1">> 

The Bilderberg Group and its ilk are real. What we've been reading about the NSA, and other governments (and branches of corporate intelligence), has been true for many decades (Snowden was not a revelation to those of us paying attention; he was only vindication). Our political scientists know that [[the average person has no power or influence|https://www.cambridge.org/core/journals/perspectives-on-politics/article/div-classtitletesting-theories-of-american-politics-elites-interest-groups-and-average-citizensdiv/62327F513959D0A304D4893B382B992B]]. Ironically, even some academics used to justify the status quo are bought and sold (have you see the clinical psychopathy rates in Economics professors? [let us be clear, the virtue theorist can actually unfallaciously wield //ad hominem// attacks]). We are not our own masters (not that we ever were). 

Let us not assume that some cabal of individuals has carefully choreographed every detail of every move in the world. That would be absurd (and I suspect a childish strawman used to irrationally defend the hyperclass). Politics is obviously far messier and more volatile than that. Political reality is more of an oligarchic mesh constantly changing through internal competitions and political blackhattery. The signs of this deeper political narrative are there for us to see. Can't you see the public-facing instruments of the Hyperclass machine which has evolved to enslave us? Political nobility has not died, rather it has complexified to the point that the politically illerate cannot readily identify it for what it is.

People are loathe to accept their enslavement. They are unwilling to see it. They must confabulate their way to feeling free. It's also hard to understand how the pieces fit together. The machinations grow complex enough that few can appreciate the Golem (which has emerged from the political primordial soup) for what it really is. I worry we are reaching a political singularity where the proletariat will never see through the political event horizon to discover reality, where we are so thoroughly controlled to a point of eternal practical powerlessness (or, at least until the coming end of humankind). 

One must habitually take a fistful of redpills to generate the virtuous perception of political reality, to understand what is salient about our world in order to deduce what we are, what we've become, and where we are going. At best, we can only make out the blurry outlines. Unfortunately, the Realpolitik truth does not set you free. It only allows you to better recognize how unfree you really are. Let us hope that our knowledge creates opportunities to flourish and the foresight to avoid hardship.

---------------------

<<footnotes "1" "It is ironic and farcical that Ayn Rand so firmly struck back at the world (I gotta' say, I think that psychopath was deeply angry) by so violently igniting the capitalist (a.k.a. Egoist) monetary policy we have through her disciple+pawn Alan Greenspan. It's one thing to have non-egoists regulate capitalism; it an entirely different monster to have egoists (the corruptible of corruptibles) regulating capitalism. That is to say: we have allowed the smartest+cleverest+hardest-working of the most psychopathic //homo sapiens// among us to devour us all. That is the farce. This is the irony: Libertarians are attacking the very thing they created. Libertarianism is fundamentally egoistic (it does not rely upon even Rawlsian principles [which is the minimum of justice; it is only a pragmatized version of the Categorical Imperative, an injection of who we are as psychopaths into the CI decision procedure of idealized Humanity]). Libertarianism is a thoroughly Randian Kantian injection into Locke. It puts Egoism on the philosophical map again like no one has since egoist, anti-realist, relativistic, non-cognitivist interpretations of [[SAP]] (Socrates, Aristotle, and Plato's) Virtue Theory (them are some ugly Neo-Aristotelians). As a historical conversation, Libertarianism may have started as a worthy enterprise, but it has gone down hill really fast. I believe Rand has successfully been injected into Kant injected into Locke for a large number of people on the planet. Libertarianism is quite the mental virus infection in humanity today.">>
Dear [R],

I'm sorry if my previous letter was offensive. I hope this one won't be offensive either. I really appreciate that you kindly offer me your perspective on family, faith, and life. As a side note, I've enjoyed talking with your brother, C, immensely. You both have a raw kindness and intelligence that I so rarely find. It makes so much sense why my wife is as awesome as she is.  

I am glad you are honest with me and at the same time not judgmental. It is something I'm still growing accustomed to and learning to do myself. It's a good pairing (and I take it to be a crucial element of empathy, the golden rule). I also appreciate that you want the best for me (even if we have perhaps different standards and theories of the Good); that's what love is about. It's relieving to have someone hear me. Thank you.

As a sidenote, I like that word: decompressing. It suits me. 

Now, I can't say I wasn't expecting your argument, and I'm sure you will say the same of me (I suspect we have both studied these issues for a long time). Without trying to sound arrogant (I'm going to fail), I want to say up front that I am aware of the family of arguments you've presented (which you probably know). I have taken these issues very seriously. It is what kept me faithful for so long. A significant portion of my training and upbringing has been devoted to understanding and answering the issues, frameworks, questions, and arguments you've presented. Philosophy of religion, epistemology, and ethics are at the center of my wheelhouse. It's what I did around the dinner table; it's what I focused on in church; it's what I ponder in quiet moments; and it's what I studied for 10 years in school. Essentially, I think I am skilled at empathizing with the point of view you've presented because I was born into it. I really have given it a fair shake. I believe C.S. Lewis would have met his match in me (our conversation feels a bit like the Screwtape Letters). I don't mean this as a useless appeal to authority. I think context is valuable.

For example, what I want my parents to understand is this: I really did it their way. I really took them and their view very seriously. I was faithful. It was my vocation and purpose. In an ironic twist, it was my faith that led me away from faith; that's how faithful I've been. I took the leap of faith, and all that happened was that I fell. As I stand back up, I think I see why.

Let me add two crucial caveats (and distance myself from judgment): (1) we all must have the hope that we can be right about what matters, (2) we may have different evidence. It is only rational for those with different evidence to arrive at different conclusions. I believe we are both justified in our positions (this isn't a claim about objective accuracy [which we may never achieve anyways]). Our beliefs are not accidental; we've really thought about them. To the degree we disagree, I take us to be kindly agreeing to disagree. I am convinced you are more skilled than I am at this (it is not naturally a part of my disposition), so please call me out if I'm lacking. That said, I think we clearly agree on an enormous amount. I admire the network of reasons and explanations which emanate from the axioms you take up. 

I also do not want to be dismissive or underhanded. I must be honest. If I'm going to be rational, it means I need to maintain charity and openness. It means I must have the integrity to revisit those ideas again, to accept I could be wrong, and to do my best to find the truth. Let me give it a fair shake again, and you can call me out when I've not. So, here is my good faith response to your extremely thoughtful argument:

<<<
We come at the same truth from different perspectives, so we must stretch to see things from each other’s point of view. I am hearing you, but as I am listening, I am convinced that I am hearing more than you hear when you listen to yourself. You are a deeply spiritually awake and aware person. It is that spiritual awareness that is causing much of your intense pain.
<<<

It is always possible I may not be hearing myself as well as you do. Confabulation, denial, willful ignorance, akrasia, confusion, and compartmentalization are real possibilities. I would not usually characterize myself that way, but I know I have made those mistakes before (as we all do). My goal is to be less wrong each day. Again, I want reason to guide me. It is the Categorical Imperative. 

I think it is important to define what it means to be "spiritually awake and aware." One of the crucial fork-in-the-road assumptions we must take up in order to define spiritual awareness is whether or not spirituality is real or epiphenomenal. What exactly are we "spiritually aware" of? Why should I think a spiritual dimension exists? I don't think I should formally beg the question (including my conclusion in my premises) here; although, maybe we should establish that first. Of course, we have to have a starting place. Bias, to some degree, cannot be escaped; it is part of our epistemic plight.

I have definitely had what are called spiritual experiences in church, in listening to and playing music, in love, in contemplation in the middle of the night, and even drug-induced.  That we can artificially induce spiritual experiences so clearly and effectively should give us serious pause. I have seen too many people speak in tongues and talk about ghosts (and I've seen the kinds of inferences they make, who they are, and why they are prone to these activities) to accept the spiritual dimension with so little evidence. That is far from proof that spiritual realism is false (which ultimately cannot be given), but, for me at least, it does shift the burden of proof onto the spiritual realist.

So, what were these experiences of? With each passing year, it becomes more obvious to me that the best explanation of the phenomenology of spiritual experience comes from a biologically-based Darwinian social theory of human minds and societies. The more I understand it, the more compelling the evidence becomes. I am convinced the actual causal chain which describes spiritual experience is reducible to having evolved to generate a specific configuration of chemical and electrical signals in my brain which I had long mistaken for spiritual experiences of actual spiritual objects/beings/dimensions.

I honestly believe my spiritual experiences were epiphenomenal (I'm still glad to have had them in many ways, but not all). Just because I have those feelings doesn't mean there is a spiritual dimension or any supernatural causes to them. The causes of these spirital experiences are natural (a loaded word among loaded words). I hate to say it, but I am convinced this is the case for everyone I've met (but I do not see value in trying to convince people of this). 

I think spiritual people tend to be too prone to trust their feelings and intuitions (we all have to, to some degree; I am a pot calling the kettles black). I used to have a problem with this in itself because of how irrational I know we all are as finite homo sapiens. But, I see more value in it now. But, feelings and intuitions must be guided and shaped by reason. We must habituate the right disposition. 

I really did aim for strong moral character. The unexpected result is that my feelings and intuitions on this matter point me in the other direction by and large. Of course, I'm still prone to use religious language and imagery because that is part of the language I know. I don't have better words sometimes, but that doesn't mean I'm still religious (well, perhaps it depends on our definition of religion).

Don't get me wrong. I think spiritual experience can be incredibly rational-appearing and many are justified in having them. It is a wonderful (and sometimes terrible) aspect of our brains. We are also extraordinary pattern-finders, but unfortunately, we're so overtuned for it (and naturally terrible at statistics, discrete math, and probability as a consequence [even famous mathematicians demonstrate this flaw]) that we see patterns, ghosts, and shadows where there are, objectively speaking, none (or we fail to see them as they are or as best as we could).

When I first entered into Apology, it was clear to me that the burden of proof (I prefer the concepts of "evidence" and "argument" here) in the dialectic rested on agnostics and atheists. But, over the years, I've found the burden of proof has shifted in the other direction. 

For me, my spiritual awareness is actually existential awareness (which need not be religious). Perhaps it is part of the Kierkegaardian storyline (but even he was wrong). It isn't God who has caused this awareness in me, but rather thinking about the concept of God that has made me so existentialist.

So, I agree with you that my spirital awareness is causing (or at least central to web of reasons for) my pain. However, I do not think we agree upon what counts as spiritual experience and what causes it. 

From my perspective, it is obvious that trying to be a Christian is not going to solve that problem. Rather, extracting the remaining irrational, cognitive-dissonance causing fragments of what used to be my faith (not all parts of what was my old faith were bad) seem like the more likely to succeed option for eliminating this pain. Of course, I may be doomed to have the pain no matter what. I'm literally trying to rewrite myself to erase the emotional pull of the ingrained remains of Christian spirituality (but not of the transcendent) simply because I know the road fails. There is no hope for me on that path. Perhaps it is a variant of the unforgiveable. 

<<<
As I see it, you define all that you recognize as reality by your senses and the extension of those senses through enhanced observation. You prove things to yourself before you believe them. What you cannot prove, you do not want to believe. This urge comes from a brilliant understanding of natural law and the inner workings of the observable world. You can, in effect, see things that others cannot see, so you reason that what you cannot see (figure, understand, define) does not actually exist. I get that.
<<<

I worry it is possible you've accidentally mischaracterized my position (the details matter greatly to me), and you've likely been too generous to me. I think the spirit of your words are accurate in important ways though. I feel compelled to clarify my position.

Let us be clear, I am neither an empiricist nor a rationalist. Kant's Copernican revolution in epistemology was right. I grant that my analysis of sense data tends to provide the bulk of my justified belief. However, we come embedded with innate categories. I also think our relationship to the "thing in itself" is far from clear (and incommensurable), and that we play a role, as subjects, in shaping our perceptions of a thing (and that this is an inescapable problem). 

Further, outside of the sense-perception necessary for consciousness (the passing of time, of self, etc.), I believe even a mind trapped in Cartesian solipsism can still make apodictic deductions (and otherwise!) without sense-perception. 

I would say I do not "prove" things to myself (this is a term of art for me; Proving is the act of providing a step-by-step demonstration that a conclusion deductively follows from a set of premises using pendantic steps which are thought to be certainly or virtually certainly true in a given epistemic context). I cannot hope to achieve certainty in almost all cases. Instead, I would say I aim for knowledge with a lower epistemic standard; I try to justify my beliefs with sufficient (and, of course, I spend a great deal of time defining sufficient for myself) evidence and inferences (or, at least that is my goal). I believe we all do, and I think that is the best we can do.

I think it is rational to require evidence and good arguments for our beliefs, especially for those which are most central to who we are, how we think and act, what we want, etc. What else should guide us besides reason? Why? We cannot escape the necessity of reason (yet another loaded word among loaded words). As a practical and theoretical matter, we must answer crucial questions for ourselves. What should I believe? What standards should I use? What is the groundwork of acceptable, rational, justified belief? Why? If these are the wrong questions, then how and why?

I also grant at the very bottom of our chain of justifying beliefs for our beliefs (illustrated everytime a child unrelentlessly continues to ask "why?") each of us will eventually find foundational beliefs we cannot justify. If there was a justification, we'd only go a layer deeper in asking for justification. It is an ancient problem. I buy that we have prudential (which doesn't make them objectively correct) reasons to accept a foundation (or coherentist foundation) of beliefs. However, we must continually test this foundation. We should inspect it very carefully. To be wrong here causes a tidal wave through our web of beliefs sitting on top. Again, we cannot be certain (by definition, perhaps). We can only unify ourselves here with the evidence we have. Sometimes we keep our axioms, sometimes we remove some, and other times we add some. We can only do our best. Doing my "best" points me in the direction away from Christian faith.

However imperfect it may be, I hope you see the pragmatism in my epistemic stance. Setting the epistemic partially aside, we need to consider the ontic (What exists? What is it that we have knowledge of exactly? What can we have knowledge of? why?).

I also want to make sure you don't see me as simply a physicalist, materialist, or mere naturalist. I don't know the answers to these crucial issues, of course, since this is a very ancient problem (that doesn't mean outmoded or obsolete). To be clear, I am convinced that metaphysical objects exist (a bold statement in contemporary academia). I am not convinced there can be truth-makers and bearers for logic and mathematics outside of something metaphysical. I say this carefully though because I don't know how it works. I don't even know what it ultimately means. I also believe I can't fully understand it because that's the nature of metaphysics. I take the transcendental divide seriously. I can only test the edges of and hope to briefly peer into that gateway, see the shadows on the walls, and hear the music calling through the chaotic mist, but I can never step over the threshold into that world. Of course, this sounds religious (it was standardly religious to me for a time [I'm open to saying I'm still religious about the transcendental]). It was Plato and Aristotle's "religion,"" and over two millenia, these notions were syncretized into the church, expanded upon, and further investigated (hence their resonance with my upbringing).

So, I do believe in things I can't see. I do not merely study the observable world (although, I think we strongly rely upon observation and deduction to reach the transcendental gateway). In fact, as far as I can tell, philosophy is fundamentally engaged in thinking about things which are hard (if not impossible sometimes) to see, observe, and understand. It is the bleeding edge of the foundation of what we do not know. When it isn't that, when what we didn't understand before becomes clearer to us, it breaks off into a new field of inquiry (the sciences, mathematics, economics, etc. [although, they never fully escape philosophical inquiry]). I take myself to be studying reality (poorly, at that), particularly what is relevant about and fundamental to reality.

Now I think I'm in a position to engage your crucial point: 

<<<
"You can, in effect, see things that others cannot see, so you reason that what you cannot see (figure, understand, define) does not actually exist. I get that."
<<<

I worry there are at least two interpretations of this claim to consider. The uncharitable one (which I'm not claiming you mean) I take to be the idea that I'm not open to the existence of things which I've not yet justified for myself. I hope it is obvious that I believe I can be wrong about what exists and doesn't, as well as about what is true and false. I would not have deconverted from Christianity if I weren't open to being wrong about everything.

To get straight to the point, take belief in the Judeo-Christian God as our example. I have said before that from the standard of epistemic certainty (the skeptic's context) I am an agnostic (as I am strongly convinced everyone should be). I do not know either way in that context. It is likely the case that we can't indubitably know either way by definition. From a lower, more practical epistemic standard (since we simply can't be certain about almost everything), I am an atheist (and I know others whom I take to be rationally justified in having faith in God, but their reasons are private and ultimately do not count as reasons for me). I believe I'm strongly justified in my beliefs. That doesn't mean I'm against the very conceptual possibility of God (although, I have studied that in detail as well, and it doesn't look good). So, in effect, I am open to God's existence, but I have very strong beliefs which, in my practical (non-skeptical) mode (the mode or plight in which I think everyone else finds themselves in), justify that the Christian God doesn't exist.

Of course, I'm willing to look at the arguments again. There does come a point though where it's okay that I don't, right? At some point, we should be able to say to ourselves that we've been careful enough to set our tent pegs down. It's prudential. At some point, it has to be rational to accept not believing (just as one might accept that it is rational to accept believing without certainty or maximal justification). I don't think I'm doing anything wrong by moving on from my faith. To ask for more seems to border on gnosticism or even misguided skepticism itself.  

The charitable interpretation of your claim (which is what I think you were saying) seems to be that I don't take up beliefs without justification. But, that's okay, right? There doesn't seem to be a better normative epistemic stance from what I can tell.

<<<
But what do you do with that nagging pull you call residual Christianity?
<<<

I'm extracting it. It prevents my unity. It is the minority of my intuitions and the least justified of them. This is an abductive version of proof by contradiction (so, not a proof, but similar). It is perhaps an application of Occam's razor. 

I believe I know what those keywords "nagging pull" mean. These are very worn battlegrounds in The Great Conversation which humanity has had with itself through history. I have definitely wrestled with it myself, and I still am. I must wrestle constructively though. 

Thus, I'm trying to wisely deconvert. That may sound like a contradiction (I would have said it was before, with the classic arguments and rhetoric to boot). In doing so, I'm trying not to burn my bridges. I see that I could be wrong, and I must leave room for that possibility even when I feel very justified. So, I'm shutting the door to open others, but I'm not locking it behind me.

<<<
Ask yourself why you didn’t rage at Santa Claus when you learned that he didn’t exist. Even if you grew up believing that his was just a sweet children’s story, the question is still valid. You might denounce him, but you are not angry with him because there is no “him” with which to be angry. The same goes for a whole array of fictional characters who were real to you on some level, but whose existence you know to deny. You might learn from them, react to them and even model after them to some extent, but you do not rail at them because they are not there in any real sense of the word.
<<<

You are right that I wasn't angry with Santa Claus. I raged at those who told me lies, half-truths, and knowingly unjustified claims (but I've done so without enough empathy). I will not be treated as mere means, deceived, manipulated, and made to serve the unjustified will of others. It is a form of brainwashing and psychic enslavement. I demand honesty because I'm a person with dignity who merits the basic respect owed to all persons. I have a claim right to resentment when others use me through deception. That said, in empathy, I see that others make mistakes, and so I do my best to forgive. It is not always easy to distinguish ignorance from malice (and I don't see why others are better at it than I am).

<<<
God is different. You can deny the existence of God (or, at least of the God to whom you were introduced) because you can neither define Him nor accept the definition of others for Him, but you can’t seem to shake Him. He doesn’t exist for you, but He relentlessly follows you around.

Put that in your pocket for a minute and ask yourself this: do you fully understand the natural world? I know that you understand it in a deeper and richer way than I do, but does it still hold any mystery for you? How does one grasp the concept of mystery when mystery is a rare commodity? So, look up from the natural world and consider the concept of “concepts.”
<<<

You have not established why God, as a concept, is different from Santa Claus. Further, it is concievable that there are people who are as moved by the idea of Santa Claus as I have been by the idea of God. Being moved by an idea is not the same as being justified in being moved by it.

It is not He who follows me, it is just the idea of Him that follows me (more specifically, has been embedded in my highly fallible mind and belief system over the decades). Yes, the idea of God, my faith, my upbringing, my life has a web of crucial inferences and mistakes in it that have caused me great pain, a pain far beyond Santa Claus. That doesn't mean God exists.

I'm not convinced God is chasing me around. I'm convinced I'm not even chasing God anymore. I'm convinced that in my chasing of the idea of God I've been chasing the transcendent (which is only worth chasing to some extent) or even less in some ways. If there is something like God, or whatever The Good is, I think it is radically different from what Christians have pictured.

Let's be clear: it isn't God that I cannot shake, it is the transcendental that I cannot shake. They easily look the same (I long thought they were). I think the Ancients, Kant, Postmodernism as a project (a revamp of the ancient tradition), and Gödel's Incompleteness Proof provide us the clearest indications of the transcendental. However, agreeing to the transcendental is hardly agreeing to the existence of God. This "thing" I cannot shake in my web of beliefs is not obviously God (particularly the Judeo-Christian stories of a Being) at all. 

Of course, I don't fully understand the natural world (or reality, both physical or metaphysical). The physical world still has its surprises and sources of pleasure too. The transcendental (metaphysics) is the mystery. I have to be stoic about this mystery, of course. I know there is only so much I can know about it (which only continues to cause me to ask and answer questions).

When I see something is difficult or perhaps impossible to understand, I ask how, why, and what about it makes it mysterious. I feel my way around it. I try to find its logical contours, limits, and extension. I try to see its structure and its relation to other things I know better. I ask what is possible and necessary, contingent and universal, mutable and immutable, etc. I attempt to openly and charitably speculate, try out different arrangements of possibilities, and see if I can make the pieces fit. I make the most sense of it that I can, and stoically accept what I can't make sense of. I take the best explanations and justifications available to me. I see no better way to handle or demystify mysteries.  

You are talking my language when you talk about the concept of concepts (you seem to speak of a variant of Plato's Great Meme passed down through Western culture), the being of being, being in itself, contemplation of contemplation, The Good, The Beautiful, the noumenon, the transcendental, metaphysics, etc. I can only speak with my poor understanding of that gateway which even the greatest minds in history can only point us towards. We stand on the shoulders of giants, no doubt. It is in my exploration of these very things that I have been persuaded that a personal Christian God does not exist. Further, even if God existed, I have no reasons to think it would be relevant to my practical life (outside of enjoying the mystery). To the extent that Boethius would be right, it seems like we have nothing to talk about (that's Trascendence with a capital T). In fact, the best explanations and justifications tell me to stop worrying so much about the transcendent (at least to some degree). At some point, demystification is fruitless. We are mere mortals. 

<<<
Do you believe that peace exists? I doubt that you have ever seen a moment of it in your life. I know that I haven’t. And yet we both chase it with all our might.

Do you believe in justice? How often have you seen it in pure form? But you reach for it, don’t you?

Consider for a moment that there is a layer of reality beyond the observable that we do not have senses to detect, but that we are bound to acknowledge because it resonates with something inside us that we can’t define. We are drawn to peace even though we don’t experience it. We reach for justice even though it hovers beyond us. We cannot see, hear, taste, touch or smell them. We do not have adequate equations to quantify them. But we know that they are there and we ache to be where they are. 

What causes that?

We are like air bubbles floating through miles of seawater trying to burst into the expanse of the sky. We are spirit-things surrounded by a constructed reality – we understand the reality around us because we are encased in it and we are equipped to sense and interact with it, still we cannot resist the urge to rise. 
<<<

I agree that we can never fully see, experience, or partake of The Good in itself. We will only see and experience shadows. It's the best we can do. Or, if we do not, then we cannot be unified. The Pure Skeptic is frozen and disunified (the Pure Believer has similarly problematic flaws). They must assume there is something worth getting out of bed for, even if they do it without justification, to actually get out of bed. We are driven by these axioms toward The Good. I beg the question in even seeking to be unified and happy (kinds, subsets, parts, and conditions of The Good). That these are worth pursuing must be axiomatic, since there are no other justifications for it. Note, of course, the Pure Skeptic is still correct to claim that we have established nothing objectively, categorically, or normatively true in our Human Plight (as is the Pure Believer). We're just assuming and deducing/inducing as much justified coherence as we can from those assumption. I'm okay with this step (I have to be, what else would I do?).

I'm okay with having the kind of faith which ultimately boils down to having unjustified beliefs that we just assume are justified. But, I must be extraordinarily careful about what I have faith in. Faith in The Good is not obviously faith in God, not even close. 

That "resonating" inside us is perhaps a kind of sense. Perhaps it is reason itself. If it is only emotion, then we are in a lot of trouble. Emotions are the blink-of-an-eye, gutteral, instinctual reactions we experience (the virtuous and brilliant rely heavily upon them); they come from our innate programming and our conditioning over time. They are incredibly useful instruments. It's a central part of the human experience, no doubt. Whatever this mystery may be, to whatever extents our experience of it is rational and emotional, that resonance is our human plight. 

That there is this resonance we agree on. What is this resonance of? I do not see why others are more likely to be correct about the source, the experience, the causal chain, or the sufficient reasons for this resonance than I am. I wish I had an authority to turn to on the matter. I have accepted many authorities on this resonance. Most have fallen (some harder than others), and I with them. It is only rational to continue to increase the requirements for what I take to be authoritative, dogmatic, and axiomatic.

<<<
The sense of desperation in you is conviction. Now, let me redefine that for you, because you probably know the term conviction as a sort of shaming awareness of sin, and that is one of its functions, but that is not what it truly is. Conviction is a deep-seated spiritual awareness of a reality beyond proof. It is faith in its raw form. It is what Scripture calls the “measure of faith” resident in everyone created in God’s image.
<<<

I agree that I'm desperate, but I'm seeking not to be (at least to some extent).

I believe in the transcendental because of my evidence and axioms. I believe it is unwise to take up beliefs or be too blindly driven by our existential awareness (which may be of an illusion) without evidence, especially on matters this important. That which is not justified, I will do my best to eliminate. That which can be destroyed by truth should. I'm cleaning house because it is that very resonance that nearly ended my life. I must manage it more carefully and not be driven so foolishly by it. I admire, respect, and am always curious about the transcendent. I will always continue to think about it, but I will allow my reasonable doubt to shape and temper my pursuit of the transcendent now. 

<<<
Michael, you are spirit, and you are reaching for Spirit, but you are both attracted and repelled by your experience of God. You might blame that on your parents’ presentation of God, or on the way God filters through the muck of the world, but what really generates that angst is the way you – yourself – are experiencing God. It is so hard to see the wrath of which God is capable when we have so little experience with an inability to understand. We are used to working things out to a proven resolution, and here we have a problem that won’t resolve. How can a good and loving God permit – even generate to some extent – such obvious evil?  
<<<

I don't think I am repelled by the transcendent. I think I am repelled by how I've pursued the transcendent, about how desperately wrong the entire world is in relation to the transcendent, and about how little I understand of what feels important. I've been repelled by my life and the world around me.

I would not say I experience the transcendent, or at least not directly (since that is definitionally impossible). I think there are gateways, boundaries to our universe, and fundamental problematics in philosophy we can't resolve which point us to the transcendental. We can only see the threshold. We can convince ourselves it is there through reason (and experience it further through the corresponding emotions which result from habituating our fastminds), but nothing more. It is a kind of madness to pursue that which you know, by definition, you cannot have. I have long appreciated that contradiction. We pursue the shadows of The Good; it is our plight. My goal is to remove the contradictions, inconsistencies, and incoherence as best as I can. I think that is all I can do.

Of course, we are all half-blind (or worse) here. We have to make do with the shadows we see. I know I can be deeply wrong. I have seen it. So, yes, I cannot trust myself, at least not fully. I must do my best with that fact in my deliberations. 

<<<
Paul dealt with it in Romans 8:18-25 (NASB): “For I consider that the sufferings of this present time are not worthy to be compared with the glory that is to be revealed to us. For the anxious longing of the creation waits eagerly for the revealing of the sons of God. For the creation was subjected to futility, not willingly, but because of Him who subjected it, in hope that the creation itself also will be set free from its slavery to corruption into the freedom of the glory of the children of God. For we know that the whole creation groans and suffers the pains of childbirth together until now. And not only this, but also we ourselves, having the first fruits of the Spirit, even we ourselves groan within ourselves, waiting eagerly for our adoption as sons, the redemption of our body. For in hope we have been saved, but hope that is seen is not hope; for who hopes for what he already sees? But if we hope for what we do not see, with perseverance we wait eagerly for it.”
<<<

We run into the problem of authority again. Why should I take Paul to be correct? Why should I take the Bible seriously (outside of understanding what it gets right in ethics, the historical lens, and it's enormous memetic popularity and influence)? Why should I think the Jews and later the Christians were correct? As far as I can tell, the evidence, the coherence of the world, the understanding of human evolution, the empathy with other cultures, understanding how anthropocentric and small we really are (and paradoxically must be to some extent), and my continual escape from the clutches of dogmatic gnosticism points me in the other direction. 

The resonance I experience may simply be different from yours. I am convinced that my agreeing to the transcendent, to hope, peace, and justice, to pursuing The Good, to being rational, to being happy, to being existentially fulfilled, to appreciating and living with our awareness of these things seems best done outside of Christianity. Christianity was an important starting place for a small percentage of the human species, but I see it is not the destination. Call it arrogant progressive revelation (or uncharitably: relativism [which I would contest]) if necessary. I call it a hermeneutic circle, but this one spirals.

<<<
Why is creation subjected to all this futility? In what way can any of this apparent barbarity be related to hope? God, we simply cannot understand!
<<<

I struggled with Theodicy for a very long time, among many related paradoxes of Christian faith (it has been the driving cause of my pursuit of the concepts of freedom, agency, and responsibility in metaethics). The evidence against God, particularly the Christian God (since that is the one I've studied most), is Legion. I have enough charity to set aside a space for the hope in the logical possibility (which is an incredibly weak claim in epistemology) of defeating those objections, however unlikely that may be. Again, when it comes to certainty, I'm agnostic. But, I cannot ignore the evidence. That would lack integrity, and I think it would be unwise. 

<<<
Now put that in your pocket with the idea that this God is chasing you around and think about this:

You know the story Jesus told about how hard it is for rich men to break through to the Kingdom of God? Why is it so hard? It is because they have to lay down something they value more than anything else in the world, and they have so stinkin’ much of it to lay down! I don’t have that problem, and neither do you. 

Or do we?

What if the same rule applies to other forms of wealth? A wealth of knowledge, of intuition, of creativity, of intellect… is any one of these easier to lay down than a few billion dollars? I think not. We are very accustomed to leaning into our own strength, and we have seen it topple all the problems we have turned it on. All, that is, but One.

What if your greatest strength is your greatest impediment to knowing the God you cannot stop seeking because He is relentlessly seeking you? What if the fact that you cannot understand Him is compelling you to deny Him when you cannot deny Him without denying yourself? What if I told you that that is the extreme end of every gifted person’s quest for (flight from) God?
<<<

I interpret the rich man as being unwilling to sacrifice himself, his happiness, etc. for another or something greater. It's not simply a story of giving up something we value; it's about overvaluing ourselves in particular. I wouldn't say that is precisely my issue here (although, I'm obviously deeply concerned about being happy after my deconversion).

I am willing to sacrifice myself. I am willing to die and suffer for the right reasons. I believe I have the integrity to do that. But, I have seen that I must be wiser in my selection of what I'm willing to sacrifice myself for. We must be wise in what we devote our lives towards.

I agree that intelligence is a kind of wealth, but I think it's a very special kind. Intelligence is directly what allows us to be wise, and wealth less obviously so (indirectly and instrumentally, to some extent, yes; it's hard to be wise when you are starving).

I agree my intelligence is an impediment to Christian faith (although, not an impediment to the belief in the transcendent). But, I don't think this is a bad or wrong thing. I do not think I'm being unwise. In fact, I think I've been unwise to be so faithful for so long. Being unwise means you aren't really being very intelligent in crucial ways. Wisdom is a specialized kind of practical intelligence, knowledge, and effectively trained emotional reactions. There are many things which I'm not intelligent about, and I've made many mistakes in this arena. As you point out: I know what I've seen though (although, I mean to say this in the sense that: I cannot unsee what I've seen. The evidence is overwhelmingly convincing to me).

Why should I think agreeing to and being moved by your claim would be wise of me? Ultimately, we cannot escape Reason being the core of the wise decision procedure. To be clear, this is not the claim you are unreasonable; far from it! You are clearly brilliant and have walked these paths many times. I think our reality maps fundamentally differ though, and so, in being as reasonable as we can, we choose different paths.

I do see myself as being in a rare (but not unique) position. Not everyone has the chance to see what I do, and so I have given serious thought to how others in my position have made progress and how they handled these existential crises. I have spent a non-trivial amount of time researching the search for meaning in the lives of gifted people. Not all journeys are the same of course, but I think they may provide footholds for me to learn from. I still must test it with reason though (not that I'm perfectly rational or the arbiter of what counts as reason for others); it must click with me; it is the only wise decision I see. I do not know how to reason myself away from reason, except insofar as it is necessary for reason or wisdom. I am neither convinced the Christian God is necessary for reason or wisdom, nor am I convinced that the Christian God is the fitting result of my reason and wisdom (however poor it may be).

<<<
In the end, you come to the realization that you cannot reconcile God with the natural world any more than you can blend the sea with the sky. You just have to decide whether you will recognize yourself for who you are – an air-bubble transforming into your true self above the reality around you – or a part of the reality encasing you and divorced from the sky. No matter what you decide, you will rise. All you are deciding now is how the air above you will receive you when you are freed from this present reality. 
<<<

I think it is in my realization of what I am that I have come to terms with and felt a peace about my loss of Christian faith. I have also studied PK's and MK's; there are several consistent tropes and patterns I see in us. It is the best option I can find in my context. That doesn't mean I'm certainly right, of course. It could be temporary and lacking. The pursuit of the transcendent will always be incomplete.

<<<
I believe that you will make peace with the God you are presently denying, because I am convinced that you are too mentally honest to do otherwise. I pray that God protects you and your family – my family – in the process. I would tell you to stop making it so hard on yourself, but that would be like telling you to stop breathing the air. This is your journey. I would not presume to drag you along it even if I could. But can you see my little light shining from where you are? I am a bit further along on a very similar journey. I am listening to you. I am praying for you. And if you need me, I am here.

​Now that that's said, I can get back to my listening, and you can (I hope) get back to your decompressing. (You knew I was a preacher, and that preachers preach, right?) Still, I want you to be heard and to know that your journey matters. 
<<<

It is clear that you understand much of my cry and conflict. Few see it as well as you do. I feel indebted to you for taking the time to respond to me and to empathize with me. I mean it with the same heartfelt-movement I experienced when I was still Christian when I say: I see Christ shine through you. 

I definitely appreciate the desire to save my soul. I think it shows incredible kindness and empathy. It's an expression of love. 

I know it is not easy to talk to me. Lots of people think I'm an arrogant prick (although, thankfully, not everyone). Of course, convincing me is not easy (I would know). You may feel like you are arguing with a brick wall. I can only point to who I have been and say: I have obviously been convinced by many arguments over time. I have changed a great deal and will continue to do so. I am listening. 

Thank you.


Love,

h0p3













Today I took a test on powertools. I tend to read ahead in the book. My teacher gives us a study guide, and I carefully study those particular sections. I make A's on tests, but sometimes I miss a couple questions. My teacher seems unworried by it. But, this is a culture which is fine with C's and B's. I will force myself to retake the actual pipefitting exams until I can get them all right though.

Since I took my test early in the day (Mondays, from what I've gathered, are days where people sit on their asses and pretend to study while the teacher screws around), I was given something cool to do. I had asked about pipebending (since my brother talks about it often). Apparently, it is very uncommon for a pipefitter to do, but it does happen. So, I wanted to learn. We happened to have a giant programmable pipebending machine. We dusted it off (cleaned it and the area around it too) and started using it. I got to work with black iron pipe for the first time, and I also got to use the giant pipe cutting machine for the first time (super easy to use). Apparently, we are making 90s for the welding shop to use that day. /shrug, cool with me.

The pipebending machine hasn't been used for a year. My teacher had to bring out his calibration notes and the manual for the machine. We kept being 13 degrees off on our 90 degree bends. We cheated to make the bends (try squaring it by hand until we got it "good enough"). This didn't satisfy any of us. My teacher couldn't figure it out, so he let Keith and I to figure it out. We watched the manufacturer's video, read the documentation, and messed around with it. It started working correctly for us, thankfully. I hate to say that I don't fully understand why we got it working when my teacher couldn't. It was kind of baffling. My suggestion, that we weren't initially mounting the pipe at a perpendicular angle (which is necessary) was turned down. I am quietly suspicious that I'm still right about this, but I can't say that I know that I'm right. I could easily be wrong.

I've been studying CAD prints. There is a lot of information on them and tons of objects I've never seen before. It looks doable though. From what I understand, the foreman (and/or pipefitter) interprets the prints and gives instructions or simplified isometric drawings to his underlings. A student who has been in the field (although, I suspect he doesn't have the drive or wisdom to know how to maximize his upward mobility) says that I wouldn't see those plans for at least 3 years as an apprentice. My teacher says a good journeyman or foreman would take the time to show me (and that I should definitely seek to understand them). I can only assume I will need to be excellent at it. My teacher walked me through a bunch of problems/questions I had about the prints he lent me. 



 

Dollars to donuts, Trump has a slightly above average IQ (kill me, please /s) and an extremely high dark-triad spectrum rating. He's not bright, but he's smart enough to infect people's minds with garbage. He's learned to say the right garbage, in the right way, at the right time, to the right people, and so on (but, obviously, not for the right reasons). He has a kind of memetic virtue to him (however disturbing the thought) like the virtue of viruses unto themselves. In his extreme way, he desperately seeks to appear (if not be) wealthy and powerful, and he miraculously pulls it off in some twisted self-fulfilling prophesy. This alone is enough for him to want to be POTUS.

That said, I think many worry that Trump's apparent admiration for Putin will emerge as sincerely flatterious mimicry. How is Trump going to fleece us beyond the opportunity cost of having a POTUS who even appears remotely sane?<<ref "1">> He's clearly going to profit from being POTUS. We know the why. We don't know how, or at least not all the ways.

Trump's family's housing arrangement and consistent vacations seem almost like a direct transfer of a non-trivial quantity of US government cash to himself. This is beyond wasting taxpayer money. Trump is healing his self-created insolvency with our money. I can only assume he will milk us at every corner he can if he would do it so openly at this almost childish level. We will see what other methods he finds to enrich and empower himself during and after his reign.

Our only hope is that he's too stupid and lacking in empathy for himself to follow the advice of those who could really turn him into an even more terrifyingly competent Putinesque monster (Trumps connections with Russian political and kleptocratic interests is frightening). He did straight up say in his campaigning that he would leave all foreign and domestic leadership calls to his hand-picked staff (uh...). Four years or until his impeachment seems like a long time (literally too long, ofc), and it may only be a matter of time before Trump understands how to effectively wield his new toy, the Office of POTUS.<<ref "2">> 

We have passed the point of presidents who willingly go into debt because they know they will have the political clout and "foundations" (non-profits too often are fronts for making money and discharging or converting social and political capital) to pay it back and still make bank while swinging their big dicks around with the Hyperclass. Sinners with shame are bad enough, but sinners without shame may be even more dangerous.<<ref "3">> Trump marks a new era in government corruption, particularly in his blatant openness about it and our willingness to accept it.

-------------------------

<<footnotes "1" "e.g. Shillary. Not that she is actually sane. Her front is a different kind, and the evils she would bring with her a different breed.">>

<<footnotes "2" "I can hear fools telling me to 'respect the office.' As always, that is some psychopathic bullshit. You'd have to hate yourself and fail to respect your own dignity (and others) to agree to that obvious falsehood.">>

<<footnotes "3" "To a point, of course. We can't always tell the difference between those who cover themselves with the mere appearance of shame and those who actually experience it. The truly most dangerous devils are those who still look like angels as they stab you.">>
Cambridge Analytica may or may not be snakeoil. I take it to be a reasonable possibility they legitimately contributed to Trump's victory. They appear to be a company devoted to "audience targeting" and mass-manipulation done more efficiently. Perhaps they are weaponized marketers, and it is possible they wield non-trivial influence over us. If not them in particular, then perhaps an entire industry.

We also must worry about automated propaganda filter-bubble generation and social media analytics/bots which provide significant predictions and enable not only conversations and claims to be shaped in the public sphere but even injected into our private lives. Automated astroturfing and mass behiavor modification are significant weapons. The US military-industrial-complex have long worked on such projects. Targeted and mass idealogy and behavioral shaping exist. There are profound technological memetic weapons wielded against humanity. 

Companies like Google shape what you see more than you likely realize. Know who "serves" you and why. Beware of Geeks bearing gifts. It is inevitable that a capitalist society will (and imho already has) enabled much darker corporate adversaries to arise (and many have been around longer than Google).

Big Brother isn't merely the state. I don't know if it ever really was either. I believe it is a much more dangerous adversary than a simple government since it is increasingly owned, used by and for, and beholden to none other than the Hyperclass. We should fear psychographic weapons which abuse our monkey-brains and keep us on an emotional leash. Automated functions which influence human beliefs, emotions, behaviors, etc. should be highly regulated, not to form an oligopoly on it, but rather to prevent abuse and mistakes that we can't take back. AI-empowered rhetoric is on the side of the Two-edged Sword of Technology we don't want to see. Transparency is key. 
Homo sapiens can be categorized in many ways. Let's be clear: differentiation is not conceptually immoral human prejudice (racism, sexism, etc.) by definition, even though in practice they often are connected (sometimes a poor theory is applied, and sometimes we see a poor application of a theory). 

There are genetic categories of human beings. Depending on how you differentiate (your principles and reasons for them), you may see only one genetic category or you may see each individual human as their own genetic species, or you may see something in between.This is the genetic categorization spectrum. Again, we're generating description, not prescription here. 

There are clearly memetic categories of human beings as well. I think pure Kantians and pure Psychopaths are different memetic species. Again, we're generating description (not prescription) here.



I guess I was able to convince my teacher yesterday (despite his "you've gotta learn to crawl before you can walk" response) to allow us to try special offsets (it was the natural next step, since we've covered regular offsets already in practice). I did the math right. We had difficulty figuring out how to measure it (the protractor is broken and we were misguided by another student). After we figured it out though, we got it built. Everything looked clean. The teacher eventually checked it out (his alcoholism and personal life really get in the way of him actually being present to do his job). He checked the levels, the rise (neat trick which I'm glad to have used, since I knew that is what he would be using the check it with), and the center-to-center lengths of the pipes. I always check these, since I know that's what he's going to do. He said everything looked great (because it did; I wouldn't have handed in half-assed work). 

Afterwards, I voiced my worry that I had used the level+measuring tape to check that our rise was correct, but I wasn't quite sure how to do it for the offset (he should have taught us that today instead of getting drunk, wandering, and watching Youtube,  since this was our first time doing special offsets). He showed me (it was a simple rotation, and I'm embarrassed I didn't see it), and when we checked it, the length was off by an entire fucking inch. In pipe, especially at the scale we were working at, that is like missing by a mile. I was mortified.

Since he had already passed it, he didn't want to go back on what he said. It was obvious that he wished he didn't pass it. It shouldn't have passed. I know I didn't pass it. Something was really wrong, but neither the teacher nor I could give a satisfactory answer (my partner, Nash, doesn't give a shit: a pass is a pass to him).

I have spent time trying to figure out what we did wrong. I'm pretty baffled. The teacher claimed it was that our parallel pipes against the Run weren't perfectly level. But, I checked those very carefully (and even the teacher saw it). I don't think that accounted for being an entire inch off. I checked the math, especially since we are forced to round our degrees and lengths (which can vary up to a half a degree in rise and roll, and sometimes a 1/16th of an inch in length) -- rounding couldn't account for that much difference either. I know I will be trusting that broken (some of our fellow students broke it) a lot less, and I'm going to measure a lot more by hand. Maybe it was a combination. I don't know. I'm actually disappointed in my work today. Clearly, the "learning to crawl" claim is still accurate. Well, shit. That's okay. We've all got to start somewhere.

I need to learn more leveling, aplombing, and degree measurement tricks. I need to see the right, cleanest, and fastest way in advance. I at least did the right thing in building the special offset before building the edges (which is the more natural approach). Well, I hope he gives me a couple more special offsets. I clearly need the practice. That puts me behind the schedule I wanted to be on, but I am strongly convinced I need to understand putting geometry+trig into practice like the back of my hand. It doesn't matter what kind of pipe of construction method you are using, the math is always fundamentally going to be the same (TO's vary, ofc). 

On a positive note, because the teacher was screwing around (and I was forced to sit around waiting for his input [normally I read ahead in the book, but there is less for me to read now]), a fellow student, Connor (who is obviously not a fool) taught me to use one of our welding machines. Having read about it, I knew a bit about what to expect. Let me tell you: welding is really hard. It's an art. I've gazed at a lot of Welder Porn, and my beadwork is a giant pile of shit. Connor said my first time was still decent, and better than any of his partners (all in the last trimester, but they are retarded). I also got to tack for Connor's buttweld object. I can tack. The actual welding (which thankfully, neither the tack nor the welding will ever be in my job description as a pipefitter), fuck no. I'm looking forward to practicing a ton just because it's fun and could be useful later.

Unemployment is a misused economic marker turned realpolitik symbol (like the price of gas). It enables us to inform and tell many kinds of fundamental political and economic stories.<<ref "1">> It's an influential metric about a contentious issue.<<ref "2">>  

Defining and measuring unemployment is not simple. There are many stakeholders and interpretations of data that isn't entirely public. It's crucial that we appreciate what it represents, what it tells us, and more importantly, what it doesn't. Most people use the official U-3 unemployment rate because that's what most news outlets use. I believe this is a mistake on both practical and theoretical levels. 

I do not mean this in a post-fact sense: we should take statistics and those who wield them with a grain of salt. Social science requires context and argumentation.<<ref "3">> Problematically, I am convinced people gloss over what unemployment is actually trying to measure.

The goal of the "Unemployment Rate" project is to measure and identify patterns in labor underutilization.<<ref "4">> The goal isn't to merely count in simple piles who has a job and who doesn't. There's something deeper and broader we're trying to accomplish with it. Roughly, we're trying to measure and define the various contexts in which people's skills, knowledge, effort, time, etc. are being used by our economy. i.e. Is capitalism maximally consuming human capital? Who is being consumed, in what ways, to what extent, etc.?

Unfortunately, even the more realistic U-6 measurement, which tends to show double the "official" unemployment rate, does a  poor job of capturing the ideal information we seek. Of course, U-3 and U-6 tend to show extremely similar graph structures (not an accident), and I'd wager both have their uses for people working in economic, financial, and monetary sectors. One of them, however, is clearly closer to the ideal mark (not that we will ever reach such a thing; it is clearly infeasible) though, namely U-6. It is a more accurate depiction of labor underutilization, the underutilization of human capital.

Our information is deeply incomplete. The "pragmatically" (i.e. self-interested) willful-ignorant will be tempted to say, "this is the best we've got" and be done with it. That is the wrong attitude, and that is not how we should aim for the truth (particularly on such a crucial metric for understanding the natures of human realities). We really must dig into what counts as "people's skills, knowledge, effort, and time" to see the holes in our measurements, to more closely align theory and practice, and to be able to more accurately understand the world we live in so that we can become a happier species. 

I think this is a much clearer (yet obviously far from clear) set of ideal metrics of the Real Unemployment story: 

* If I have X amount of skill, and only Y amount of it used, then Z% of my skill-based capital is being used. 
* If I have X amount of knowledge, and only Y amount of it used, then Z% of my knowledge-based capital is being used. 
* If I have X amount of effort, and only Y amount of it used, then Z% of my effort-based capital is being used. 
* If I have X amount of time, and only Y amount of it used, then Z% of my time-based capital is being used. 
* ...and so on and so forth...
* etc.

Take a genius, force her to pick cotton for her entire life, and you've deeply unemployed her because you underutilized and underemployed her as human capital.<<ref "5">>

There is an ideal algorithm for sorting through this ideal data which gives us the ideal unemployment/underemployment<<ref "6">>/underutilizated human capital rate. The U-3 measurement is miles from the ideal. More importantly, it is even miles from the practically ideal or the ideally practical. While nobody and no measurement is perfect, we can do a lot better.<<ref "7">>

We've accepted an unreasonable "new normal" by ignoring the reality of what is measured, by being content with the U-3 measurement, by not taking it upon ourselves to think carefully about what is happening and what it means. That aphoristic phrase: lies, damned lies, and statistics is applicable here (even the statistics themselves show it). When you start looking more closely, you'll find the official information deeply lacking. Look around you. Use your imagination to see the possibilities. Reality is darker than you think, and it can be a lot brighter than you realize.<<ref "8">> 

----------------------


<<footnotes "1" "The audience must always seek to understand who is telling them the story and why. (Trust no one, yo. [;P])">>

<<footnotes "2" "During my last conversation with my parents, things were going swimmingly enough. Two hiccups, one was a discussion about substance use (although, they brought up the subject, I clearly made them uncomfortable when I brought up my own use later). The other was unemployment. My parents and I clearly disagree on the state of the world in many ways. We try to say the right words with each other and avoid topics that might cause conflict. Unfortunately, they often don't know what we disagree on. I hate that we feel like we're in a lose-lose position. I also react strongly when I see that it is their and their generation's attiude and point of view that have brought this calamity upon me and mine (I lacked empathy [and so did they]; I hope I will do better).">> 

<<footnotes "3" "My parents remain ever correct in their appreciation for mixed quantitative+qualitative methodology in social sciences.">>

<<footnotes "4" "Although, that isn't the Final Telos. Clearly, we take these measurements for other reasons.">>

<<footnotes "5" "There are other important narratives to consider here. When you define The Good, you have an even stronger point of reference to understand the underuse and even misuse of human capital. We move past mere capitalist exploitation into understanding the ways and extents to which we contribute to and partake of The Good. This is what the ideal of ideal Real Unemployment measurements is about.">>

<<footnotes "6" "I can hear the morons now claiming that the problem of underemployment is simply the result of too many people going to college (as if the fundamental reason to be educated boils down to one's market value [to be against the liberal arts is literally anti-intellectualism and antipathy for humanity]). I do not trust anyone who does not immediately accept the necessity of idealism, regardless of how practical they find themselves to be. For the record: Mike Rowe is a conartist.">>

<<footnotes "7" "Unless we must discuss the very concept of freedom. This is a lose/lose position though. You will give something much greater to be right on this.">>

<<footnotes "8" "Do not commit the naturalistic is/ought fallacy; do not conflate them.">>
It is difficult to know what is real and what isn't in these troubling times. Finding the truth is hard work. Despite Trump's denial of relations with Putin and Russia, the evidence and events we've seen appear to point very much in the other direction.

* Trump's administration has many ties and private lines of communication with Russia, and we've already seen several resignations over these ties.
* Our own intelligence agencies withhold information from and clearly have a broken relationship with Trump because he may be compromised by Russian interests.
* Trump has publicly defended, complimented, and stated his admiration for Putin on multiple occasions. This is wildly different from how Trump treats other leaders of foreign nations. Additionally, Putin has a similarly positive stance toward Trump.
* Trump's Dossier, a credible-appearing piece of opposition research, suggests Trump faces both the Russian carrot and stick.
** The carrot is bribery. It appears Trump may have gained a stake in the ~19% of Rosneft (Russia's largely state-owned oil company) recently sold to a privatized matryoshka shell corporation (anonymity for capitalists).
** The stick is blackmail. Who wouldn't want to get pissed on by a beautiful prostitute? I'm sure there is far more in that mailbag. This is believable given Russia's fame for its profound surveillance of public figures, politicians, and powerful individuals within its borders (and Trump has certainly visited Russia). Par for the course.
* It is rumored that White House recording equipment is turned off for conversations between Trump and Putin.
* Russia, by its own admission, communicated with Trump during the election campaign.
* Trump has weakened the RNC's platform for the US-aided defense of Ukraine, a nation partially illegally (by international law) annexed by Russia. This is giving the nod to Russian imperialism. 
* Trump is quite hostile to NATO (going far beyond the usual US presidential criticisms), an institution which stands in opposition to Soviet power.
* Russia is widely thought to be responsible for the DNC hack (and possible RNC hacks). This is no accident. Russian interference with the US election is likely quite real. Clinton appeared to be anathem to Russia, and Trump was a loose canon they could buy.
* There is a rumor that Russia will gift Snowden to Trump (who obviously despises transparency and whistleblowing and seeks to make an example of Snowden [with fervor beyond even that of the War-Criminal Obama]).
* Trump's son (who is clearly very trusted by Trump given the attempt at a fake blind-trust) admits to heavy Russian investment in Trump's businesses (yet another reason Trump would not liquidize his assets to avoid conflicts of interest).

Clinton is obviously a warmonger (even moreso than the ever disappointing war-criminal Obama, Bushtards, and her psychopathic husband). What seems scarier about Trump is that the inevitable conflict escalating into an all out war is the result of his //collusion// with Putin and Russia. Totalitarian rulers need war.<<ref "1">> This is beyond Coldwar. It's part of the reason the US has always been at war. Trump appears to be taking this to the next level. It is so weird to see Putin and Trump buddy-buddy while hostility accelerates. 

Why? That is the question. The broadstrokes are not enough. Trump is no mastermind. What does this war buy Trump? Putin? Who are the winners and losers (you know, besides the world in general)? I simply don't have enough information or I'm not smart enough to see it (probably both).

----------------------------

<<footnotes "1" "I'm always blown away by nationalism and supporting the military-industrial complex. Fools.">>
I'm feeling better about yesterday's project after today's, and perhaps I shouldn't. Basically, Nash had to go study for the test he failed, and I was given our next project. I understood what it looked like, did the math twice, grabbed my supplies and organized them, and started making screwpipe to order. I'm very fast now. I nearly finished all prep work in 30 minutes (before our 1.5 hours of watching safety videos on cranes/etc.)

They weren't the usual overly deep threads this time. I still had 3 turns but also followed the threader's hardware recommendations too. I'm threading the pipe as lightly as necessary to get 3 turns, and I'm trying not to go too deep. It clearly makes sturdy connections that way, and I still get the safe quantity of rotations. I fear we have a silly shop class practice which makes it easier to screw pipe on. The goal is tightness, sturdiness, and maximal seal for a reasonable amount of effort, and I think students are avoiding that. I've seen a lot of 4 and 5 turners from Nash.

Anyways, after lunch I got to start building. I built the special offset first, it was clean, tight, and level. Nash joined me, and we started putting the rest together. We did it well, and we were very careful to level at every stage. We took no shortcuts. The moment of truth came upon rotation, it was clear that we were off by exactly 1 inch (uncanny!), again. I assure you that the cuts and lengths were fine. The center-to-center TL measurements were good. And, yet, it didn't work. I was frustrated.

I asked for Tim's help, since I realized I must be doing something fundamentally wrong at this point. He took all the measurements, levels, and shrugged. Seeing I wasn't pleased, he told me to do what I had already done. I didn't argue. We did again (and again). He checked again, but he would not actually stay there with us to see the steps. He was as puzzled as we were (although, Nash did not understand why Tim and I were expecting particular pipes to be level on the correct rotation). 

He told me he takes my word for it if it is finished. He also later said not to let it bother me. We got it close enough, and that was good enough for him when it came to screwpipe. I think he knew what was going to happen, and he's trying to "let me off the hook" because he doesn't have an answer. His answer is the rounded degrees now. I'm not going to push him about it. I'm going to let him let me off the hook here. I think he's telling me to relax my standards, so I will. He's a pro at this, and even if this technically should work, I should trust his judgment. It is practical. 

Everyone, even the teacher it seems, thinks screwpipe is a possessed demon over which you cast spells and pray it works. Uh...what? There is clearly an explanation for the phenomenon, but I've not found it yet. I mean, I realize I can't actually find 44.7 degree fittings, only 45's; but .3 degrees does not account for an entire inch here. Where be mah scientists and engineers? 

My partner borders between "not giving a shit" and "being annoyed by" this problem and my focus on it. We're cordial, of course. Thus, I will learn to let it go. Be cool, man. 

Whatever.  We cleaned up and left. I have heard rumors that we may not have class on Friday from rumors my teacher heard. Essentially, schools everyone are having temporary closings, Sick Days en masse.

So, I feel better about it. Outside of the practical on-site particulars and principles which I've yet to encounter (I will eventually develop the virtuous perception of it), I'm good at screwpipe. Additionally, none of the official prints I've studied seem to entirely avoid special offsets, except standard offsets using isosceles with 45's. They certainly had tons of information I didn't understand, but visualizing the broad undetailed pipework in these plans is very easy. The details, however, will take time to appreciate, feel, and recognize immediately. 

My teacher is convinced screwpipe is widely used enough that all pipefitters at some point or another will encounter it (particularly if and when jobs are scarce). We will see. 

On a different note, two of the middle-classmen who work together (I regularly ask them questions, even over the upper-classmen) got a temporary co-op. They were very excited. I am not convinced it is worth it yet. I am still learning a lot, and there is much to master. If I see us slowing down more and more though, I may take the option (perhaps my teacher may even push me that direction). I actually could get away with taking a test and practicing new stuff for 1-2 days. I think most of the students can, but I am talented. 

Hey, it would be money and experience. It would hold me until the union. I really don't want to sacrifice my speed and knowledge gained through this program. I need to be sure I'm maximizing its potential. There is networking to be done as well. 

I see that the union would much rather not pay me to learn this. They want to maximize the capital they can extract from me as well. The union is the only place with guaranteed training. It's worth getting into, even if they are ugly. How best can I pay the upfront costs? It still seems like crushing this class and making a name for myself through my teacher is extremely useful. 

I don't know yet. I will pay very close attention to what my co-op'ed classmates say, with a grain of salt and Straussian ears, as usual. I need more information to maximize my efficiency and minimize my risk.






//This one is hateful. I'm right, but that doesn't mean I will be convincing. I take this to be a useful opportunity to blow off steam.//

I am amazed at the public's backlash against whistleblowers. You people are fucking retarded, and I hate you all (even as I attempt to empathize with you [as you can see, I'm failing in this moment {or perhaps, I'm empathizing so well with you that I'm literally saying what you'd say, in the way you'd say it, if you knew what I knew]). You are part of the problem. It's one thing for your stupidity to cause you and you alone to suffer and die. It's an entirely different thing for your malicious ignorance to cause everyone else to suffer and die. What gives you the right to be like you are? I have no power over your malicious ignorance. 

I want to scream at you all: don't you see the difference between morality and legality!? The legal positivists are right, and therefore the rule of law is still fundamentally a joke.<<ref "1">> Godwin's Law time: Hitler and Nazi Germany had a conceptually legitimate government. That doesn't mean we should do what they say, that doesn't mean we are unconditionally, normatively bound by their laws, and so on. Apply that reasoning, for the love of god, before we all suffer and die. I would stomp a hole in St. Paul's ass regarding this if I could (you aren't looking so hot yourself either, Jesus<<ref "2">>); that brilliant dickhole saw one mountain, but none of the mountains behind it (thanks for that).

The DNC and far too many democrats I know have consistently opposed and sought to punish/prevent whistleblowing.<<ref "3">> This was especially obvious when a Democratic president, Obama, was in charge. The DNC are wolves, and democrats sheep (fear not, I have even harsher opinions about the RNC and their pig-slaves). Now that Trump is president, the DNC and the democrats I know sing a completely different tune about whisteblowing. They are all for it now. They see the value in it only when it suits them. Hypocrites and psychopaths, the lot of you. Your lack of even trying for ideal idealism disgusts me.

You buy that aphorism: information is power. Who do you wish to empower? Who should you really fear? What does it take to have a functioning democracy? Don't you see the necessity of whistleblowing? Don't you see the real enemy? Of course not. You are a fool.

We are fighting capitalism, the Hyperclass, deep states, dark money, mind-control,<<ref "4">> multi-national political entities, and the idiocy of humanity. The punks and hippies were telling you the truth before they were corrupted and swallowed up. It's the "system," man. Truth is everything. Transparency is key. Sunlight is the only disinfectant. Whistleblowing is a necessary condition to our freedom, political equality, economic opportunity, and happiness.

Look through the history of whistleblowers. Whistleblowers are not perfect people, but they are almost always heroes. They are people who sacrificed immensely for you. Look how you repay them! You know what, I have every right to be angry with you. You are, in no small part, the reason this world sucks and the reason I'm unhappy. Fuck you, and please KYS.

------------------

<<footnotes "1" "It seems only the virtuous, which often doesn't include me, really know when to apply the rule of law.">>

<<footnotes "2" "I can think of a couple gnostic interpretations of Jesus that allow him to escape this criticism. Odds are that you don't give a shit about that though. I'm sure you know what Jesus 'really' meant.">>

<<footnotes "3" "Inevitably, there are fools who think the 'proper channels' are the normatively appropriate channels by definition. Again, please see the moral/legal distinction.">>

<<footnotes "4" "Let's be clear: telepathy and supernatural means of manipulating objects and minds are bullshit. There is no radical neurosurgery (at least not yet). And, yet, memetic conditioning and mind-control are quite real. Classic rhetoric was only the beginning. We have honed it, technologized it, and created mind-weapons. The power in the hands of the few is breathtaking.">>


Teacher didn't show up today since he was sick. It may have been planned (given the rumor he said the day before). The Flu is very contagious this year. I'm hoping to avoid it. I'm okay with being out of class today. I got a call later today that we aren't going to have class (as rumored) tomorrow either. Welp. Whatcha' gonna' do? I'll enjoy my time off and work hard on other things. Hopefully we can dive back into it next week.
* 7" Fire Tablets with Fire OS 5.3.1.0 to plain Nexus Android
** Devs are making it harder and harder to gain control of these devices. I was lucky not to use wifi (and use it minimally when it was necessary for this procedure).
** I've never done this from Linux, but it turned out to be crazy easy on the desktop end.
** Found a great kit that said it sometimes did 5.3.1.0 after multiple tries (why it takes multiple tries blow my fucking mind, but it was true). 
** Root took quite a while, threw on some other stuff, and it took a while to find a version of FlashFire that worked on this device.
** I actually bricked the machine on the first ROM substitution.
** Thankfully, unbricking wasn't too bad. Grabbed an image and pushed it on the device while in recovery mode through adb.
** The second time went much faster, and I tried a slightly different ROM. Worked like a charm.
** It's one of the cleaner installs of Android I've ever used. It's very bare. I adore it.
** This was the second or third hardest time I've had taking control of a mobile device. This one was especially locked down.
* [[j3d1h]] was setting up her grandpa's VM to autostart on our HTPC. Whatever she did seemed not to work. 
** It was running hot anyways, so we took it apart, cleaned it, and attached the CPU-fan (which apparently needed some fixing anyways). 
** Whatever the problem, there was no simply troubleshooting. So, we actually just reinstalled. It took about 2 hours to get it all together, but it's basically set now.
I hope to study human tropes. Sourcing from:

* http://tvtropes.org/

Here we begin the trope inspection.

* [[Trope: The Social Darwinist]]
Hello, h0p3!

Sorry to be slow in responding. You know that death tsunami predicted a few years back? I am feeling the first waves of it. Few pastoral responsibilities trump all else like the funeral, and having them back-to-back is exhausting.

Thank you for looking so closely at my witness to you. I was concerned that you might simply dismiss the whole conversation and be upset with me for trying to reclaim you. Thank you particularly for being generous with me when my words stumble. I have a deep respect for you and would never be deliberately uncharitable.  

I am not adept at arguing. It is usually a waste of energy and time for me. But I do listen and I do care. 

Faith is a "substance" that presents as fragile - almost gossamer - but wears like a magnesium alloy. No one can transmit faith to anyone else. We can only tell the story, and you know the story by heart and head. Faith is not given to you, it comes to you on its own. 

You say it is not easy to talk to you, and that may be true of us all from time to time, but it is easier to talk than to endure unyielding silence. I am not heavily invested in convincing you to believe in God as I know God. I am more hopeful that God will walk toward you in Self-revelation. That is a terrifying thought, given the many facets of God's revelation, but everything I know about the nature and depth of real love I learned from such an encounter. We all need intelligence to survive in this world, but we need love to live in it. 

Years ago we had a discussion about the individual v communal basis of faith. (Do you remember that conversation?) We disagreed on where one's faith-practice found its origin, while we both admitted that faith works itself out in both spheres. I still believe that faith is more an individual matter of the heart than an acceptance of a societal construct. In that sense, you might be closer to faith now than you were when you were drinking the communal kool-aid. Remember that Jacob wrestled all night with the angel before he became Israel.

Keep digging at those religious roots. When you find a living one, you will recognize it. I know relatively little about religion, and would be comfortable knowing less than I do. What I know about and treasure is faith in a dependable relationship. 

Keep looking. I'll keep listening. I love you!

[[R]]
We live in a society where no one believes in anything (in a sense). When everyone lies, we have noone and nothing to believe. The world is so distorted we cannot trust ourselves or anyone else. We can only mumble: "it is what it is." 

We are splintered into factions. We are fragmented. We are beyond disunity. We sit in memetic gridlock as the poison sets in. The collective consciousness of Humanity ruptures, entropizes, and fades. We do not empathize with ourselves. Who are we even empathizing with? Why would we? How would we?

The fakeness of the world hovers between dark surrealism and normality. Understanding reality is such a negative experience that we may even be fooled into believing it is actually derealization. The truth is that the darkness is here though. It isn't merely coming for us. It is already upon us. 

Our dreams are dead. We are disillusioned. We do not have a vision of the future. We do not have hope for humanity. Why would we plan for the future when there is none? We have been well-trained to ignore the possibilities. We are slaves wearing blinders. This is the brutal fact of corporate power. We will not escape.
I am blown away by the number of people on all political spectrums who do not understand the value of scientific expertise and the gold standard of science in empirical realms. I understand mistrusting non-scientists who wield scientific thought (all too often unqualified and agenda-driven). I appreciate how science has been clickbaited and politicized to the point that we are immersed in a postmodern propaganda problematic (in addition to the standard postmodern epistemic problems).  I can even appreciate feeling small and stupid when I can't even understand a century old fundamental theory in physics, like quantum mechanics, in any reasonably intuitive way. Clearly, science is really fucking hard, distributing that knowledge throughout society is even harder, and using the knowledge wisely the hardest.<<ref "1">> None of this excuses our society's profound anti-intellectualism and the rampant denial of the value of science.

I also think there are significant philosophical problematics which scientists are loathe to understand; too often they do not understand the boundaries, purpose, and epistemic position of science itself. To be clear, I think the majority of people (including myself to no small extent) fail in this respect. When I press anti-scientific individuals on their philosophy of science point of view, I usually find a confabulation to justify their metaphysics. That's not what I'm talking about here at all. Scientists and non-scientists alike need at least one course in epistemology.

In an information age of transhumanist religion (and a borderline blind religion of science itself) and the capitalist infection of the pursuit of justified beliefs about the nature of the physical universe, science has been co-opted, corrupted, and faces a legion of barriers to its true calling.  

I appreciate raw curiosity and the pursuit of truth and justified beliefs. Politics, economics, and religion impede, enslave, ignore, and misuse science.<<ref "2">> The incentives and social structures we've placed in front of and around scientists and their respective communities is a true clusterfuck. Even scientists I've met and worked with give me a "whatcha' gonna do, eh?" if they even care about it at all. The crisis of science is part of our global "post-truth" epistemic pattern.

* Reproducibility, a cornerstone of empirical investigations, is dying. Almost nobody does it, and whatever is done is generally privatized (which does not disseminate the information and seals off the public from the knowledge it paid for and rightly deserved in the first place).
* Published work simply can't be trusted because of how difficult it can be to reproduce results. Some fields, like psychology, have fundamental reproducibility problems that extend all the way through their canon. It's so bad that not only is it rare for scientists to be able to reproduce the published work of other scientists, but many scientists can't even reproduce their own work! This is fraud.
* Innovation is deeply overincentivized in a publish-or-perish university (and whitepaper) environment, sacrificing caution, accountability, and intellectual integrity. 
* Massaging data is real. p-hacking and cherry-picking are common. Poor methodology, small sample sizes, and terrible analyses are common. Concealing, manipulating, and fabricating data are tools of the new scientific trade. I've seen it myself! We don't reward people for not massaging data. We don't give them enough reasons to do science correctly. What the fuck do you expect to happen when they can barely afford to eat as a post-grad?
* We see profound attempts to silence and discredit the scientific community (neither using, nor for the reasons I've given), simply to maximize profits for shareholders.
* Scientists and their masters have profound conflicts of interests politically and financially (there is even an increase in "fashion" in science, lol!). The pursuit of truth is compromised. This infection only appears to being getting worse as it becomes privatized.  
* Science is becoming hazier and less accurate for the public. More and more, science finds its success in private settings. We are centralizing knowledge and power in the hands of the Hyperclass. Science doesn't serve humanity; it serves the masters of humanity. 

I say all this not to persuade us to ignore science. Far from it. We have to empower some of the brightest minds in our world to find the answers to serious ecological, energy, technologic, and health problems if we are going to survive.<<ref "3">> Without a publicly owned, transparent, high-accountability, uncensored, and highly funded push for another scientific revolution, our species will not survive the time-bomb we've set for ourselves in global warming and the destruction of our fresh water supply. The end is coming, and science is the only instrument I trust to dig us out. But, I'm a realist. I know we won't do the right thing. That's a pipedream. 

As much as I want the best for the homo sapien species, I really do hate who and what we are.





-----------

<<footnotes "1" "It will only get harder. (I can't help it: That's what she said)">>

<<footnotes "2" "I would like to extend a generalized 'fuck you' to the world at large. Thanks for being terrible people.">>

<<footnotes "3" "The list is obviously incomplete.">>
We allow celebrities to lie to us, and to manipulate us with rags and bullshit. We allow an entertainment industry to hypnotize us. 
It has been a very extended weekend. That's okay. I got a lot of sleep and plenty done around the house (and even on this wiki and with myself<<ref "1">>). 

I love speaking to my brother about his work. My brother is damned smart, although he doesn't always use it as well as he'd like (totally understandable; it's true for all of us). He has insight, and he can articulate it. I'm lucky to have him.

He keeps pushing for me to go union. He has negative things to say about his union, but he seems to be more and more convinced it is the right choice. I'm glad he ended up going there too. Hearing him only strengthens my resolve to get into a union, even if I have to live apart from my family to do it. 



-----------------

<<footnotes "1" "Inappropes: That's what she said">>
The vast majority of public primary schools are underfunded, understaffed student daycare centers which enable both (or single) parents to work outside the home.<<ref "1">> These crucial institutions no longer effectively serve (if they ever did) to maximize the opportunities and well-being of their students, regardless of background or circumstance. At best, they "teach to the middle," "teach the test," sacrifice education for sports and school spirit, and pass students along like number-stamped livestock. They are run like prisons and indoctrinate children to submit (since that's what these kids will be doing for the rest of their lives). Schools do whatever it takes to maximize their income and protect their livelihoods. 

Our schools are run by crooks, idiots, and people who are rarely educated themselves.<<ref "2">> Internally, school administrators see special needs students as a drain on a limited budget and teacher time/resources. Atypical children are especially at-risk of falling through the cracks. Minorities are obviously underserved, as are rural and extremely urban areas. Basically, the poorer the region, the worse the education system. These two factors which form a feedback loop only get worse over time while richer areas continue to gain competitive advantage after competitive advantage.

Preschool helps for a while, but the gains are inevitably lost in poor areas. The lives of poor children are "served" by a system fundamentally broken, flawed, and poisoned against them. We do not have their best interests at heart. They grow up in the wrong culture, without empathy, without effective socialization, without family life, without financial training, without practical lifeskills that extend everywhere, without food or necessities in many cases, without good medical care, without a support network, without hope, direction, and purpose. On top of this, we do not give them the educational tools which would allow them to survive, overcome, and flourish. We are all non-trivially responsible for this atrocity.<<ref "3">>

What makes a good public school good has everything to do with being located in a wealthy neighborhood with parents that push for it (not that wealth is sufficient, but it is often necessary, and it is a strong indicator of success in academics and in life [regardless of aptitude, discipline, or merit]). Educational gerrymandering and the bourgeoisie are real. What drives me insane is how few people understand the need for equal education levels between the poor and wealthy ("if I didn't learn to read, then why should my children?" from the poor and complete disregard of the poor in the wealthy), and how even fewer believe the fundamental cause of this problem is capitalism. 

Public schools in those regions are functionally private schools. Poor kids are pushed out, except for sports and the appearance-quota. Living in expensive areas alone pushes out the poor. The problems the remaining poor experience in their daily practical lives give these bourgeois public-private schools even more ammunition and opportunities to cleanse and gentrify their neighborhoods and schoolyards. 

Change is nearly impossible. Policy, admin, the board, and leadership throughout the school system are only kept in check by a legal system which serves the wealthy. They false compromise their way through broken promises and the destruction of the lives of the children they are meant to serve. Of course, litigation can be effective, but this may require significant financial resources not available to all parents. Ironically, those parents who do have the resources to litigate may already have the resources to find alternative education opportunities in the first place. Those who need help the most are the least likely to be able to secure it.

Charter schools are even uglier. It reminds me of the Cigarette-company owned schools in China that train kids to smoke from a young age. It's a disgusting scam, discriminatory segregation, and enslavement. But, let's be clear, non-charter's are simply more nuanced, less obvious, and indirect in their capitalist dynamics. I suspect this infection will only get worse under Trump.

The capitalist infection of American Education travels all the way up to the top of post-secondary education as well. Our opportunity-equalizing system has been hollowed out by capitalism. At best, you only get what you pay for now (and rarely that). Thus, we now subvert, subdue, harness, and condition the poor like human-livestock (to various degrees and in different ways) while merely keeping up the appearances that we don't. 

For-profit education is everywhere. The slimiest of it is found in our ITT's, University of Phoenix's, etc. But, even satellite schools of major universities (even Ivy league quality) are fundamentally for-profit. Universities have become further bureaucratized and run like businesses. A financial industry has evolved around it. It is increasingly owned, operated, and shaped by corporations. Even the Ivy Leagues aren't immune.<<ref "4">>

Students who graduate from the slimiest for-profit schools on this Capitalist University spectrum literally hurt their reputations and are laughed out of any serious interview process. They also tend to have enormous debt for a degree that can't get them above minimum wages (which are already starvation wages). It's a direct scam across the board. They learn nothing (or even worse, learn it the wrong and obsolete way) and lose everything. These "schools" are marketing companies, recruiting and pushing people through the paperwork necessary to take government money in return for nothing. They are loan sharks and educational pimps. The slime lessens as you rise through the social ladder of the university system, but it is still there. I have gone to school in many settings, and the differences were remarkable. Capitalist corruptions were always there though. You still see the slime ooze through different cracks and in different ways, regardless of the school you attend.

Grad students, post-grads, TAs, instructors, lecturers, adjunct professors, and even some visiting professors are paid starvation wages (below minimum wage in many cases). This is the new norm. The vast majority of students learn from these underpaid professionals. It's a very dog-eat-dog world in academia. It is disintegrating. 

We were promised the opportunity to have a good life by going to school. This was a lie. It is necessary, but not sufficient. Few really tried (partially their fault), many were given their passing grades, and the system was designed to bilk the students for everything they are socially, politically, and financially worth, without ultimately educating them. You will find exceptions, of course. But, the rule of thumb is incredibly and sadly accurate. Most come out of school with enormous debt, lacking the education they more than paid for, to enter an economy that generally doesn't want them (at least not at the wages they merit). 

What else are people supposed to do though? How do you expect young 18-year-old barely legal adults with underdeveloped frontal lobes (25 years old before they begin to crystallize) and no understanding of the world to make enormous gambling decisions that will last them a lifetime? They see the wolves of poverty nipping at their heels. They have to take the risk. They must gamble, even if the odds are all against them. This is a fundamental utility equation balanced in favor of capitalists seeking to maximize the amount of human capital which can be extracted from our population. It is rent-seeking. We are debt-slaves. We are the information age serfs. We climb on top of each other just to have the slim chance for a fragment of the mobility, opportunity, freedom, and happiness that was widely available to everyone just a few decades ago.<<ref "5">>

Our wings and minds are being clipped. We are no longer learning who we were, who we are, and who we should be. Those are defined for us by capitalism now. Whatever helps corporations profit and gain power, those are the livestock they try to raise. Too many educational institutions and people in general see this obvious conflict-of-interest to be a good thing.

We now "go to school" to get a job. It's become the new "Mike Rowe" norm from conservatives. You fucking morons. Jesus, you are stupid. How could you even call yourself educated? You are either deeply ignorant (sticking your heads in the sand or lacking a real education yourself [maybe you forgot the transformation]) or you are straight up malicious (pulling a ladder up behind you). You are an anti-intellectual. You do not understand citizenship, or you seek to deny it to younger generations. You lack integrity, compassion, empathy, and foresight. You do not see why idealism is important, why it is practical and necessary. You are a fool for believing the authorities you do (including yourselves). Watch the virtuous agent non-fallaciously wield the ad hominem, and you don't even know why it's acceptable.

I hear people say "college isn't for everyone." Education inflation is very real. I don't just mean that more people are getting degrees, changing demand and prices. I mean you get less per dollar and year spent in education than you used to. Learning algebra in college is normal (50% of students fail); they are illiterate. They are learning basic literacy in college. They aren't even getting a real education most of the time. And you want to deny them even that? Don't you see what is required for democracy? Don't you see what is required for the decentralization of power? The decentralization of knowledge and reason! We must educate everyone as best as we possibly can. 

Look, I'm going into the trades after 10 years of post-secondary education. I have respect for working with one's hands. Some of my favorite jobs were not very respected and required significant physical labor. I see the necessity of having janitors, manual laborers, and other practical occupations. I realize not everyone is brilliant. But, I also see the possibilities for who we could be. I see how truly uneducated our population is. I know we can do worlds better, and I see how badly we need to. How could you not push for this? Admittedly, many people do not understand the value, meaning, and purpose of a real education.<<ref "6">>

I'm blown away by the number of STEM students who do not have or even wish to pursue a liberal arts education. They do not appreciate the humanities. The humanities, philosophy itself, the study of wisdom and truth, are fundamentally what we're doing in school. We all must understand ourselves. STEM is the child of the humanities. While STEM is beautiful and deeply instrumental, it only tells us what "is" and never "ought" outside of hypothetical imperatives. The humanities are the heart of The Great Conversation. Of course, the postmodern problem (that Aristotle was the last man to know everything that was known in the human world) makes it harder to be educated and well-rounded. We must still do our best. Unfortunately, an entire generation of STEM students are not in touch with their humanity. They are bad human specimens with strong formal and empirical reasoning skills. That's terrifying!

To strike the other direction, too many liberal arts majors fear formal reasoning. They lack true rigor, are afraid of math, and do not understand the theory of the physical world as well as they need to. They cannot interpret and appreciate STEM nearly well enough. STEM gives us context and the material with which to solve problems. Ultimately, we are not well-rounded enough as a society. It takes more knowledge in more subjects to really participate as a full citizen in today's society. We are failing tremendously.

Our education system is predatory and oppressive. Too often it serves the opposite of its purpose. That doesn't mean we shouldn't educate people or give up. It means we need to remove capitalist interests and control from the core democratic, citizen-shaping, opportunity-equalizing institution. We won't though. We are too stupid, evil, powerless, or some combination thereof. Farewell Felicia.

---------------------

<<footnotes "1" "My father was right about this, but too late. Living in Thailand only made this more obvious to me.">>

<<footnotes "2" "Not all teachers and administrators suck. Most do. Have you fucking seen the IQ and critical reasoning scores of education majors and conservatives? Jesus. That is sad. Conservative states are by far the worst at this. Anti-science and religious support of government+corporate powers is entrenched. I hate almost every Christian I know (to be fair, I hate almost everyone anyways, lol). They have ruined us.">>

<<footnotes "3" "Our even more horrendous treatment of children from outside US borders is even more unforgiveable. ">>

<<footnotes "4" "Don't get me wrong, they are still incredibly good schools from an academic perspective. They simply are guided by the wrong principles, wield their power incorrectly, and do not exist to help the common person. Capitalism has profoundly corrupted these institutions as well. Business majors scare me the most. Psychopathy rates are ridiculously high. Ethics is dead.The brightest of our most well-connected and wealthy young people are consumed by the financial and political industries. Our new masters are being bred.">>

<<footnotes "5" "Allow me to say, 'fuck you' to the baby boomers, yet again. You worthless pieces of shit. You deserve slow, painful deaths for what you have done to the generations which came after you. I'm sure I will say the same to gens X, M, and Z as time goes along. Greed and power have corrupted us more than we will admit.">>

<<footnotes "6" "Do I need to explain why this isn't a no true Scotsman fallacy?">>
Today was a good day. I was pumped to get back into the shop and fucking do something. I think I was agitated by being off my schedule last week. I look forward to my time working on stuff.<<ref "1">>

My teacher asked me if it was checked. I said yes, even though we didn't do a final check (because I was continually unsatisfied with it). I honestly think that's the answer he wants from me, so I'm giving it to him. It's clear he cannot help me fix the problem, and I don't want to make him feel bad about it. That's just not useful to our relationship. The truth is powerless to our relationship in some ways. It is not the kind of socialization I'm innately comfortable with, but I think it is actually the kind and empathic thing to do in his eyes. I do it knowing the weight of what it means to do this, and I take it very seriously.

In a weird way, I fear I treat him like my cat. I adore my cats. I honestly want the best for these psychopathic bastards (cat psychology is fucking hilarious). To different extents, my cats are not smart enough to understand me or my intentions. Golden Ruling my cats is odd. That Ranga is now inside with us permanently I take to be the option most likely to maximize his happiness. I must imprison him, and I wish I could explain it to him. I wish I didn't have to imprison him, and instead wish he could see the reason he must stay inside with us. I wish I could convince him. But, I can't. It's not up to me. I think I am doing something similar in being what I hope is morally virtuously deceptive. It's perhaps a kind of white lie. It seemed to be asked for, and so I gave it. If I cannot give a cost-benefit analysis reason, a frontal lobes answer, then I need to be willing to change. I think it has a prudence to it for both of us. 

It's weird kind of application of the golden rule to not "treat them as you would want to be treated" in the most rational sense, but instead to "treat them as they say they want to be treated " (another interpretation, of course, an empathizing of their position itself in the deepest, even if less rational, sense) even if they don't understand the logical consequences in consistencies in the thing they ask for. Inequalities in knowledge and theories of mind create very difficult power dynamics and ethical dilemmas. It's much easier to do ethics in something like that proverbial physics' vacuum. When we treat people as being as rational as we are we can come up with very impractical, often lower utility, and perhaps worse outcomes. I suspect I am terrible at this golden rule problem, or at least come up with non-typical answers in some respects, because I'm autistic. My rTPJ really does activate abnormally. 

Okay, that was a detour. Anyways, he was fine with my answer. Nash and I took it apart quickly, and he gave us our new bookwork. He didn't even make copies, he just gave us his original this time (we were careful with it). By 9:00 I had finished the highlights, chapter, and going over his specified material. Nash will happily avoid bookwork like the plague. I'm not sure how much this affects me. I just need all 3 books finished by October if I can. That is reasonably accomplishable at the pace I'm moving. So, Connor, was picked to help us learn the next type of task.

We are building X-piece-90's. They are basically circles fragmented into pipe-line-segments which are tacked and welded together. We made a 3-piece-90 today. Connor walked us through the steps of making lines cardinal sides, and the teacher came by to tell us how to do the math (since Connor didn't know how). I ended up doing the math, and we drew slices equal to the center-to-center measurements of the pieces we were going to cut. Then, we found the right miter cut size from the book, and drew those on. We used a bandsaw blade as a "straight-edge" to use our sharpie on the pipe. It had to curve around not just the pipe, but was also angled; it wasn't a vertical, perpendicular to the horizontal laying pipe cut. We did not mark as carefully as we should have. And, it showed. 

We went to cut it with a bandsaw. Mine was excellent! =) Yay. Good enough that Connor didn't think we even needed to grind it. He says that the way he tries to make all his cuts (since it limits the work he's aiming for). We did our best on the cuts though. It was our first time. Nash kinda messed his up. He was on cold medicine all day, so he wasn't really there. Basically, I ended up doing the grinding work to fix his mistake. That's fine though. It was good practice. I'll take every ounce of practice I can get. 

I'm still unclear on the absolute best strategies and tactics for grinding. I'm finding my own tricks at this point. I understand the miter cut needs to be 22.5 degrees (for the 3-piece-90), and it needs to be as straight as fucking possible (seals are clearly sexy). I grind down to make it straight (they should be flush when joined). I also must grind to make sure that when I join the pieces, I get a 45 degree angle from my level. 

One of the better students, TJ, recommends leaving a bit of extra space for grinding at all times. I parroted back his justification succinctly: You can cut more pipe away, but you can't simply add more pipe. This hedging principle has shown up many times, and I consider it a variant of measure twice, cut once, or at least in the same family of reasoning. He is correct about this. Giving myself just a hair of breathing room allows for me to hide mistakes in my cuts, it gives me options, it lowers the risk, etc. It has to be accounted for in the measuring and line drawing though. Just a 32nd or 16th of an inch extra would be nice. It's very easy to grind the whole thing equally (you just rotate around with the grinder). Getting out unevenness, however, is much harder. There's some eyeballin' to do, I tell ya' h'what. I will develop good eyes for grinding, beveling, and cutting. Artists must be accomplished at drawing straight lines, and I'm sure every pipefitter can do this in their sleep. This is crucial to making pipes "fit" together. Do the math, and make the right cuts. This is a virtue theoretic aspect of the practice, imho. The cleanliness of it, the speed with which you can do it, the efficiency, the risk-limitation factors you impose, etc. 

Anyways, to our teacher's apparent displeasure, all the guys started joining in on our project (instead of working on their own). I think they found it interesting. Keaton came by to tack weld it (since Connor trusts Keaton more than himself?). I held the pieces together (if Keaton fucked up, I swear it could really burn me badly; I do not care for needing to trust people with my hands in this respect). That reminds me, I will be wearing my true welder's gloves for welding from now on, especially when someone else is welding. So, anyways, Keaton tacked one side. We adjusted a bit, flipped it, and he went for the second tack on the other side (you do the sides instead of top and bottom to give you a chance to bend for the 90, and if necessary cut out segments, if you aren't exactly 90 that is). This time, he made a hole in the join. 

Apparently, Connor and Keaton had the heat way too high on the welder. It should have been at around 50amps, although my teacher says it varies with the welder (he said they had it way to high and should have known better). They brought in another student to fix it (since he boasts that he can, and they enjoy taking him a down a peg or two). An aspie if I ever met one, Ferguson; he's cool and kind. They make a lot of fun of him; they are mean to his face. It's gross. I go out of my way to be kind to him as a reaction to these facts. Anyways, he couldn't seal the hole (since the heat was still way too high). He made it much worse. We laughed about the giant hole in my project, but then they started to blame him (and he was just trying to fix their error). The teacher said Ferguson isn't a bad welder, even if he isn't smart. Ferguson was practical. He grabbed a piece of metal, cut off a triangle, and patched the pipe. I ended up grinding a ton off it. The teacher, of course, immediately knew it was all kinds of messed up when he saw it. My teacher said I should have come to him for the welding part (but he was the one who put Connor in charge). It was messy, but it worked. Our next welds were done by Keaton on the MIG. These were clean (although, it spits way more). 

They made fun of Ferguson for sharpening his knives a few weeks back, acting like he was too stupid to do it. I have no idea why he puts up with it or engages them in it (he really thinks they are his friends, I fear). Ferguson has a very nice kit, and he treats his knives gently. He cares about his things. His moccasins (comfort), humor, his truck, his mom, and his work (he is passionate, even if he sucks at some things; can't pass a test to save his life, I tell you that). I wanted to thank him for putting up with the bullshit, so I kindly asked him publically if he would be willing to sharpen my knife. They looked at him differently after that. They decided he could sharpen knives now because I thought he could. I had some knife work I had to do today anyways, and turns out, it really was sharper this second time around. Ferguson knew a surprising amount about my knife. He even knew where I got it, had tried them before, etc. I like Ferguson. He's weird but good. 

During break (which I rarely take when I have work I can do in the shop, but I was at the mercy of others here), Keith explained how he got in trouble with our teacher (but is expected by his pipefitting bosses to perform) for shortcuts. Keith acts like it know it all, which miffs my teacher clearly. They butt heads a lot. I have heard Keith speak (he does love to talk). Existentially, he's stupid about many things. However, I have heard him speak about computers, and he is at least cautious in his choices of displaying knowledge there. When it comes to pipefitting. much of what he says seems rational to me. I do it the long way (since I have no need to cross my teacher), but I keep these shortcuts in my pocket. I mean, seriously, who wouldn't want to have a machine rotate a pipe while beveling? That seems like a way to make a very consistent bevel, like a potter on a potter's wheel.

Magically, it ended up being the correct radius and dead on 90. It looked like shit from the first two welds and the patch. The lines were off. I could even see the pipes' circumferences didn't really line up as cleanly as I'd have liked. Connor said it was good enough to take to the teacher. So, we did. I explained that I knew the lines were off and that the pipes were lined up as well as I'd have liked, but that it had the correct radius and angles. We checked. He said it fine. He told me to do the same thing for a 6 inch radius.

It was late when we started on the next project. The teacher also told me he was going to have the guys clean the area we were using. Basically, we didn't get much done on the second project of the day. I'm excited to do the all of it (with Nash) tomorrow. I want to do it without help this time. 

I must admit that I'm confused that my teacher didn't just show me how to do it from the beginning. He tends to have students teach students when possible. This can be a good thing, but it can also be lazily abused. I see a mix in him. I was always happy to hear his thoughts, advice, and objections to our work or process. He did come by. Sometimes not at the right times, but he did come by to give us his input. We needed it. Perhaps he knows we need to time to jump around in the mud puddle? I don't know. I will think about it.

This is relevant in the sense that I will have to teach the incoming student, I believe. The teacher says he has to catch up to us, which is 1.5 months of hard work. I'm going to be babysitting. I'm going to be held back by this person (and I thought Nash was an ankle-dragger!).

Oh, one of the students got arrested the other night. Lol. They read a publication which shows who went to jail every month like a gossip magazine. There are rougher kids here. I can only help them with their computers and be kind, oh, and learn from them when I can.

I still haven't drawn plans for the simulator either. I may do that when I can't find work to do. I need to get measurements first. I'll have Nash help me do that tomorrow. He can spare me the 10 minutes.

------------------------------

<<footnotes "1" "/pets-his-wiki, 'I love working on you too, wiki, my dear.'">>
Today was a fun and stressful day. I love being in the shop. We got the same project, but with a 6 inch radius this time. The smaller it is, the harder it is to make it right in this case. There is a lot more room for error at a larger scale. We did it all this time, without help. My cut was decent, and that meant that my angle was good without much grinding. We still aren't getting the miter line as straight as I want (it bends, and that's bad).  The bandsaw is still unwieldy. Although, it was commented that I am naturally talented with it. I use my body at the back end to steady and support it. I let it do the work. Plus, who doesn't love that beautiful vibration feeling near their testicles? Yum. 

I ended up taking it apart several times, once by error (I had never tried to adjust after tack before; apparently, you can snap them). We just couldn't get the angle perfectly 90. Nash didn't give a shit. But, I really wanted it to pass. I am not proud of my shitty tack welds. It's really hard to use their shitty welding hoods. I bought one today that does automated darkening after having had the opportunity to use Ferguson's. It's a godsend. It will make me safer, faster, and less-error prone, by miles. Btw, Harbor Freight is the bomb. Never been there before. Maybe it has a biglotsian feel to it, but that's okay. This will do the job just fine. Even if it only lasted for 6 months, it would be worth the price. I feel like Darth Vader with it on. 

Anyways, I got it done after lunch, and then then I decided to fool around (very rare for me). Since I tacked (poorly), I thought I'd try my hand at beadwork. Also, MIG might be easier for tacking in some respects, I still find it far more unwieldy than plain stick welding. My beadwork improved with the help of pointers from the upperclassmen. Eventually, there was a polite duel amongst all the students, a weld-off was held at my request. The teacher had to get all tough, but he thought it was funny at the same time clearly. His students rarely gather around actual shopwork (it's usually around a pair of tits or music video; we did watch Trump being sworn in though...ugh<<ref "1">>). After we were told to get back to work we showed him our project. It passed. He was worried we tried to cheat by grinding the sides to make it 90. I was just cleaning the edges of burs as he asked (without powertools). I wasn't worried though. If he took a level to it, he'd have seen it was clean and correct (I didn't pull a fast one on him). He told us to do it again for a 5-inch radius. It's clearly not clean enough. It will be. For this project, I was proud of how nicely my pipes fit together. 

We did the measurements and added just a hair this time. I hope it makes the work go by quicker. I assume the problem at this point is that we aren't fast enough. That's fine. I really need to practice, desperately.

Two other things to note. The teacher had us sign waivers that we wouldn't use our cell phones during class or shop. Not a problem for me, but I it is sadly necessary for a couple folks. Also, I started taking measurements and diagramming/drawing the simulator, btw.

---------------------

<<footnotes "1" "Don't get me wrong. I adore tits. Can't get enough of them. I love music (although, I'm not a fan of music videos usually; they need to be special to merit that much attention [I'd prefer music itself to be the star]). I also would have watched Trump regardless. This is all they seem to collectively care about though. It's...sad. It's hard to find things they are deeply passionate about. Perhaps I just don't know them well enough. We will see.">>
I had a very good 3.5 hour converstion with [C], my new friend (we've been acquaintances for a long time). He is amazing. He's an autistic savant.<<ref "1">> C is a fucking genius in disguise or imprisoned by his autism. His formal, official education is no indicator of his knowledge or inferential capacities at all. If sum IQ were reified into marbles, and intellegence broken into different kinds of baskets, [C] has profound imbalances in which baskets nature dumped the marbles. The sum total of marbles is very high in certain baskets, but perhaps below average in others (social skills vary wildly in him). The learning disability in one space is so striking against the genius in other spaces.  

He's a man of deep innocence and profound curiosity to me. He is obviously self-taught and susceptible to the people he trusts. I take myself to be responsible for not damaging that innocence. 

Talking with him is revealing to me. I connect parts I did not before because of him. He follows arguments very well and sees the threads weave where others wouldn't in his position. He's almost too smart for his own good. I hope he has more self-control and self-preservation built into him than I do. I worry that my philosophical demons will be communicated to him, that I will infect him. I think I am poison for this man. Most people are immune to it because they cannot see what I do. [C] is smart enough and wired in the right way to catch the my memetic viruses when I sneeze. I feel like I am doing a disservice to his happiness by talking to him. Like, if I were a real friend, I just wouldn't be myself around him because what I really believe and think is a true danger to his mind and happiness.






--------------------

<<footnotes "1" "Where autism is a broad spectrum, highly inclusive, and poorly understood.">>
We've been working on X-piece-90's. It is so much easier without Nash. I love Thursdays since I'm the only one in the shop. Everyone else has computer or bookwork they choose to barely work on. I have the shop to myself, except when I absolutely need another pair of hands (welding and sometimes marking). I finished two projects in a day. That is relatively uncommon for me.
Today, as all Fridays, was a halfday. I basically have 3 hours to work max. I got a 5-piece-90 assigned to me. I had the bandsaw fail on me twice. I got a new blade and it made a huge difference (Tim knew immediately what it was). It's absurd how often that blade needs to be changed. The cuts were not as clean because of it. I did a preliminary grind to smooth it out, but didn't have time to do much else. Tim, my teacher, had other plans for cleaning the shop. He and I went around the offices and shops borrowing hoses (I was the one who had to return them). We squeegeed the floor of the shop. 

Also, this is the 4th time that I couldn't see the union training coordinator. The door to the entire facility was locked, again. I take this to be a sign that I need to amp up how often I go, find more information about when they are open, and perhaps even just call him on the phone if I can't get ahold of him otherwise.
//Intelligent and honest Redpillers know [[socialism|Socialism]] is a devastatingly accurate description of capitalism and human economics. The prescription is all that is left.//

The Idealism of Socialism is that which is intellectually honest in a wide range of anti-capitalist arguments. And, guess what? It exists! There are numerous, incredibly justified reasons we should not accept capitalism. There is a reasonable pattern of thought you may not have considered, but you should. You feel like you've done that path, but you haven't. You know people are evil, but you've not been willing to run with it, to put it your pocket, to really see the world through that lens. Now, apply that rule "people are evil," and take it the nth degree. See what turns out to be real and what doesn't. 

You just haven't been charitable enough to socialism. You've failed to effectively interpret human beings as being evil when they become powerful (it's just a fact). You should not trust authority. //Pay attention//. We learned about socialism in all the wrong way. We were wrong about what it was. It wasn't evil. You've been brainwashed to believe what you do. Here, take your redpill. 

# /Hands(h0p3, Redpill, [your name here])
#  I require your consent. Have charity now. You have to be a willing participant in the acquisition of life changing knowledge. The loss of innocence requires the curiosity of the Tree of Knowledge. Does it hurt? Yes. Is it worth it? Probably. 
# You have to assume you could be wrong, about everything. You have to be willing to be wrong about everything. Have the humility to consider the possibility, to be honest with yourself in relation to the world. 
# I patiently wait for you to swallow it.
# ..
# Let me show you the real world:

Socialism describes capitalism as a socioeconomic system (or family of such systems) based on the exploitation of the labor force through private ownership of the means of production. Capitalist society is structured so as to reward the most socially adept abusers of human nature. It is meritocracy for elite psychopaths and psychopathic bloodlines. It enables the psychopathic segment of our species enslave us. Capitalism is a vicious game of egoism in which only the most redpilled with //weak moral compasses// and// the means to exploit the poor and weak// become successful (and eventually totalitarian) predators. 

Capitalism is the result of applied social Darwinism. Socialism is an attempt to describe this human game, and it posits that a revolution, revolt, or uprising against capitalism and private (but not personal) ownership is inevitable. Whether or not this borderline faith-based position on revolution is true is irrelevant to the fundamental truths in the description of capitalism. Revolution is a prescription, but socialism is fundamentally descriptive (that's where it's power lay). It's redpilled when it's done correctly too! It is a very profound description of human history, our current world, and continues to give us good explanations for why the world changes as it does in profound ways (not everything, of course). 

We start with labor and value. Labor adds value to materials. We generate value by embedding our labor (time, energy, effort, etc.) into products; part of who we are is imbued in the things we labor to create. The total value a worker creates through their labor is productivity value. There may be many kinds of metaethical value, but this one is fundamentally important to us all. It's part of being an agent that we labor. Who owns this labor, and the results of it, productivity value, to what extent, and why? 

For the capitalist, productivity value can be split into two major kinds: wage value and surplus value.<<ref "1">> A product's wage value is used to pay the worker. The value generated beyond the wages paid to the worker is surplus value; it is the source of profit.<<ref "2">> Surplus value can be used to pay constant capital<<ref "3">> costs, replacing the means of production, technology, marketing, distribution, finances, human resources, logistics, expansion, security, competitive advantages, political influence, taxes, etc. The remaining surplus is profit.<<ref "4">>

Capitalists hire workers to create products. Capitalists sell these products for approximately the productivity value, pay (legally required) wage value to workers, pay (economically required) constant capital costs, and keep the rest as profit. This profit is often used to cyclically generate more capital; capital begets capital. At first glance, this may not seem problematic (especially to those socially conditioned to accept it). Unfortunately, the repeated application of this business cycle results in dangerous shifts in the power dynamics of a society, and this results in the capitalist exploitation of the working class.

Capitalism is not stable; it is driven by the neverending generation of competitive advantage (naturally or artificially). Capitalists must consistently reinvest in their constant capital to continue to be profitable.<<ref "5">> One crucial method to generating competitive advantage as a corporation is to have as few employees as possible and to pay them as little as they will accept. As a consequence, wages are suppressed at all costs (morality is deemed irrelevant here) and human labor is price-efficiently replaced with technology and streamlined processes/logistics.<<ref "6">> As human labor is replaced, workers become unemployed. Unemployment forces wages down. The unemployed, the army of reserve labor, compete for available jobs. The higher the supply of laborers, the lower they must sell their labor-power to capitalists. Thus, capitalists are engaged in the continual process of maximizing the productivity value of labor while paying lower and lower wages to fewer and fewer people for it.<<ref "7">> 

This vicious cycle enables capitalists to tighten their grip on the working class. Over time, there are fewer and fewer employers hiring fewer and fewer employees, while simultaneously paying lower and lower wages. The unemployed become desperate. They will accept worse and lower material conditions to survive. What other choice do they have? Capitalists exploit workers insofar as workers have no other options. When capitalists own all the means of production, workers have no other choice but to accept wages artificially depressed further and further below the productivity value of their labor (if they can find employment at all). 

As capitalists centralize power and monopolize the means of productions, there is a corresponding increase in the rate and degree of enslavement of the working class. In a vast human economic pyramid scheme, we find repeating cycles of wealth trickling upwards with power centralizing and rising to the top. The working class loses opportunities, freedoms, and bargaining powers as they become splintered, suppressed, and controlled. Capitalism devours the majority, and this time, it appears to be the driving force behind the extinction of our species.

As the working class becomes aware of the causes of the crisis (developing class consciousness), capitalists must oppress them even harder. Of course, workers who complain, bargain, or fight back will be punished. Submission appears to be the only practical option. Oppression branches out much further than that. Our surveillance state exists to maintain capitalist power. Our media is consolidated and owned by capitalists seeking to subvert and undermine resistance to their power. We are engaged in wars not for the freedom of our people, but for the enslavement of mankind, to the benefit of capitalists. 

Our laws are written by capitalists. Our politicians are capitalists bought by capitalists. Our law enforcers are capitalists bought by capitalists. Our judicial branch has its capitalist corruptions as well. From local, to regional, to state, to national, to international contexts, capitalists own and control us. The rat race is very real, and slavery has only become more complex in implementation, kind, and degree. Many fail to see capitalism for what it really is: a game theoretic, absurdly complex, psychopathically owned and operated form of slavery.

Capitalism is a helluva drug. It is an incredibly viral meme that injects itself into the core of its hosts so deeply that it alters their fundamental behaviors, empathies, hatred, beliefs, and desires in systematic, long-term ways. Our culture is being swallowed by this Egoistic memetic network crawling through the human species like an epidemic. It's tendrils control our minds. The allure of selfishness is too profound, especially for the powerful and those with the means to maximize their personal pleasure at the expense of anyone they can find the will power to dehumanize. It is quite the meme, this invisible-appearing force. It is a category of a kind of viral creature that exists and reproduces in our minds. 

This is an apt description of human motivations, history, the memetic nature of our problems, and reality. Socialism is thought to demonstrate the material conditions and crises of capitalism. Insofar as socialism relies upon material conditions to do its intellectual heavy lifting, it remains a description which lacks idealism. It only provides us the contextual content of maxims; it only provides us instrumental reason, hypothetical imperatives. It only describes the motivations and historical cycles of humanity. Even if it correctly predicts revolution (which may itself be inaccurate in the information age; Marx could not have foreseen everything), it does not, in itself, show why we should revolt against capitalism and slavery. 

Ultimately, socialism describes what "is" but not "ought." Marxist versions of socialism pre-describes revolution as the outcome (and hopes for improvements), but it cannot normatively prescribe because it does not give us an underlying moral theory. It is a political and economic theory, but not a moral one. Too often, I see Redpillers conflate the "is" of capitalism (as described by socialism) with the "ought" which follows from the prescription. Essentially, these psychopaths think prescription and description are the same. That is the naturalistic fallacy is in its barest form.

We must be empathic towards the poor, the weak, and the needy, regardless of our station in life. We must have [[Redpilled Empathy]]. We must end capitalism because we must end slavery because slavery lacks empathy. Redpilled Socialism is an application of the golden rule inside of capitalist systems. It's a variant of the Veil of Ignorance.

The only aspect of socialism, as a description, which I worry about is its prediction of revolution. The assumption seems to be that the poor and disenfranchised will eventually do something about it. I think it fails to understand the nature of technology and its ability to maintain the status of quo of enslavement, to protect the Hyperclass, and to prevent, disarm, and defeat any attempts at a revolution.

Why should we think socialism' predicted revolution will ever occur? Sure, hope for the best, vote for it, teach people it, see the reason in it, morally expect us to follow socialized prescription, but you have to practical about what you predict will happen. It is basic utilitarianian thought that cannot be escaped. You hope for the best, but plan for the worst. I want to see the end of capitalism because it would honestly make the world a better place; it is the only chance for the survival of the human species. I'd love to have grandchildren, to see the world happy and healthy. But, it isn't going to happen. You must see the necessity of protecting our selves from the world and preparing for the inevitable disasters approaching our species. 

I would be rejected from socialist circles for saying this. I want to point out that I'm not claiming "if you can't beat 'em, join 'em." I support the end of capitalism, but I'm not convinced it will actually occur due to both the raw intelligence, wealth, and power of our ruling class and the stupidity, poverty, and weakness of the proletariat. Only a fool would think that 3.5% of the population composed of proletarians would be able to overthrow the capitalist yoke; that noose is on tight, and the weapons of coercion are beyond what Marx could have fathomed. Inequality only continues to grow on the metrics that matter. Of course, there always remains the possibility that socialist revolution will occur (however small it may be). Until then, I'm going to prepare as though it isn't going to happen because that is the best evidence I have. Basically, I think my socialist brethren are deeply wrong; there is a better and more accurate pragmatic socialist prescription. I will protect my family from a world of psychopaths, and I will try to do so without being psychopathic towards the world. Accepting the reality of our shitty human nature's accuratizes our predictions and therefore appropriately tempers our expectations. This is pragmatic hope. As far as I can tell, it is the best prescription I have at the moment.

The moral of the story, thus far, understand and support socialism, but don't assume or hope that others will have the willpower, integrity, and moral virtue to take the Redpill and actually be good people. You've taken the Redpill, so you know: no one escapes being selfish.


------------

<<footnotes "1" "Wage value is Variable Capital.">>

<<footnotes "2" "Rate of Surplus Value = Surplus_Value / Variable_Capital">>

<<footnotes "3" "I am still appalled by the use of the term //constant// here.">>

<<footnotes "4" "Although, peeling the other surplus expenditures apart from profit is not actually that simple. Roughly: Profit = Surplus_Value / (Wage_Value + Constant_Capital)">>

<<footnotes "5" "This accumulation of constant capital necessary for competitive advantage in the capitalist market is the beginning of economic crisis of Capitalism (which is separate, in a sense, from the moral problem of enslavement). Roughly: Organic composition of capital = Constant_Capital / Variable_Capital">>

<<footnotes "6" "Human labor is living labor; dead labor is technology, machinery, tools, infrastructure, architecture, automation, etc. To be clear: only a fool would blame a machine for the evil committed by humans. Regulation of human use of technology is necessary (particularly to protect our most important freedoms), but regulation of human economies even moreso. Automation is not the devil. It all depends on how we use it. Do not buy into the Red Herring of blaming technology instead of  humankind. Doing so is as analogously foolish as the Broken Window Fallacy.">>

<<footnotes "7" "I'm dramatically oversimplifying here. The spirit of the truth is obvious though. The details and execution are obvious quite complex. These things do come in degrees and kinds. The fundamentals remain the same though.">>

<<footnotes "8" "A reactionary opposes proletarian revolution. 'In modern capitalist society the bourgeoisie is appropriately viewed as the reactionary class, since it not only totally opposes proletarian revolution, and even almost all reforms, but also regularly tries to reverse earlier reforms. When the ruling bourgeoisie ever does finally agree to any significant new reform it is only because they have been forced to; and even then they virtually always have the secret intention of reversing what they view as a temporary concession to the people at a later time.'">>

<<footnotes "9" "This is not a defense of intuitionism (I don't have one). I'm taking it for granted that you agree to this move in the argument.">>
//There's a reason you separate military and the police. One fights the enemies of the state, the other serves and protects the people. When the military becomes both, then the enemies of the state tend to become the people. -- Commander Adama//

When Libertarians and Socialists agree to the same thing, you know it's profoundly important. The 'U' symbol of the political horseshoe theory is obviously false in crucial ways, but I think it also has a rule-of-thumbness to it that is remarkably accurate in other ways. They are mortal enemies in metaethics (I realize there are people who consider themselves Libertarian Socialists, but I do not think they understand Libertarianism), and yet they have a profound common ground in their appreciation for idealism. There is a deep clarity with which both ideologies can interpret and explain the relationship between human rights and property rights. These extreme political ideologies are right about the dangers of the police state and the militarization of the police. When they agree on a political and metaethical claim, the rest of us should be paying attention. This is no accident.

Wikipedia says:

<<<
Militarization of police refers to the use of military equipment and tactics by law enforcement officers. This includes the use of armored personnel carriers, assault rifles, submachine guns, flashbang grenades, grenade launchers, sniper rifles, and Special Weapons and Tactics (SWAT) teams. The militarization of law enforcement is also associated with intelligence agency-style information gathering aimed at the public and political activists, and a more aggressive style of law enforcement...[Police militarization is] "the process whereby civilian police increasingly draw from, and pattern themselves around, the tenets of militarism and the military model."
<<<

There are ways to confabulate into believing this is not a problem, ways to see a positive spin on this definition. I see people actively ignore the actual consequences of it, who purposely fail to see the implications of it. Allow me to flip your conceptual analysis around and prevent your Slip into rationalizing the existence of militarized police.

We all have such an easy time pointing out the obvious flaws in military coups d'états. That's the Policification of the Military unchecked (or poorly checked) by other political forces. I think the militarization of the police and policification of the military are working towards the same goal. They obviously are working at it from different angles. The subject and modification swap, but both combinations pursue the same end. If you are vehemently against policification of the military, and you should be, then you also have a strong //prima facie// conceptual reason to think the militarization of the police is a really bad idea.

Militarism, by definition, is the theory and practice of fighting against enemies of the state (and all that is entailed). Militarization of the police, like the policification of the military, makes civilians and everyday citizens the enemy of the coercive arm of the executive branch of the state, a.k.a. the police. The enemies of militarized police are the very people they were meant to protect.

Plato was right about this; Marx and Orwell, too. Hobbes, Machiavelli, and Rand were too (descriptively, not prescriptively), but they can go fuck themselves. Socialists and Libertarians everywhere see it plainly. These idealists tend to be more likely to have reasons for the appearances of flaws in societies. When they both agree, you know something is really up. 

Police officers obviously favor the increase in power through militarization, in the threat they pose, in the fear they strike into people, in the "safety" they earn for themselves through improved physical and mental weaponry. 

American police:

* have official political structures and relationships similar to the military and their respective politicians.
* have enormous ties and shared social networks with military culture.
* are classic "good ol' boys' clubs" and self-protective brotherhoods.
* worship the military.
* style themselves as being as cool and alpha as the military.
* tend to be conservatives, Christian, and nationalists. They are famous for being racists as well.
* suppress high IQ recruits from joining their ranks, but have an average IQ of 104 (slightly above average).
* form capitalist havens and are deeply corrupt. Quotas, theft of civilian property, and corporate/wealthy influence are profound examples. 
* promote and execute the enforcement of law insofar as it maximizes their profits, job security, and power (but not necessarily otherwise, except for the sake of appearance). They use us as revenue streams.
* literally bribe politicians through campaign contributions and whatever insider lines of credit (be they social, financial, or otherwise) to maximize both their militarization and the mass-imprisonment of the U.S. population.
* act as a domestic standing army.
* really do commit serious acts of violence against innocent people. Police brutality, harassment, profiling, and unjustified coercive practices are very real.
* protect wealthy and powerful people but rarely the poor; the enforcement double-standard is tremendous.
* almost always do not respect the exercise of constitutional rights, not only frowning upon it but actively punishing it insofar as they can get away with it.
* often do not care about being philosophical about the law, in knowing why they do what they do and how to do it well. They do not understand the nature of the executive branch and regularly remain ignorant when it benefits them to do so.
** Respectable-appearing lawyers, consequently, can actually intimidate them to some degree in unexpected contexts.
** The AM-I-BEING-DETAINED-activists might be crazy, but they have a point. 
* should be feared when legal scholars and lawyers regularly tell you not to talk to cops without representation.<<ref "1">>
* will act as if you have no rights unless you express them.
* are deeply hostile to being filmed, recorded, and other transparency mechanisms (ironically, they fear being held accountable).
* are themselves often illegally immune to the law.
* are perpetrators of enormously high rates of domestic violence.

The laundry list is long. Police militarization is a classic problem. We're just seeing our own implementation of it. 

On a more personal note, I literally don't know a single good cop.<<ref "2">>  Everyone I've known who became, are, or were cops hovered between ignorant and malicious. They certainly do not fit Plato's Guardian class; that's a bad sign.

I'm an educated white boy. My car is ugly, and so am I. But, I look and sound educated. My children do me great service as emotional evidence to others that I'm a decent human being. I'm generally not too stupid around cops. Essentially, I often have less reason to personally fear cops than others. But, I am still afraid of the militarization of police. Here's why:

* Police enforce capitalism, and therefore, are deeply involved in the enslavement of the masses. They do the dirty work. They are the most physically reified whip of capitalism.
* Fascism thrives on the police militarization. 
* They are beholden to almost no one and have the "legal" rights (full or grey) to beat your ass. If, in practice, possession is 9/10ths the law, then we must deeply fear when police aggressively pursue the possession of the public. 

Police abuse their powers. Our military is a psychopathic force in the world, and when we militarize our police, we turn that psychopathic force upon ourselves. We must empathize with ourselves (and the world). We the people must keep coercive powers (and power in general) in check by whatever means are available to us. Yep. Fight the power, bitches.


---------------------

<<footnotes "1" "Not that they don't have financial and power incentives here. The struggle between the judicial and executive branches (and the capitalist industries surrounding them) are real though. We must pay attention.">>

<<footnotes "2" "Oh, Anecdotal //ad hominem// Man! Save us!">>
As expected, Trump has decided to bar standard liberal media news agencies from the Whitehouse. He has openly demonstrated enormous favoritism to the most fringe alt-right news agencies. Bannon's influence is obviously profound. We've known Trump's position against free speech and freedom of the press even during the primaries a year ago. 

The number of crises and problems surrounding Trump is legion, enough so that we can't actually understand, digest, and fully realize their implications. It feels like a daily barrage from my news sources. 

Trump's clear attack on net neutrality (among many other things) will only make communicating democratizing information that much harder. The internet is physically owned by fewer and fewer companies. They are merging with content creators and owners. The conversation is artificially limited on the software and hardware sides. Now we have a political seal of approval to end to free flow of information and competitive intelligence necessary for democratic citizens to "fight the power."

Outside of net neutrality, I don't think Trump will win many serious legal fights over media control just yet. It isn't obvious that he is competent enough to expand executive powers to be a fullblown dictator either. I am frightened and yet mildly relieved there is a rift in the deep state that is actively working against Trump's administration. Not that there ever was the rule of law for the elite, but it just so happens to benefit us, at least temporarily and in this specific way, that intelligence agencies are not working with or for Trump. This is an odd balance of power though, balanced by an unelected group of people. These problems have long existed in intelligence agencies, but this is more brazen. I take it to be a sign of long-lasting damage to our democratic republic.

I am hoping that Trump will be so outlandish that even the RNC won't touch him with a 10-foot pole. There aren't enough checks on the political Right at the moment. I hate people. There is no way to reason someone out of a position they haven't reasoned themselves into. It is clear that the conservatives I know are stupid people who ultimately wield their Shield of Faith as the last resort.<<ref "1">> The epistemic language game is over as they cover their ears and shut their eyes, unable to see they were radically wrong about damn near everything. I cannot free self-made slaves.

The opposition party, the DNC, is in shambles still. Major factions have become highlighted in the DNC. The more powerful faction is the Clinton/Obama corporate owned; they are the superdelegate supported faction that are Republicans in disguise. Almost every liberal I know fails to see them for what they are. Fools! The Sanders/Warren faction houses the remotely sane liberals who are only barely leftist at that. We will see what the DNC evolves into. I cannot free self-made slaves.

The Left literally has no power or representation. That section of the political spectrum is erased, censored, and memetically barred from participating. We were taught to hate socialism and communism (even when our teachers didn't themselves understand what they were actually teaching us to hate). Everyone has a trained emotional, gutteral, virulent, kneejerk reaction to Leftist thought. There is a profound discrimination against the Left. It is part of the memetic hold that capitalists have on us. I think the constant push of where the "current political center" is located on the spectrum has continued to move to the right again and again over the decades.<<ref "2">> You morons! I cannot free self-made slaves.

To a non-trivial extent, we deserve Trump. That's the harsh truth. We have been willing participants in our enslavement. We have been shortsighted, too self-interested, too wrapped up in our religious bullshit to see the intrinsic and instrumental value of the truth. You people deserve to suffer. I wish you didn't have to draw the remnant of sane individuals with you into this hell on Earth.

Everyone thinks they are right. Everyone thinks they are special. Everyone thinks they are the remnant. It's possible no one is, but it is also possible someone is. At some point, the rational have a right to say "fuck you, empathize with me" along with all the idiots chanting it, but the rational are actually entitled to claim it.

Again, we slowly slide into a new normal. We are being boiled alive like frogs who don't jump out of the pot because the heat imperceptibly climbs until they die. What can we do? We obviously can't trust ourselves.

-----------------------

<<footnotes "1" "Although, to be fair, an enormous portion of liberals are retarded fools as well.">>

<<footnotes "2" "Although, ask any Christian, and they'll tell you the opposite. They are clearly convinced they are the persecuted.">>
We are adding two short subjects: Foreign Language and Humanities.

j3d1h:

* Subject-based individual tiddlers for weekly analysis
* Organize your sync
* Organize your wiki
* Move everything to the wiki
* Create backups of your wiki (automate it)
* Do all your journal entries from now on
* Do one style of hair for the week. Master it. Learn the tricks (research). Continue searching the space.
* Finish video curation

1uxb0x

* Write the contents of your learning. Summarize it. Tell us about the concepts you learned.
* Curation is now: 1 website and 2 webpages
* Organize your bookmarks bar
* Finish guitar curation
Moore's law has been dead for a while. It started dying about a decade ago. Sandy Bridge was the last real leap forward I can remember. Hell, my processors today barely defeat the CPU mounted on my wall from years ago. Single-threaded processing power has had zero improvements for a long time, and multi-threading software is really fucking hard to write outside of embarrassingly parallel tasks. Since then, we've seen the GPGPU, ASICs, and mobile (a.k.a. energy-efficient) computing evolve into their own beasts. Those are the only strides we can make. Increasingly, we must use specialized devices to gain competitive advantages. Applied computational science fields are beginning to advance around the fall of Moore's law, and they can only do so through specialized, non-general processing architectures.

The winners are closed-sourced, proprietary, and specialized. They are building hard and fast, and the average person will be closed out. We cannot join their ranks. We can rent (while surveilled) from them, for now. The death of Moore's law has led to the massive "mainframe" centralization paradigm. This extends beyond the buzzwordian Web 2.0 + Cloud. As specialized hardware (and corresponding software) become that which has fundamental competitive advantage, we mortals will be pushed out.  In the future, I won't have access as a general private citizen to hardware and software necessary to compete. Hardware and software controls and powers are centralizing (despite our best efforts to stop it), and as they specialize due to the death of Moore's law, this computational power will only continue to centralize behind walled-gardens, nation-states, military-industrial-complexes, multi-nationals, and IP-owners. 

Information is a form of power (so is money, sex, and a number of other things). Computation is power. The centralization of computation is the centralization of power in a significant way. Yo, we're in trouble.

Two-party systems are known to be game-theoretically flawed in crucial ways. Third parties really can't really exist. It is A/B testing, but in our case, the entire game is bought by corporate funds and elite interests. The DNC has a duty to represent the Leftist side (progressive and liberal are meaningless words), but they don't and won't. 

Perez just got elected DNC chairman. He's a corporate shill, an establishment status quo fellow. He forced the defeat of Sanders. He's in the Obama/Clinton right-center camp, not the Sander/Warren left-center camp. It's the wrong direction. This is the RNC all over again. They have been hollowed out by and large by the Hyperclass (if they weren't always that way).

The DNC is about as culpable for the reign of capitalism as the RNC as far as I can tell. They really do defend the status quo. It is a well-known DNC tactic that when a social movement begins to take-off, the DNC courts them with a "progressive" message, attach themselves to the movement, inject themselves into the power structures of the movement, take it over from the inside, and purge the radical elements that pose significant threats to the status quo. The DNC swallows leftist movements and neutralizes them.

They subvert and subdue lower class progress (which, at this point, is just having a seat at the proverbial table) to maintain the capitalist system. They are extensions of corporate power. Both parties are just the "right" and "left" political arms of capitalism (but in reality, they are both right-wing to differing degrees).

It's passed the problem of them "not learning their lesson." They clearly have aimed for this. The Democrats are as much the enemies of the people as the Republicans. No one actually represents the people. Our true masters are emerging. 
//In name and partially content, Christian Memetics reminds me strongly of "Christian Mimetics," a subdiscipline of Religion one of my professors claimed to study.//

It's clear that Christian churches are a special kind of community. There is a mental virus that continues living because it serves to help those who participate in the church community. It is far from obvious that most churches have significant impact on the happiness of those around them, but it is obvious that many stay in the community itself directly because they have something to gain from it. Whether it is calming their fear of death, prosperity delusions, or social networking, churches exist because they are practical utility-generating centers for their members. 

They are filled with conservatives. Let me define conservative for you: I will only sacrifice for you insofar as you are willing to sacrifice for me. Not everyone is 100% conservative. There are parts of their lives which contradict their conservatism. But, it is obvious that the Church has always existed qua conservative utilitarian economic incentives. 

It is a network of tit-for-tat trust generation games where people feel each other out and learn who will sacrifice for them. They build mutually beneficial relationships. It is very rare, however, to see unidirectional relationships, especially from the powerful to the poor and needy done quietly and anonymously (except for the warm fuzzies). Here is what conservatives ask themselves subconsciously: Can you sacrifice for me? What can I get from you? Can I socially bootstrap myself up the ladder through you? Are you worth my time, energy, or investment? 

The hypocrisy reaches far beyond the fact that no one in church is a decent human being. These people don't even want to be decent human beings, but they act like they do. It's an act. It's a lie. It's virtue signalling.

Religion was the original social regulation instrument used to control the public consciousness. It's the opiate of the people. People are gullible, and religion comes preloaded with ideal mechanisms for centralizing power structures, enslaving the masses, and teaching people to blame invisible creatures and dimensions for the problems in our world instead of the psychopaths in power.

New student's name is Chris. He has an associate's degree in electrical+mechanical something (he's a millwright). He can't find a job. He's bitter about it. He doesn't want to be in this class. He just wants to find a job. He has had a class in pipefitting (screw pipe only). He's having to rush through tests, 2-3 a week, to catchup to us. Thankfully, he probably can. He understood the drawings and eventually figured out how to do the math and use our blue book. My teacher said he'll join us tomorrow on the stainless steel x-piece-90 projects. This is excellent news. He's a smart kid (and obviously very self-interested).

We finished the 5-piece-90. It wasn't pretty. We started the 6-piece-90, and it looked clean as fuck on the cuts. A preliminary grind was quick. We could probably just tack weld it and be done, but I'm going to keep making it clean as I can.

After lunch, Nash and I were huddled into the class with Chris. We were "reviewing" the basic math we use for screwpipe. The kid didn't know how to use his calculator (neither did I), but once he got the hang of it, he was quick enough. Towards the end, including special offsets, he did better than Nash. Nash is perhaps fucked here. He never does the math by himself. He is always checking the math that I do. That does not bode well for him. 

Chris complained about how long our breaks are and instantly recognized the faults of our teacher (and the reasons for it). I think he is despairing. Obviously, he is interested in doing well at this to get a job. I'm hoping we will work well together. He seems to want to push.
Web Assembly (WASM) is a high performance, low-level machine code run almost natively inside most web browsers. This will give every major language a way to run in the browser. Prepare for websites to efficiently use your computation power through the browser as a virtual machine host. Crucially, the cloud is no longer a set of dedis and virtual machines sitting on hardware in datacenters. WASM is going to change the web and all the devices using it. Whether you want to or not, your machine is going to be used by those on the web who know how to write the code to use it (and can convince you to trust them enough to run it, which will be easy, because, let's face it, you're stupid and lazy).

Browsers are forming new botnets (accidentally and purposely), often legal ones at that. I mean this beyond the Chrome-botnet hype of a 4chan /g/entooman. This is really the last stage that was really missing. Everything else is just giving permissions to the browser and the sites that use them at this point. High performance, language-neutral, VM access to your machine's performance is already impressive, and it could do some very interesting distributed computing. WASM, however, is possibly more dangerous than people are recognizing.

The VM is really a sandbox; escapes past that sandbox are now incredibly dangerous (we've known this for a long time). You will be able to run any programming language you like to get the job done. Zero days and unknown, private exploits of this sandbox will be incredibly valuable, along with escalation to root. This is a profound runtime environment in how widespread it will be. It's ubiquity on every graphical platform is something to behold. 

Web Assembly competes in LLVM's space in a way. I think it is very interesting how Mozilla is a driving force behind this tool. I think it is ballsy. I think it is a technological step forward (not in any inventive way, but in a practical "they finally made a 'web' version of a technology we regularly use off the web" kind of way), but whether or not it will have a good result is a different question. It feels proto-singularity + proto-perfect-surveillance + proto-monoculture. They thought they were defeating Java, but instead a new monster will arise.

If and when distributed computing evolves to the point that it's easy to write code for distributed computing, this will be a key tool they target. 

Ultimately the browser continues and continues to advance toward being an OS itself. We've seen many OSes attempt it. With the halting of Moore's law for personal computing, and as mobile continues to make gains on desktop performance (reminds me, I need to have 1uxb0x and j3d1h look at ARM ASM), browser performance will start to normalize (and, page performance will continue to get worse in general). 

Everyone needs web access (whether they realize it or not). It's the one thing that almost all personal computing devices have in common. It's a common point of failure for the monsters that lurk.
* [[2017.03.01 -- Pipefitting Log]]
* [[2017.03.02 -- Pipefitting Log]]
* [[2017.03.03 -- Pipefitting Log]]
* [[2017.03.06 -- Pipefitting Log]]
* [[2017.03.07 -- Pipefitting Log]]
* [[2017.03.08 -- Pipefitting Log]]
* [[2017.03.09 -- Pipefitting Log]]
* [[2017.03.13 -- Pipefitting Log]]
* [[2017.03.14 -- Pipefitting Log]]
* [[2017.03.16 -- Pipefitting Log]]
* [[2017.03.20 -- Pipefitting Log]]
* [[2017.03.21 -- Pipefitting Log]]
* [[2017.03.22 -- Pipefitting Log]]
* [[2017.03.23 -- Pipefitting Log]]
* [[2017.03.24 -- Pipefitting Log]]
* [[2017.03.27 -- Pipefitting Log]]
* [[2017.03.28 -- Pipefitting Log]]
* [[2017.03.29 -- Pipefitting Log]]
* [[2017.03.30 -- Pipefitting Log]]
* [[2017.03.31 -- Pipefitting Log]]
* [[2017.03.04 -- Programming Society]]
* [[2017.03.07 -- Vault 7]]
* [[2017.03.10 -- Culturalism and Israel]]
* [[2017.03.11 -- The American Food-Industrial Complex]]
* [[2017.03.12 -- Trump's Administrative Truncation]]
* [[2017.03.12 -- Generational Enslavement]]
* [[2017.03.22 -- The Second Cold War]]
* [[2017.03.22 -- ♫ It's beginning to look a lot like treason ♫]]
* [[2017.03.24 -- Injecting Fully Decentralized Networks Into Capitalist Political Systems]]
* [[2017.03.28 -- The Future of Reverse Engineering]]
* [[2017.03.29 -- Ivanka Trump: Pappa POTUS' Handler]]
* [[2017.03.31 -- The Mercer Family]]
Chris works hard. I admire it. I appreciate it. He realizes I'm waiting on him to catch up, and he's even apologetic about it (I tell him it isn't his fault, and I do not make a big deal about it). My partners weren't convinced we were off on our 6-piece-90. It was. I then explained how I wanted to fix it (went through the options with them). Grinding discouraged them greatly. I wasn't going to give up though. I continued, and I fixed it. They were surprised it worked. Regardless, I was happy about getting it done.

Afterwards, I was assigned to teach Chris the 3-piece-90. He did a good job. Then we moved to a 4-piece-90. He's still working on it. I'll help him with grinding on this one. 

I adore grinding. It is a form of sculpting. I like to sculpt.

I also asked if I could learn to weld and work on personal projects on Thursdays. My teacher happily agreed. Yay!
Today was an excellent day. My teacher brought over a ventilation machine and showed me how to run a basic bead. I made a ton of parallel ones that were snug/adjacent to each other. My teacher was blown away, shocked that I had never had any welding experience. Said it was better than his work. He brought the welding teacher over to look at it, and the welding teacher also praised it. Word spread around the pipefitting and welding classes. Many came to look. It turned out pretty good for a first-timer. 

Johnny, who is well-regarded in the class, who already has a job as a pipefitter, thought I had lied to him when I said I had never welded before (he was the one who offered to show me, but I didn't want to break any of the rules of the shop, so I politely declined). He could not believe it. Multiple people told me to stop being a pipefitter and go straight into welding. My head, obviously, has swelled.

I moved onto making a gift for my brother. In case he is reading this (which I highly doubt, by his own admission), I won't say what it is (since he wants a surprise). It's a piece of art using pipe and welding. I think it will be fairly cool. I'm about halfway done with it. This coming Thursday, I hope to have it finished.

I also went to the union on a whim today, and Randy was there! He didn't remember me though, a first, unfortunately. We talked about what I was working on. I pointed out that I was familiar with Blackboard as a teacher (this is not the first tech problem I've seen him have; I could be very useful on this front). I tried to convince him to give me the chance to show him that I will be possibly 3rd year apprentice material. He prefers experience to classwork, but I think I can impress him. We talked about how he is changing by-laws. It's clear that there will be wiggle room for him to see that I'm worth advancing. He changed the date now to possibly July for hiring. 

They don't use NCCER or the certifications I was told to get. I'm kinda annoyed at that. It's mainly for Eastman I guess. That's fine. They have an inhouse training system, but it looks thrown together. That said, some of the work in the shop looks excellent to me (although, some didn't). 

I also, with Randy there, got to pick the brain of a 4th year apprentice. He was a surly man, and obviously didn't make the union look very good (by face, not by content or pay). I can tell I will have many knuckleheads to work with. That's okay though. Building shit and making money, I can put up with it.

I'm feeling confident. I feel like there is a connected set of worlds I will be able to navigate and bootstrap myself through. Competence is achievable. I just need to push forward, reach out and grab it. It's mine there for the taking.
I must be a cool kid now because everyone has decided to try and imitate what I've done. They are buying their own auto-darkening welder masks and spending time welding instead of working on their pipefitting. Nash, too, is doing it. He didn't do jack shit today. Chris, however, is taking our work seriously (for now). He hates the tedium, the detail, etc. of it. He hates pipefitting. He straight up is only doing this to get a job, to get his foot in the door, and to eventually get back on the path to being a millwright (so he says). 

Chris' 4-piece-90 pieces weren't very good. His cuts were fucking terrible. It took some serious grind work to get it back in shape. I was embarrassed to have my name associated with it. Our teacher was just fine with it though (he's become forgiving to us at this point; if I say it's done, he just believes me [he doesn't even check anymore unless I imply I'm not satisfied with it]). Our teacher commissioned some x-piece-90's from us for a tradeshow. He grabbed some stainless steel rods (they make beautiful chromatic discolorations) so that our tacks will look right. 

We're moving onto a 7-piece-90. Nash did not lift a finger. I tried to involve him, but he was having none of it (he wanted to practice welding instead). That's on him. We are going to leave him in the dust. Chris is working hard (at least he knows why he is there; and he's working hard to catchup). We'll rock it on Monday or Tuesday.

I hate to say it, but I work faster and cleaner by myself (with a helper for small things). I'm decent at leading in some respects. I see the tasks, problems, orderings, and delegations. The shop is a vacuum, but I believe I will still be good (or eventually good) at leading in the field. 

Chris, who has experience welding, promised to show me some more. I'll take as many perspectives as I can get. I have many Thursdays to go.

We have a field trip to Snap-on (a luxury tool maker in town) on Monday. I'm going to go, although I'm not convinced it will be worthwhile. That's okay though. 

Also, apparently we will be out of school for a week. This sucks. Maybe I need to see if they'll let me tag along at Eastman. I would work for free at this point. I don't want to waste my time. Maybe I could do something at the union; I don't know. I mean, I could take the week off; there are things I need to do around the house anyways. I will talk to k0sh3k; she will help me decide.
My dearest students failed to complete all of their journal work this week. 1uxb0x is clearly struggling to stay focused and apply his executive reasoning skills. j3d1h did her work (for which I am grateful), but did not complete her journal. We are overhauling our accountability reviews to be daily now. We will still have weekly guidance session, but now I must crack the whip.

It is crucial they become self-sufficient and self-motivated in their semi-autodidactism. It's about giving it 110%, Bobby.
//Technology is a double-edged blade. Who wields our greatest technological tools and for what purpose?//

We are biological computers living in deeply integrated computer networks and architectures. It's hard to fathom how the pieces fit together. One fact is clear: we are increasingly a data-controlled society. The shadow of Big Brother, a loose agglomeration of many competing national and multi-national political and financial interests, continues to solidify and take root. They wield increasingly sophisticated data-driven weapons against us. Golem is bootstrapping.

* Privately owned and operated institutional AI drives "progress" and herds us together into submissive pawns. 
* Credit scores have far less to do with risk assessment and far more to do with generating revolving debt-slaves. 
* Long-term computerized record keeping mixed with the inevitability of clandestine interventions, hacks, and blackmarket doxxing removes privacy and pigeon-holes us for life. 
* Competitive intelligence distorts markets and creates monopolized playing fields between privatized Big Data and everyone else.
* Filter-bubbles entertain us, blind us, and isolate us. 
* Propaganda and mass behavior shaping is increasingly accuratized and weaponized beyond our wildest dreams. You are not immune to psychocyberwarfare, although you delusionally think you aren't even partially a puppet (just like you think advertising has zero effect on you; idiot).
* Computerized "Minority Report" predictions of criminal risk are wielded as profiling and targeting tools which eliminate our autonomy and justify the unequal treatment of people.
* "Citizen Scores" exist in many nations, and their use will become more ubiquitous and profound in shaping every aspect of our lives.
* Fundamental, detailed, deep-learning digested, mass surveillance structures are rising. They are building the prisons around us as we speak. 

We are being remotely controlled bit by bit. It starts indirectly, shallow, hard-to-see, difficult to imagine, and innocuous appearing at first. We are persuaded, gas-lit in an entertaining and self-righteous feeling way, and nudged into the positions set for us by our masters. Technological tendrils and chains penetrate, bind, incapacitate, and manipulate our society. In an oversimplified explanation: those in power pay people to program computers to program us. We are embedded and caught in this ever complexifying feedback loop, a political network of slave-computers.

Let's be clear: this is not some perfectly choreographed political experience machine. It's deeply chaotic. There are many competing forces. There are many unknowns. Data-controlled societies emerge from the culmination of these many processes through a marriage of purpose and accident. The technopolitical tectonic plates are shifting. Society is in exponential flux. We are politically polarized and fragmented. Who will have the power when the dust settles? As we move towards this technologic Singularity, who will own it? One thing is clear: it won't be "we the people." Superintelligence is a unique beast, and whoever creates and tames it first will form the new House Targaryen (amplified beyond our imaginations). Power begets power; capital begets capital; information begets information; intelligence begets intelligence; they each beget each other. These powers continue to centralize and are wielded by fewer and fewer people. 

Why should we be subject to their definitions of The Good and The Right? Good and Right 'for whom'? Do you really think they have our best interests at heart? Do you really see philosopher kings and wise statesmen at the controls? Fools. Those in power are psychopaths. The appearance of paternalism is the beginning of slavery. But, eventually, their power will be too intelligently-driven and profound for us to fight back. Our autonomy is dissolving before our eyes, and we will never get it back. Subversion, dissent, counterculture, and freedom-fighting are and will be calculated for and neutralized. Unfortunately, even if we could stop it, we won't. The masses are too illiterate to realize what is happening. Ignorance and malice gel into the slavery-apocalypse. Yo, the end is nigh! 
We have show and tell on postmodern Google-translations (corruptions) of "Be Prepared" and "Bohemian Rhapsody." We also covered a physicists remix of Bohemian Rhapsody. 

*What happened last week?
** 1uxb0x
*** Played with friends a lot, and it made him happy. 
*** He is organizing his nerf kits. 
*** Finally cleaned his room. Very pleased with himself. =) 
** j3d1h
*** Enjoyed talking about [[Club Unlimited]]
*** Also cleaned her room. Very pleased with herself. =)
*** Liked her art. She drew a sneaker shoe. It looked "realisticish."
*** Finalized plans for the server
*** Wrote the minecraft IP address of her server on her room's window (advertising)
** k0sh3k
*** Got her chapter back, accepted with minor edits. 
*** Finisher her class on "Color"
*** Taught her Lent class; it went well. 
*** Dealt with ILL problems.
** h0p3
*** Wrote a bunch on my wiki
*** I learned to weld, and that it rocked. 
*** Lectured several times this week. 
* How are we feeling? (health, emotional, etc.)
** 1uxb0x
*** Overall: Pretty good, happy.
*** Didn't get headaches or feel feverish this week. 
*** Yesterday was rough. He wasn't worried though. He didn't have butterflies.
*** Wednesday he was worried, but his mother was keeping him accountable to his work.
** j3d1h
*** Angry at herself and sad for not having finished her journal.
*** Didn't accomplish any projects (besides art) that she wanted to finish, makes her unhappy.
*** Otherwise and overall, pretty good to okay.
** k0sh3k
*** Felt good. Not too tired this week. 
*** Not a single headache all week, even during the storm. This is weird (and good). [Achievement unlocked!]
*** Haven't missed meat yet (gave it up for Lent).
*** Sad about her mom having the flu.
*** More nosebleeds, but this may be change in weather.
** h0p3
*** I've had a variety of emotions. That's normal. 
*** Perhaps I need to reset my tolerance to cannabis. It doesn't seem to be necessary. I didn't even take it yesterday. I hope to wean off. 
* Are you happy? Why or why not?
** 1uxb0x
*** Definitely happy. Having friends, going outside, etc. 
*** Happy about having dreams.
** j3d1h
*** Relatively happy, yup. Normal mood.
** k0sh3k
*** Feeling fine.
** h0p3
*** I am happy. It has been a good week. I've lacked hope a few times, but that's okay. The trajectory is up.
* In what ways did we successfully empathize with ourselves and others this week?
** 1uxb0x
*** Doesn't think he empathized with anyone this week, except saving his soda and playing nerf with his friends. 
** j3d1h
*** Cleaning up quickly occurred because she empathized with herself. She valued her time.
** k0sh3k
*** Nuffin' -- jk -- Lenten study didn't want to last minute. Did it throughout the week.
*** Didn't eat chocolate that would make her sick. Empathizing with herself.
** h0p3
*** Started to learn welding.
*** Did my best in my conversation over vidchat with my parents.
* In what ways did we fail to empathize with ourselves and others this week?
** 1uxb0x
*** Barely writing journal.
** j3d1h
*** Didn't finish her kitchen chores very quickly. Didn't work as hard as she would have liked.
** k0sh3k
*** Forgot to take her medicine on time several days. Coffee as well.
** h0p3
*** Failed to empathize with humanity in general many times. 
* What will we do this week?
** 1uxb0x
*** Try to play outside more, which means finishing his work earlier and on time.
** j3d1h
*** Finish journal everyday by doing it after each subject. 
*** Learn to be concise in journaling.
** k0sh3k
*** Going to develop lesson plan over the course of the week.
*** Get a weekly pillcase
*** Paper editing/formatting
** h0p3
*** Find a way to get pipefitting experience over spring break.
*** Cut cannabliss this week (or try). 

Today was an interesting day. I studied for my test (which I never got to take; tomorrow, I guess). We then went to a Snap-On plant as a field trip. It was boring and everything I expected. I'm so glad I'm not doing factory labor. That is souldraining. The PR/Manager spokewoman was openly in favor of enslaving people. She spoke glowingly about how the governor was good because the he made laws which benefited employers instead of employees. Nobody else seem phased by it. It was gross. As for the process though, it felt like I was watching the discovery channel on the tour. There was a ton of pipe in there too. I could build quite a bit of it. I still, obviously, have much to learn. The mounting of this stuff, that's where I know jackshit.

I spoke with Ferguson (he was my ride) about religion and philosophy today. He's a nice guy. I have a very negative perspective, but he was surprisingly charitable towards me nonetheless (that is quite rare). 

I did get the cuts and most of the grinding work done on the 7-piece-90. I was interrupted though. My teacher asked for four 6" long 3/4" diameter pipe for the welding class. As we were finishing these (I was actually making sure Chris could do them, since I've yet to see him do screwpipe; I showed him one, and he did an okay job on the rest), my teacher interrupted that as well. He told me to come with him. We went over to the welder's giant HVAC machines which were having problems. We had to thread by hand a hole to fit our "nipples" (the little 6" long pipes we made). I've never done that before. My teacher gave me "on the job training" for it. I have 3 more to finish tomorrow or the next day. I'm soaked. I have extremely sticky thread-metal shards in my hair, I ruined my gloves, and I've had to wash my hands about 7 times. It didn't work out as cleanly as we'd have hoped (not my fault), but it works. 

Tomorrow I get to see a presentation by the union. I hope to make a good impression and learn a lot.

Also, I asked my teacher to see if he could find a place for me to practice pipefitting over springbreak. I don't mind if I don't get paid (although, I'd like to if I could). Internships are fine at this point. I need every ounce of practice I can get.

Today I finished the dirty, wet work I started yesterday. We tapped the giant machines, installed the nipples and valves. My neck is very sore now. It was quite claustrophobic feeling down there. I cleaned the tools and returned them to their owners. 

We took our test. It was funny because we were given none of the usual study points (although, my teacher was convinced he did). That's okay. I had read the section (glossed, in this case), and it wasn't a difficult one.

Afterwards, we welded the 7-piece-90 together. It was tougher than usual. We burned a hole (my teacher made it too hot for stainless; he didn't want sputtering though). I partially fixed it (after the others tried) by making it a cold 50 amps and carefully adding around the edges of the circumference. This didn't fill it correctly though (the teacher thought it was a good idea nonetheless). The teacher gave us a piece of brass to put underneath (I'm assuming it lacks Iron, and that's why our metal didn't weld to it). I just filled it up, and blam, it was sealed. Nice trick. I'll have to remember that one.

Post-lunch the union gave us a presentation in the auditorium. They talked a lot of shit about college degrees and how awesome we were for going into the trades (/masturbate). The big man from Chattanooga's union made it sound excellent. Their training program is highly renowned in the area, and they have a strong relationship with TVA (kush job, apparently). Randy, the local union rep recognized me (but still didn't know my name) this time as he pointed me out during the presentation. 

After the presentation, I talked with the 4 union guys. We talked, and apparently this man from 3.5 hours away knew who I was before I introduced myself. That's a good sign. He thought it was very odd and cool for someone with 10 years of post-secondary education to go into the trades. Chattanooga-guy said he wanted me to apply this year (instead of next). They only take applications in March, so it is now or next year. I'm going next week Tuesday to apply. He told me that when I got there that I needed to tell the secretary (or whatever) that he asked to see me when I arrived. I'll be shown around, probably have an impromptu interview of sorts, be tested, and fill out my application. Eventually, I'll have an official interview, I believe with the committee. July is roughly when I'd start. I'd have to learn more about union history, get my OSHA-30 (waste of time to get my OSHA-10), etc. 

Anyways, the union guys walked around the shop (appearances and relationships matter for my teacher as well, it seems), and we were told to start working on a "Y" without help (to figure it out). I think I know how to do it though, so that's cool.

I asked my teacher which union he thought I should go into and the specialties I should pursue. Valves, welding, and plumbing would be killer useful he thought. Madmoney. The Chattanooga union really does have a better teaching program. That said, Randy here in the local might let me join in August and would possibly allow me to join as a 3rd year apprentice. That would be a leap forward from only 6 months of work. Apparently, Randy was impressed by my visits and wanted me to become their teacher (after I passed the journeyman test). I suspect that I will be asked to teach or speak wherever I go due to my background. 

Chattanooga is local, but 3.5 hours away. I'd only see my family on weekends. The local union does no local work, and I'd be away from months at a time. Chattanooga seems like a much wiser long term plan for many reasons. I could get journeyman here at my local faster and transfer, but I think the education I'd get at Chattanooga could really make the difference. I value learning it right the first time. 

Long-term, I want to own my own business (which you can do while in the union, as long as you pay union dues). So, I'm talking with k0sh3k about what I'm going to do. We're not sure yet. I'm feeling confident that I'll have a decent paying job by August though (which is well before I complete this class). 
According to Wikileaks' Year Zero disclosure today, the CIA has lost control of a very large treasure trove of remote control malware systems, denial of service attacks (even against the internet infrastructure at large), privilege escalation, hoarded zero-day exploits, documentation, and sourcecode to a wide variety of major software ecosystems and standard electronic devices (including smart TVs,<<ref "1">> lulz). Some of these tools are extremely sophisticated (e.g. this is the first time I've seen weaponized air-gap jumping malware in production). It is thought to be the entire hacking capacity of the CIA, which was not previously publicly known to be this extensive. This systematic cyberwar chest now appears to be in the hands of multiple parties. This is incredibly dangerous. From what I can tell, no major computing system has escaped unscathed from this warchest.

The lack of digital fingerprints on these tools are meant to prevent implicating CIA agents. The real humdinger, however, is that 
these tools were declassified to protect agents from legal action. Essentially, they are unaccountable for black-ops because "anyone" could have used these tools. Now that multiple-parties control it, it is possible we will see these tools wielded openly and strongly in the coming months (before they get patched [assuming they ever do get patched]). It is very worrying.

Beyond the problem that they had these in the first place (no disclosures or attempts to plug these holes), cyberweapon proliferation is wildly different from standard physical weapons (copy and paste, motherfuckas). Also, this is why you don't accept mandated backdoors. When they've got more code than Facebook does and lose it, why should we think they would keep keys to mandatory backdoors safe and unleaked?

Their cyberweapons holdings are in violation of executive orders from the Obama administration (although, I'm far from convinced that Obama was actually in favor of limiting CIA powers). We see the intelligence community is either beholden to no one, not even their direct leaders, over and over again in history, or have been directly empowered to violate basic human digital rights again and again.

It is interesting to see the CIA duplicating the efforts of the NSA. It is difficult to understand exactly how and why it has played out as it has and even harder to understand what it means. While there is cooperation between intelligence agencies, this level of competition says something important about the political climate and relationships between our intelligence agencies, and more importantly, about the lack of oversight from our elected government officials. I don't think this is a good thing, and I don't mean that from a fiscal sense (double-spending, etc.). The CIA lacks accountability and is not controlled even indirectly by the people, and this is a serious problem. They are a threat to democracy and world stability. This is just another player in the deep state (which we've known for a while, but this only highlights how dangerously powerful they really are).

 
Engage your tinfoil hats people. It's not the matter of //if// you will be compromised, but the matter of //when//. I don't give a shit about real or perceived vulnerabilities in technology companies as it relates to their loss of marketshare. I do care that a race towards an technological oligaculture enables the world-scale systematic infiltration, permanent infestation, and loss of control and privacy (and anonymity) of users around the world. 

The only positive to this is that Apple products got hit really hard (I hate people, especially Applefanbois). What do you expect when the wealthy and cool use the same ecosystem? I hope those fucking sheeptards will see the light (they won't). Linux, BSD, and perhaps the lesser-known OSes appear to be the most resistant (although, even these were hit to some extent).

Lastly, I'd like to call into question Wikileaks' release by calling into question Assange and Wikileaks themselves.

As I have worried for many months, Julian Assange didn't demonstrate control of the wikileaks private key during his last Reddit AMA. Since the scare last year, he has yet to cryptographically prove himself to be alive (and the cryptographic indicators we do have do not look good). Of course, having the private key doesn't show that Julian Assange is alive or not compromised, but it would at least do something. Given that Assange and Wikileaks have broken their standard crypto and communications protocols (starting about half a year ago), I am still not 100% convinced that Julian Assange and Wikileaks are not compromised. Something is still fishy here. 

Of course, you can point to numerous interviews over the past months and even second-hand accounts of having seen him. I see no reason to trust these second-hand accounts, and the interviews are not necessarily real.

Let's be clear. Assange posed a ridiculous threat to the Hyperclass and the Deep State. Even if he is a psychopath, he is a hero. I'm sure enormous resources have been invested into trying to take Assange and Wikileaks down. Forging interviews is a real possibility.

Text-to-Voice, even for the common man, using any person's imprinted voice, is now so clean that you can't tell the difference between the real thing and the artificial without very serious analysis. However, take state-of-the-art state-level actors intelligence community technology, people who are world class at this, and I believe Text-to-Voice is likely indistinguishable from the real thing at this point. 

Fake facial video can also be created using opensource tools from academia right now. Again, state-of-the-art tools may make it so that we can no longer distinguish real from artificial video footage. Photoshop has long been there. It was only a matter of time before video footage was going to get hit by the same trust problem.

Here's the kicker: even civilian impersonation tools can be computed and displayed in real time. Watching a live interview over video doesn't mean anything at this level. State-level actors could impersonate Assange if they ever captured him. It can't be trusted completely anymore (not that it ever could, but now it is too simple and easy forge human likeness and speech). 

So, here is where I go full-blown conspiracy theory tinfoil hat on you: 

Since there is a non-trivial chance that Julian Assange is compromised, how can we interpret this Wikileaks disclosure of CIA tools? Many parties seem to benefit from it. Why is the CIA being undermined or publicly humiliated? If Wikileaks is a puppet, it is desperately unclear who is in charge and why they've done it. Since we have no proof of these exploits and only a "release" talking about it without any third-party vetting (from what I can tell), there may be another game being played.

At this point, I have no idea. Assange and Wikileaks may not be compromised. I don't think we have the resources to know right now. In either case, it's a terrible thing. If our truth-telling whistleblowers are compromised puppets, we're boned. If they aren't, then the CIA has made legions of costly mistakes which we may all be paying for soon enough.

My maximally irresponsible, speculative conjecture today is that the Russians have armed Wikileaks with this information (I say this as a cosmopolitan who despises nationalism of any variety). Russians likely already have the tools. If so, and perhaps they are the puppetmasters, then Trump's administration will be fighting against a politically weakened CIA. The CIA is thought not to trust the Trump administration. Let us pay attention to if and how Trump responds and benefits from this loss of confidence in the CIA. Trump as fascist and lazy individual seems likely to hand them significant powers though. My vision is foggy.

I do believe we are at sociopolitical war with Russia. I don't mean that we are fighting Communism (although, there are plenty of fucktards who would buy that). We are fighting the memetic hypernormalization and deep psychopathic corruption of a trillion-dollar kleptocratic Putin cabal who not only owns Russia, but now takes aim at destabilizing the world all over (on top of the Western hyperclass variants). Republicans, conservatives, and capitalists are taking a page out of Putin's playbook.

People, it is no accident that the forever neutral Sweden brought back its draft. There are always wars going on, but war on a much larger scale is coming on all fronts. Jesus Christ. I'm holding my breath. I hope I can protect my family in time.

-------------------

<<footnotes "1" "No ~IoTs, please. I don't need that shit in my car, fridge, toaster, TV, buttplug, or anything else. Give me control and as much analogueness as is reasonably possible without significant losses in primary function.">>
Today I barely even started on my Y-piece when my teacher told us we had another project to work on. We had to install regulators on the flow hoods for the grinding stations used by the welding class. It was cool. We took apart the pipe system and finally got to use unions. The math worked perfectly. I was quite pleased. 

My teacher attempted to convince me today instead to rethink the local union, particularly if they allow me to jump to 3rd year apprentice out of the gate. That would be a significant jump in pay, no doubt. 
Today was another fantastic day. Welding in the pipefitting class makes me feel like a savant (I know I'm not at this). Thursdays  rock. This was my second Thursday practicing welding, and it went quite well. I spent a lot of time learning/practicing beveling as well (which is a key pipefitter skill). 

I setup everything at my workstation before my teacher had the initial morning meeting. I'm going to continue doing that as best as I can. I can't really start setting things up entirely without access to the tool room, but I can at least try. I want squeeze out every moment of practice that I can. My time is valuable to me, and I love myself. Empathize!

I went straight into finishing my brother [[JRE]]'s present. It's quite a project. The superficial/exterior welds are finished. I burned a couple holes in the thin pipe, but I don't care. I know how to fill them in, but the holes fit the project nicely (I even accentuated them because it drives home the theme of the art piece). I also gave it a grind to make it partially shiny. No one else thinks it looks awesome. But, I think it looks amazing. It's the thing I'm most proud of today, even if no one else thinks so. I think they just don't see what it will look like at the end. 

I decided to make something cool out of my first piece of welding. It was fairly clean parallel beadwork on a carbon steel slab. I cut it into a heart shape (with TJ's help) and did some major grinding to make it shiny. I cleaned it up. The shape is not perfect (yet?). I should continue to work on it to make it as nice for my brother, [[AIR]], as I possibly can. My brother might think it's dumb or he might not. All I know is that I love it. This was the piece that shocked everyone last week, and I can see why. I think it doesn't look nearly as good to people who don't care about welding though. I don't know what to say. My brother is a chef; I think he'll see it as I do: an extension of learning a craft (which he undergoes everyday).

I moved onto something entirely new which I know all welders must learn. I took two carbon steel plates and told my teacher I wanted to weld them together. He told me how and showed me how to measure my angle for the bevel. This is my first time doing any serious beveling (although, I fucked around twice on a pipe to get the feel it). I'm a good beveler, imho. I have very steady hands and a natural talent for shaping it. My spatial reasoning is generally far above average.

I tacked the ends and laid a root. There is the idea that I should have a keyhole that slowly fills in from the pool. It was there. I will need to learn to control it. I need to get my flow on. The root was shit though. It didn't look pretty from the bottom, that was the problem. I cleaned it, and then I filled it. I also went on the backside and dropped a bead. My teacher came back and told me I wasn't supposed to do the back. I didn't know. I won't do it again (although, in real life, I think it is completely reasonable to do it; just not for welding tests). He said my fill looked really good though. He told me to run 3 stringers on it. So, that's what I did. They weren't super clean, but they were clean enough.

I moved onto making a ring. This is probably a dumb idea. I'm trying it anyways. Welded steel is profoundly strong, and it would make a decent ring. I just loop around, chip, clean, and repeat. I'm going to use a cutting disk to cut it off the plate next week (I hope). I'll shape it afterwards. I think I know how I'm going to make the inside the size I want it. I need to do that first, then I can work on the outside. Anyways, as I working on the ring, my teacher told me that Randy (the union training coordinator) was driving over today to see my work. That was cool. 

I moved onto to taking very thick slabs of carbon steel and beveling them. Jesus, it took forever. I even switched up to a better grinding disk for it. My arms and wrists are like jello. They look clean as fuck though. Seriously. It looks like a machine made them. I'm almost too afraid to use them because of how long it took to bevel them. I want to get more practice dropping roots in before I do this. Everything is crap if the root is wrong. I need to nail the root, and then I can fill it. The filling will be tricky on this one too. I'm going to burn a ton of rods welding it together. Seriously. It's almost an inch away at the top of the bevel from the side on each plate. I don't know how to fill it something this wide. I'm assuming I'll have to make many filling passes. I hope my teacher can tell me.

Anyways, Randy came over to look at my work. My teacher wasn't there (although, Randy found him on campus after having visited me). He was impressed. He told I had the job! Although, to clarify, I only have the job assuming they actually hire apprentices in August as they have planned to do. He said I would have the job for my welding, if nothing else. He said I'd have the job just for continuing to show him that I'm invested in this and from having met him multiple times about it, if nothing else. He said I'd have the job just because I'll be damn useful at helping him with the computer systems and teaching as well. He can see I'm serious about it. 

I have a feeling that my teacher, who is much closer in relationship and power dynamics to Randy (who sits on the board of my program), has been trying to show Randy that they want to snap me up before I head to Chattanooga. I will be quiet and courteous about this. I need to do whatever is best for my family, period.

Oh, the welding teacher came later (Tim had hinted that I should leave the plate out, but I was cleaning). He said it very good work. He also gave me a pointer for getting less splatter (I'm messy). He told me to turn the heat down and stick closer. When we looked at my heat, it was actually too cold (he said this can cause it as well though). I will do what he says, since he knows what the fuck he is doing.

Also, I told Chris how I moved so quickly through the computer course: literally click through the homework/practice/lessons/quizzes and only care about the exams. This shit is common sense, but they make you "learn it" anyways, even if you could pass the test beforehand (they won't let you skip straight to the exam). Apparently, I saved him a bundle of time. I think I'm the only person who has seen the through the cracks on that computer-based curriculum.

Oh, I tacked for Gary's project today and helped him get it together (despite having no experience with buttweld pipefitting). 
Humans are humans. I'm a cosmopolitan. I despise nationalism and racism. Despite memetic and genetic differences between each individual on the planet (we are all unique), we are all human. We must respect human dignity. It's the golden rule.

There are superior genetics, but they don't belong to any particular race. All things being equal, the person who has a 10% chance to get cancer is genetically superior to the person who has a 20% chance to get cancer. Does that make them morally (right) superior? Fuck no. Does that make them a better human specimen as defined the Human Good? Of course. I'd say the same thing about a starving child vs. a well fed child. One case is clearly better than another. Does that mean they deserve unequal treatment or that they deserve their suffering? FUCK NO!

There are superior memetics, but they don't belong to any particular race. All things being equal, the person who can do basic math is memetically superior to the person who can't. Does that make them morally superior? Fuck no. Does that make them a better human specimen as defined the Human Good? Of course...and so on.

Be real for a second. You have a standard of the good. As much as you want to escape Perfectionist tendencies in your metaethics, you simply can't. You are delusional if you think you can, moronic even. You've deeply misunderstood the fundamental concepts of morality to deny it. Now, don't get me wrong: I think your confusion is the name of something noble. You are so horrified by the enslavement, torture, genocide, and lack of egalitarianism in human history that you are bending over backwards to make sure your point of view could never, ever be used to go down that terrible road again. Problematically, it is deeply anti-intellectual. It is burying your head in the sand. It is a failure to be honest. The consequences of your approach are dire. For that, I say: fuck you.

Obviously, we have no control over who we were born as. You might even deny autonomy altogether, and I'm willing to walk down that road.<<ref "1">> I will do my best to make sure I do not hold people accountable for their morally arbitrary characteristics. It's my mission to be fair in my judgment. 

I am a culturalist though (and I don't mean this in the standard sense, but more in the discriminatory 'ism' sense). I take certain configurations of memes to be superior to others, at least instrumentally, if not intrinsically, towards the kaleidoscopic spectrum of the human good. If you think for a moment, you know it's true. It's why you think there is epistemic normativity at all. You've begged the question. We all have. Even the nihilists can't help themselves. It is our plight. And, to be clear, what you believe matters. 

Here's the key: culture is reducible to memes and practices which emerge from those memes. Culture isn't special in itself. What you believe matters, but that doesn't mean the content of what you believe is correct. Being right matters. Doing what is right matters. Having a shitty culture is a bad thing. There are superior memetics, and hence there are superior cultures. QED.

That sounds horrifying to you. Even a good Kantian should recognize the truth of it though. Nazism, as a culture, is awful. Do you agree with me? Yes. You are a culturist too. There's nothing inherently wrong with being culturalist. Do you respect the human dignity of Nazi's? Of course, even though they are deeply wrong. They are psychopathic. I have no respect for their culture, even if I take the human beings to be intrinsically valuable (despite the beliefs they hold). I will, however, discriminate against Nazi's in many ways. 

I'm not going to promote the survival of their memes, their culture. I will, however, feed a hungry Nazi. I will give them books to read. I will be as kind to them as I can. I will not aid their goals though. Their memes must die. It is a fine line to walk. But, the virtuous must walk it. I have the same approach to all cultures (although, not all cultures are as strictly wrong about so many crucial things).

Alright, that is a long preamble to explain that I am not anti-semitic. It's absurd that I must spend so much time explaining it, but people are not rational on this topic (neither conservative nor liberal, and especially not the religious). 

The Hebrews with Abraham, Israel with Jacob, and the Jews with Judah, and whatever other memetic ancestry and transformations have occurred (this becomes a matter of even more serious theological, sociological, linguistic, and historical contention) are one of the great memetic lineages of human history. We owe much to it. That doesn't make it right though. Exactly how this Great Meme is related to a genetic lineage is another matter as well. I couldn't give two shits about genetic lineage. My mother is convinced we are partially Ashkenazi Jew. She could easily be right. Genetics are just unimportant to me in a discriminatory sense. Humans are humans. Memes and behaviors which derives from those beliefs, however, I will discriminate against. 

It is patently obvious to me that modern Israel is an extension of capitalist interests. They are war-criminals, as are their enemies. None are redeemable. I'm tired of war, especially for the sake of capitalism and religion. I have no respect for either. 

Does that mean I think genetic Jewish people deserve any drop less respect than other humans? Fuck no. Do I think their memes, along with almost everyone else's are terribly wrong? Yes. 

I favor the end of memetic and political Israel, just as I do for Christianity, Islam, superstition, Libertarianism, the Alt-Right, and every other ridiculous set of beliefs which support capitalism, slavery, war, and eventually the end of human life. 

Genetically, humans are my friends. Memetically, they are generally my enemies. We are at memetic war, people. I hope your beliefs die because what you believe sucks. I'm not telling you to kill yourselves, but I'm begging you to kill that memetic part of yourselves that I really hate.

--------------------

<<footnotes "1" "It's a dark road, friend. I've walked it much longer than you have. I believe I know what it means better than you, and I don't think you'd survive it, at least not with your integrity.">>
j3d1h did a fantastic job this week. She really tried hard, and it showed. She may not have accomplished what she hoped to accomplish with her effort, but my judgment is concerned with whether or not she did or her best. Effort is what I want. While she is still getting her journal/recording/reflection down pat (was fine this week), I really appreciate that she takes herself and her work seriously.

Wealthy people certainly wouldn’t want their own children to have to play the game of life on a fair, even playing field against poor children. Competitive advantage in education, experience, etc. are too valuable for maintaining status and happiness.
Preface: I suck at controlling my eating habits, and that is at least partially my fault. I am not as disciplined as I should be. I'm working on it though. It's hard to do when you are depressed. I often lack the emotional, temporal, and financial resources to do it right. I use food as a drug, without a doubt. My whole family does, and we know it. My poor health is at least partially my fault. But, it isn't all my fault. There is plenty of blame to go around. My goal here is not only to highlight my hypocrisy, but to point out how we are seriously fucking up on feeding ourselves in crucial ways.

We don't produce food and feed ourselves as we should. Capitalism does not incentivize people to be moral, regulate themselves, or make choices which benefit us in general or in the long-term. The American Food-Industrial Complex does not exist to ethically feed humanity; it exists to line the pockets of psychopaths, regardless of the costs.

* The food industry, including a variety of service industries, severely limits or makes it impossible for workers to call in sick. Beyond enslavement, this is a significant public health problem.
* We produce more than enough food to feed everyone in our country and then some. Businesses would rather let food go to waste than miss a sale. They really don't care about feeding the poor, needy, and hungry. Blemished (but perfectly edible) food that lacks marketplace appeal is discarded rather than used to feed the masses.
* Through agricultural subsidies and predatory food manufacturer strategies, it is cheaper, both financially and by time-investment, for the poor to buy highly-addictive ("craveable") food with low or poor nutritional value than healthy options. Our laws are designed to help capitalists target and enslave the poor to these foods.
* Dietary guidelines, studies, and laws are paid for, defined by, and manufactured by food industries and lobbyists who have a vested interest in promoting terrible cultivation methods, distribution strategies, and eating habits for the general population.
* Antibiotic usage in meat industries is a leading cause of the acceleration of antibiotic resistance. The problem may be out of control. Perhaps it is only a matter of time before we see a new and unstoppable Bubonic "Black" Plague.
* The subsidization of corn has artificially distorted several markets, including energy, sugar, livestock feed, etc. It isn't sustainable, and it doesn't create the correct incentives we desperately need in these markets.
* Our foodstuffs breeding programs have eliminated the nutritional value of many of ours foods. It gets worse and worse each passing year, primarily because we're overly interested in the price efficiency of volume, as well as surviving pests and harsh weather.
* GMOs are safe, but we are not nearly cautious enough in how we modify our ecosystems. The process and protective measures we take matter. We regulate the industry to some extent. It is an expanding industry, and it seems obvious we need as much regulation as we can muster. The history of genetic modification and breeding have produced serious weapons, and the possibilities of problems arising from genetic modification should not be taken lightly. It should be regulated heavily (although, we obviously must favor and fund research in this area). I agree we are forced to "play god," but we need to be as wise as we can be in our GMO pursuits.
* GMO oligopolies and IP-rights have led to very problematic business practices. We are tying ourselves to capitalist distortions on seed supply.
* Bees are going extinct, and it is likely from agricultural causes. Their pollination is crucial to our existence. Unlike plenty of animals (except for balancing food web-chains in a broad sense), we desperately and almost directly need bees.
* The ecological effects of overfishing are not well-enough understood to justify it. We need to farm fish.
* Farm mammals are significant causes of global warming.
* We treat many farm animals very poorly. I'm not against eating meat. I'm against torturing beings that feel pain without excellent justification on a reasonable utilitarian calculus. Pain should be minimized. We're obviously not maximizing utility.
* The Food-industrial complex is not held to any reasonable standards in advertisement. 
* The Food-industrial complex seeks to privatize land, natural resources (including fresh water), and the ability to produce food. The goal is to enslave us.
* Hungry people lead to unnecessary wars. Hunger exists because we have a fundamental world-wide power struggle with capitalists. We the people are losing, and even more violence is coming for us all.
* The legal fight and conservative movement against the poor and homeless prevents us from even giving them food in many cases. This is no accident.
* Hunger is on the rise.

We have a serious and complex crisis escalating, and capitalism is at the heart of it. This is yet another form of power that continues to centralize in the hands of fewer and fewer people who do not have our best interests at heart. 
*What happened last week?
** 1uxb0x
*** Didn't do his homework. He's planning how to hold himself accountable (and to prove to his sister that he is working).
** j3d1h
*** Frustrated by the fact that she couldn't get virtualbox to work (although Vmware worked), even though nothing seemed wrong otherwise. 
*** Pleased to finish her journal and format it. 
** k0sh3k
*** She prepared her Lenten study over the week. No procrastination was nice.
** h0p3
*** Made a lot of progress towards getting into the Union. We have good options, which pleases me.

* How are we feeling? (health, emotional, etc.)
** 1uxb0x
*** Sad and happy. Feeling healthy though.
** j3d1h
*** Happy. Got a lot accomplished. Healthwise: pretty damn good.
** k0sh3k
*** Feels really run down this week. Period. Came fast this time, but hit hard. The vitamins have been much easier on her stomach.
** h0p3
*** I've had that fizzy feeling that I had after coming off my SSRI's. I've a drink each day this week, but I had no cannabliss either. I haven't been drunk. I slept quite a bit as well. I skipped DCK this week, and that was probably a mistake according to j3d1h. The lack of Cannabliss didn't seem to affect my affect.

* Are you happy? Why or why not?
** 1uxb0x
*** Feeling happy because he has plans for his future. He feels sad about the past week. It's a new week.
** j3d1h
*** Happy because she came up with some cool ideas for projects/presents (has to keep them secret). 
** k0sh3k
*** Indifferent to sleepy. First headache in a while. But, this is to be expected on her period. The weather has been insane this week as well.
** h0p3
*** I've felt really angry and cynical this week.

* In what ways did we successfully empathize with ourselves and others this week?
** 1uxb0x
*** Planning for his future this week. Figuring out how he's going to get his work done. He also cleaned his room and did the kitchen quickly.
** j3d1h
*** Making muffins for the family. 
** k0sh3k
*** Planning our long-term future, finances.
** h0p3
*** Planning our long-term future, finances.

* In what ways did we fail to empathize with ourselves and others this week?
** 1uxb0x
*** Not doing his homework.
** j3d1h
*** Not doing the kitchen quickly.
** k0sh3k
*** Did not edit her paper.
** h0p3
*** Didn't take DCK.

* What will we do this week?
** 1uxb0x
*** Stop himself from playing and being distracted when he should be doing his homework.
** j3d1h
*** Trying to finish homework before 4pm and help her brother do the same.
** k0sh3k
*** Edit her paper. Not eat BBQ on Thursday (Lent).
** h0p3
*** Work on welding. Get Will, PoAs signed at 3pm tomorrow. Drive to Chattanooga and apply to the union. Use the Cannabliss. Go through my very large bookmarks collection.
//Society grows great when old men plant trees whose shade they know they shall never sit in.//

I realize many sane people are quick to put down generation hitpieces. I can only say: be honest. Do you really believe people are responsible for their actions or not? If no, then you have no rational grounds from which to complain that I write this. If yes, then show me I'm wrong in how I've pointed my finger.

I see why I have duties to the generations after me (that's fundamental golden rule work behind the Veil of Ignorance). I'm quite unclear about why I have duties to the generations before me. It's a world of their creation. Of course, you can claim, "Not all baby-boomers." And, to that I say, I'll forgive the leftist Boomers and to a lesser extent the disenfranchised. Sanders may be wrong, but he is wrong for the right reasons. They at least tried, and they didn't give up. But, why should I forgive the rest? Isn't it obvious they have fucked us?

I think Boomers are the most psychopathic generation we've ever seen.<<ref "1">> Their personalities, values, beliefs, and behaviors demonstrate a clear distortion into the dark triad spectrum. Their hypocrisy is legendary. I'm pissed off at them, and I have been for years. I've seen plenty of Millenial hate, and I took it very seriously.<<ref "2">> Now the tables turn. Be prepared to be judged, assholes. I am entitled, and rationally so! I am convinced that Boomers have attempted to enslave and exploit the world and future generations.<<ref "3">> Why should I empathize with those psychopaths?

Baby-Boomers:

* pulled up the ladder behind them.
* are usurers, pimps, and loan-sharks.
* seek order at the expense of justice.
* destroyed the environment and do not seek to curb it.
* openly enabled capitalists to rape us.
* gave our freedom away, support and uphold the Establishment. deregulated the market and financial industries, and centralized power in the hands of the Hyperclass.
* deconstructed The New Deal.
* are war-mongers (I've lost track at this point).
* systematically choose to be misinformed and ignorant.
* did not earn their wealth, but act like they did.
* allowed our infrastructure to fall apart or become privatized.
* lived in a bubble and do not empathize with future generations.
* blindly believe that if they are happier then everyone else will be happier, as if the point of justice is to make them happy.
* heavily engage in Rent-Seeking behavior, especially towards later generations.
* are the primary actors/causes of our national, medical, and educational debts.
* either have no concept of real unemployment, buying power, upward mobility, the nature of the standards of living over the course of human history, and worker rights, or they don't care.
* are hugely responsible for why suicide rates, depression, and mental illness have been on the rise.
* are completely responsible for the lack of medical care available to everyone in the US. The number of deaths and amount of suffering on their hands is mind-boggling.
* are conservatives. Please, burn in hell.
* are the most racist, sexist, discriminatory generation alive.
* generated and maintained safety-nets only for themselves while simultaneously off-loading the risk and debt to younger generations.
* aggressively sought to enslave us through food addictions, advertisements, IP-regimes, and censorship.
* do not pay their fair share, and completely fail the "to whom much is given, much is required" test.
* complain about the generation they raised.
* are the first to bemoan the loss of family values while having the highest rates of divorce of any generation ever (among many other "family values" and dysfunctional family sins).


Oh, they aren't solely responsible for these problems, and they aren't the only people who believe and behave in these ways. They are still thoroughly and profoundly guilty though.

The fact is that generations tend to prey upon weaker, younger, powerless generations. Baby-boomers did not fight that urge, and it shows. 

I have no idea how the grandchildren of Millenials will feel about their predecessors. But, I'm not even convinced we will survive to have grandchildren at this point. Even if we did, even if we could fix these problems in time, I doubt my age-peers will do anything. 

The iniquitous consequences of the sins of the father lasts for generations. I'm done making excuses for you. I'm fed up with your abuse and gaslighting. I'm ready to fight back. So, officially, to most baby-boomers: suck my dick and please KYS.<<ref "4">> The world would be better without you.



-----------------------

<<footnotes "1" "I'm far from convinced that lead exposure explains why the Baby-Boomer generation is what it is.">>

<<footnotes "2" "Some of it is accurate, some of it made me realize the Pots were calling the Kettles black, and some of it was gaslighting.">>

<<footnotes "3" "Although, let's be clear, there is plenty of blame to go around. I really do hate most people.">>

<<footnotes "4" "The good news is that without healthcare or any savings (because, why plan for the future: you're a psychopath towards yourself too!), Boomers are going to start dropping like flies. Rejoice!">>
When Trump won the election, he spent an enormous amount of time and energy vetting and interviewing people for his administration. He clearly cares about who he works with, who works under him, and making sure that the executive branch falls in line under him (which, in a sense, is fine). His choices have been atrocious, as expected. What seems surprising to many people is the number of vacant positions that Trump has not filled. There is a standard administrative body we see in the executive branch (which has been expanding in power term after term). Trump is breaking from the tradition, as I pointed out: [[2017.01.31 -- Open Shadow Government]]

Trump is following Bannon's advice in deconstructing the executive branch's administrative and internal political structures. This means less transparency and a greater degree of centralization of power in the hands of fewer people. But, this is also an absurd application of "minimalist" state Libertarianism where it obviously doesn't belong. Let us be clear, this is not cleaning beuracratic house. This is artificial truncation, and it allows him to sabotage significant governing requirements he does not favor. Without the political structures in place, no one will do the work. It's actually kind of mad genius. It is a deep freeze on select executive functions of the government. 

Trump is dismantling oversight and functionality he deems unnecessary while centralizing the power he cares about in the hands of capitalists and alt-right advisers. The goal is to destroy the people's state (whatever appearance of it was left, at any rate) while putting his cabal of friends in charge to enslave and exploit the world as much as they possibly can. 

It feels like fascism and fleecing.
I woke up late because I forgot to set my alarm clock for daylight savings time yesterday. That's okay. Nobody was required to come to class today. In fact, I was the only student to show up to the entire school today. I didn't get much done, admittedly.

My teacher wasn't there when I arrived, so I couldn't get in the tool room. I raided the welding shop for some rods, and I found some very thick hot burning rods (gaaaaaayyyyy, um...yum?). Anyways, none of my welds looked good with it. There was a ton of spatter. I tried many different heat settings. I think I just got lucky with the rods I've been using. There is clearly much to learn. 

I didn't cut my ring correctly, so that project died. Ha. 

I decided not to weld my extremely thick flat plates because they took so long to bevel. I wanted to practice my roots on thinner plates first. This was a good call. I beveled plates quickly, and I tacked the plates too close together (I did the same thing as last time). My teacher took me to the millwright shop to grab the thick wire we needed to get the appropriate distance. I cut the tacks and got the right width. I welded these plates together. I went too slowly, letting it build up far too much (no need for filler, it was that bad). My root was...not worse than last time, but not acceptable. I didn't penetrate the edges on the bottom well enough, and it wasn't very even. This is definitely a practice problem. Most importantly, I was slightly off on my angle and not nearly deep enough. I will have a better angle, be absolutely at the root, and move more quickly. My teacher told me to try different passing styles too. I was going back and forth on the keyhole. Next time, I will try circles.

Also, my teacher told me a way to practice at home. I can use a vice grip and a pencil, and I can draw the lightest most consistent circular (or otherwise) patterns possible like that. I will practice at home. 

I didn't want to waste my plates and continue going through new ones. I asked how we could reuse what I had. We couldn't cut them with saws since they are quite long. So, my teacher taught me to cut them with the torch!

So, I learned how to use the acetylene cutting torch today. It was awesome. I just want to write down the procedure here to make sure I don't forget. I may not get much practice with it, so I want a mental checklist. 

* Have the material to be cut clamped and in a safe position. I put aluminum plate on the ground as well. Having someone to catch the piece your cutting is also damn useful. Be safe!
* Move it into a safe position.
* Make sure there is no oil anywhere on the lines, gauges, connectors, etc. Never use teflon tape either. It will explode.
* Make sure the headpiece is cleaned. 
* The right gauge shows total tank pressure (how much is in the tank), while the left gauge shows the pressure in the hose.
* Stay away from the pressure release valve handles while turning the gases on.
* Turn the oxygen all the way on. It should go to around 40 pounds. 
* Turn the acetylene on with a quarter turn (make it easy to turn off) to around 8-10 pounds. Never go to 15 or more, that is dangerous.
* Put your shaded glasses on. I want to wear a face shield for it too. That shit flies and it's crazy hot.
* Have your igniter ready and torch in hand. Turn the oxygen knob (at the bottom of the torch, the upside) and light it. 
* Set the oxygen correctly by turn it up until the flame has a small half centimer disconnect from the head, then turn it down until it connects (maybe a hair past it). 
* Turn the acetylene on, and keep it going up until the blue moves all the way to the head. Then pull the trigger and make sure there is still no more blue. Keep turning it up until the blue hits the head while the trigger is on.
* Make sure you are comfortable (an armwrest is nice, use a stand or block of wood).
* WIthout the trigger, get to your starting edge and get it cherry red hot. 
* Pull the trigger, keep about a centimeterish distance and move at a good speed.
* You can pull off and restart, but restart at a place where it doesn't matter.
* Be careful about slag. The goal is to cut while minimizing slag. Going to fast or too slow allows for slag buildup, if I understand correctly.

When you are done:

* Turn off oxygen, then acetylene on the torch. 
* Turn off oxygen and acetylene on the container valves.
* Empty the oxygen in the lines with the trigger.
* Empty the acetylene in the lines with the torch knobs (and close it back again).

Having a cutting torch to use will be useful. I'm going to cut my next ring with it. 

My teacher and I shot the shit for a while. I heard there may be a 20 year job coming to Knoxville that our union might be getting. That would be sweet. In any case, despite the fact that there are long term reasons to want to go to Chattanooga, I would much rather live in KY with the rest of my family anyways. My teacher said that either way is great. He thinks it would be really hard to turn down coming in as a 2nd or 3rd year apprentice before I even finished this program, since that is simply unheard of. It would be sick money, and we desperately need it. We are taking a huge risk, and I want to mitigate that as much as possible. 

My teacher says he doesn't blame me one bit for turning down the Eastman job. He thinks it was the right move.

I won't be going to Chattanooga tomorrow. I want my shop time. I can go Thursday. I really do need to visit though. Chattanooga is probably plan B at this point, but I need to make sure I have that plan B.
I actually became discouraged. My roots are really bad. I'm having a hard time figuring out the appropriate heat (amperage), distance between flat plats, the bevel, how far to keep the stick down, the motion, the look of the keyhole, etc. I'm having a hard time getting the penetration around the edges I'm looking for. It's okay though. I'll get there.

Since it was just me, and the teacher didn't want to be there, he sent me home early, again. 
We know we have identities and consciousness. We are conscious of being agents, but we aren't actually agents outside of compatibilism. We are compatibilist agents. We just don't know how they work. 
* The higher your IQ, the less likely you are to reproduce. 
* The more affluent you are, the less likely you are to reproduce.
* The less religious you are, the less likely you are to reproduce.

This is not an accident, and this has profound consequences. 

There are fairly high rates of pornography use among all genders. This makes sense, since virtually all of us like to have sex, think about sex, watch sex, etc. to varying degrees. The differences between consumers of prostitution and consumers of pornography tell us something important though. 

As a preface, of course, I'm not here to blame the victim. Many prostitutes don't have a choice in the matter. Many are literally forced into it. Others are enslaved more indirectly. And, of course, some see it as the best means to happiness. It's a broad spectrum. Further, there are deep problems of psychopathy, abuse, use, and treating as mere means in most directions in the world of prostitution.

It seems perfectly obvious to me that moral prostitution is at least conceptually possible. Utilitarianism knows this. Moral prostitution is not just a theoretical possibility. In fact, I think it happens all the time. Without a doubt, there are cases of prostitution which we all accept as if it is perfectly normal, we simply call these practices by other names (we don't even think of them as prostitution). Again, this isn't advocating prostitution; description but not prescription.

What is prostitution? The selling or trade of sex.

Here's a fact:

* Men are overwhelmingly more willing to pay for sex in more contexts, instances, and cases than women. 
* Male-to-female transgenders are by far more common than female-to-male.

Being wanted for sex matters. It's much easier to accomplish as a female. There is clearly a sexual marketplace, and men tend to be the buyers. There is a deep selfishness embedded in the sexual game. We see it in every species.
I drove 3.5 hours to Chattanooga. I had to wander since it was locked down. They even thought I was an intruder. They have actual security for that building. I take that to be a very odd sign. In any case, as soon as I got in and asked for an application, they told me I'd need my highschool transcript. I said I didn't have my transcripts with me. They said I couldn't apply without them. This is weird, and it is part of the corporate policy mixed with government regulations. Normally, application procedures which require transcripts give you time and even allow you to space out the application process into chunks.

They said I couldn't take the application home and that I couldn't fill it out. I tried calling my wife and schools I've attended. None could help me in the time period I had. I was annoyed since I had traveled a long distance and brought what I thought necessary. Clearly, they do not have their heads on straight enough to explain the requirements (Keaton also showed up randomly after I did and also didn't bring what he needed). This is a bad sign.

I talked to Jeff, the training coordinator. He gives me the psychopathic heebie-jeebies. He's almost proud of it. He has the idealogical traits and behavioral markers for it. It felt slimy (and this isn't just my jaded unhappiness over the application, but even when I heard him speak the first time and met him back home). He talked with the board to see if they could change the policy for me, especially since I don't have high school transcripts. Apparently, they wouldn't take any transcripts from my decade of post-secondary education. It was high school or nothing. I had to convince Jeff, gently, that my education was at least at a high school level, lol. He then acted like he solved my problem, but didn't and tried to send me on my way. He doesn't sound like the kind of boss I want to work with, and the people are not good people (I met several [some of the second time]). 

That said, I was given a tour of the facility after requesting it (which was part of the reason I was there). The facility is amazing. Business in booming in that area. Growth exists. I could make a living there. I could learn anything and everything in the trade. They have millions and millions of dollars of equipment there, including welding robots, to learn on. They might be terrible people, but I could strongly benefit from them. In contrast, the local union is more like drunk incompetence. I fear I wouldn't learn what I really need there.

Anyways, as I was leaving, I saw Keaton. We were surprised to see each other. If I do move down there, perhaps I'll room with Keaton (assuming he goes that direction as well). We're planning to come back down together on the 28th, I believe, for the tests I needed to take. Basically, little of what I told was going to happen when I arrived actually occurred, and not without my prodding.

In any case, I left, hit a gas station. Their pump didn't work, so I found another one. About 20 minutes onto I-75N I got a flat. Luckily, I noticed something was off immediately (you only have seconds) and started slowing down (my bucket'o'bolts is barely holding it together; I am truly blessed that my car has lasted as long as it has given the $1.8k we paid for it). Anyways, the tired broke oddly (disconcerting). I put the donut on the car, and I called my insurer for the nearest tire change service center. As I was driving there, they told me they had my tire in stock, but that a tornado had recently destroyed their shop. My directions were wrong. So, they guided my over the phone to their location. I got there, they took my car, and then they discovered they didn't have my tire. They kindly made 2 phone calls, but no one had my tire size. So, they said my best chance was to try Wal-mart. So, I went to Wal-mart. 

Wal-mart took forever at every stage. They said they had the tire, but it took 20 minutes of searching. Eventually, I joined in searching with them. It then took 2.5 hours for them to change the tired (I was 3rd in the queue). It was very late when I got home. It was not the best of days. I will not give up though. 
* How has our health been this week?
** 1uxb0x
*** Good, except for today, headache.
** j3d1h
*** Allergies or humidity causing sniffles while outside. Not a problem indoors though.
** k0sh3k
*** Lots of migraines this week. Period though. Trying out folate + B12 for MTHFR (plausible genetic explanation for lifelong problems). Feels she's had memory problems this week.
** h0p3
*** Like j3d1h, I've been sneezing a lot. My belly hasn't been feeling great. 

* What happened last week? Have you been happy this past week? Why or why not?
** 1uxb0x
*** Pleased with progress in school journal, but still worried that he didn't do well enough (not worried now though). Felt helpful this week. He was productive. Definitely happy this week, except that one day where he didn't any of his work.
** j3d1h
*** Stressed about finishing homework on Saturday. Otherwise, feeling happy about the week. Happy to finish her Spanish book. Excited to try Duolingo.
** k0sh3k
*** Have been happy. Her lesson turned out better than she thought it would. Student lunch went well, and we got lots of leftovers. Hopefuly about the folate+b12.  Has felt her week has been off, but doesn't know what it is. Still happy though.
** h0p3
*** Practiced welding even though I didn't have to. Glad to have the chance. I tried to apply for the union position, and I got to see how excellent their facility really is (even if the people suck). I talked to a lot of friends and family this week on the phone. I've been relatively happy, although I've been unhappy with the car. I'm ready to begin having my normalized schedule again.

* In what ways did we successfully empathize or fail to empathize with ourselves and others this week? 
** 1uxb0x
*** He played a lot. Sometimes this was empathizing, but often it was not empathizing with himself. Empathized with himself by doing his chores fairly quickly. 
** j3d1h
*** Ditto on the chores. j3d1h shared her treats from Israel with her family. 
** k0sh3k
*** Didn't fire her student workers, which is pretty good (they merited it this week). Happy fun times with her husband! (woot!) Ate too much BBQ, but it is the mini-Easter of Lent. 
** h0p3
*** Empathized with myself by working instead of taking a break for Spring Break. Empathized with 1uxb0x by cutting Problem solving and thinking about how best to give him a practical lifeskill, and decided j3d1h will continue her writing (and cultivating her abilities as a computer scientist).

* What will we do this week?
** 1uxb0x
*** Try hard. Play on the computer. 
** j3d1h
*** Make the remote server, including getting a VPS and domain name. Finish homework everyday.
** k0sh3k
*** Finish one of her classes. Work on another one. Finish editing her paper. Lesson plan too.
** h0p3
*** Will learn to be a pipefitter, once and for all! I would like to take the car in and have it inspected/aligned/etc.
Both children struggled to finish their journals, again. But, it is getting better. Progress is progress. 

j3d1h is doing a good job; she kicks it out. She's beginning to see the value of her journal more and more. My worry is that she thinks she understands what she doesn't in her reading. She has collegiate literature, philosophy, and programming. Her math is geared for mathematicians, and in our investigations, she only has the a beginners understanding of what she has read. This is perfectly normal. I just want to make sure that we push far into new frontiers for her, but come back and gain an even deeper understanding on the second (and beyond) pass of content she has only been introduced to.

I'm explicitly gearing her formal curriculum toward philosophy and computer science now. Those are the two things I can give her.

1uxb0x is still struggling to stay on task. This week was better though. Most days were completed. He had one day where he got in serious trouble. His journal is slowly improving. Getting him to express himself is very difficult. It's just time and practice. We will get there. At least he now will tell us about what he's learned and will attempt to digest it in his journal. Time, pressure, and encouragement. I need to say every positive thing I can to him. He often feels inferior, and I need to encourage him, to help him climb out of that attitude. 

I believe he should work with his hands. I could be wrong, but I'm going to try and see what I can do to help him begin building things with hands. It's crucial that he starts building a practical skill. I need him to have options and gateways to pass through. He has to believe in himself.

I'm leaning more heavily towards the local union at this point. That said, I talked to Keaton. He's willing to be roommates, assuming that's the direction we're both heading. I guess next week Tuesday would be the last day. I'll need to call up the sociopath to make sure everything is set as well.<<ref "1">>

 I called the Louisville fitters union. They aren't taking applications until September, and they won't actually begin the program until August of next year. It would technically be possible for me to hit Journeyman with a year or two of that. The pay is about the same adjusted for the cost of living. I'll apply when I can. It wouldn't hurt.

Anyways, getting up was harder than usual this morning, but once I stepped back into the shop, I felt right at home. I'm very glad I got to go today. In fact, I was straight up giddy to get my hands dirty again. 

The teacher asked us to make sure the pieces we've made are as safe for handling as possible. Apparently, he really is going to use them again for some demonstration/fair thing. I thought it was just for the union visitors.

We finished the Y in no time, then we moved onto studying for our usual Monday test. We're crushing it. Chris was borderline confrontational/accusatory with the teacher about being held back at Nash's pace (that was not my doing...Chris clearly has seen what I've seen though). Nash didn't show up today.

We took the test. I assume we passed. I've yet to not do well on a test.

We then started working on saddles. My teacher did an exceptionally poor job teaching us this time, but with enough questions we were able to extract the necessary information out of him (in addition to figuring some of it out on our own). The initial work was done within half an hour. But, it wasn't up to snuff. We worked on it for quite a while. Unfortunately, there is still the tiniest sliver of light coming through. The teacher expected it to be a perfect seal, apparently (which doesn't make perfect sense to me because this is supposed to be welded anyways). At the end of the day, I quietly asked the upperclassmen to look at it. Several said it was the best saddle they've ever seen and that it obviously should pass (their work was passed with far lower standards). I find it odd that it isn't passing yet. That's okay. I'll keep working on it. Practice makes perfect. I realize this will get harder, and I might as well understand and practice as much as I can.

Chris was annoyed by a remark the teacher made, a "nono" we committed that we weren't told about. We beveled inside to make it fit even closer (although, it obviously weakens the walls, and I should have known better), just like the example he handed us. The teacher clearly should have said something about it on the example he gave us if he didn't want us to do the same. That's okay. It wasn't too complicated to fix. 

The teacher really doesn't spend time teaching. But, in a very weird way, I kinda' like it. I enjoy having to figure it out to some extent. I'm forced to make my own deductions, which I enjoy doing (at least when there is no pressure). I like being held in check on whether or not I actually know something, to know the boundaries and limits of where my knowledge and reason can take me, and most importantly, to know when it is time to ask for help. This is key. 

Also, I need to call/text AB&T for more forms. 

-------------------

<<footnotes "1" "I had a conversation with my father on his birthday about it. I never know what to say my dad anymore (and he would tell you the same thing from his direction as well). I couldn't articulate why I thought the man was a sociopath to my father (although, my father clearly has that switch inside him as well; he just uses it more wisely than most sociopaths). The training coordinator is an ex-football player, evangelical Christian, who studies psychological tricks to manipulate people (he's sadly proud of it; definitely dark triadic), demonstrates that clearly in his communications with me, his secretary, and his board members, is slick as fuck (knows how to make himself likeable, despite lacking empathy), and is apparently famous for a lack of impulse control. He has no problem lying. The markers and signs are there. I'm tellin' ya, the guy gives me the heebie-jeebies.">>
He passed the saddle early this morning, said it was great (we didn't change it from yesterday though). We started working on a larger saddle. We smashed that. We then started 45 degree laterals (he had a meeting to goto, so he left us to it). We did a good job, or so we thought (but again, the same yesterday). We even moved onto a 4-on-4 (which is apparently much harder), and he said it was great. He wanted us to continue to tweak it. We did. I also had time to get some welding done. That was nice.
Today was really effed up. My head is spinning: Gorsuch, Manafort, Nunes, and Schiff. The day keeps on giving. Let's be clear, a huge fucking net neutrality vote is tomorrow (my pet, my love, my savior), and that is like the last thing on my mind right now. ~McCain called for a select committee to investigate the Trump-Russia relationship. It's like watching Watergate unfold. It's a kind of political blitzkrieg and chaos that I don't think I've ever seen the likes of in my lifetime (and I was forced to witness the 9/11 hysteria around me as a teenager).

The checks and balances that do exist are barely there, not very trustworthy, largely RNC controlled, and completely bought by crony capitalists (I'd like to extend my weekly "fuck you" to the DNC here as well). We the American people are simply observers and slaves to this theater. Obviously, there are monsters bubbling beneath the surface. It's a spectacle at this point.<<ref "1">>

Perhaps the Impeachment Dagger is being unsheathed. We must watch the RNC closely. They may be forced to amputate. It is unclear. What good comes from nurturing this? It's crazy messy. If it passes by, they will truly be gods of men; hypernormalized deities. Assuming they are unsheathing the dagger, how hard will the RNC backstab? It sounds weird to say, but Trump may literally be charged with treason, depending on the evidence. It is possible he could go straight to prison after having collected millions.

Ah, I am dreaming. I need to stop. I must not allow myself to be beguiled. The RNC will squeeze every ounce of political utility from their sacrificial lamb. There are trades here I cannot see.

I'll tell you this, I have no fucking clue what dirt Mother Russia has on Trump, but it must insane. It is possible they've been cultivating him for years. The coercive force they wield over him must be immense.

Assuming impeachment, do we move straight into Pence or do we get to redo the election?  I figure that the RNC really gets to call the shots here. I'm guessing Pence. 

I have one other quite conspiratorial (yet entirely unoriginal, I'm sure) thought. Assume a very huge impeachment debacle. Let's say we don't get to have an election, and let's say Pence gets taken down with Trump. That leaves Paul Ryan as next in the line of succession. Ol' Paul "Randian" Ryan, folks. Full Blown Capitalist, to the max. Ayn Rand is the new Locke of actualized/practiced American political philosophy, but not nearly as fun or correct. Thank the Libertarians for this mess. Note that Ryan was one of the reasons Trump was ever even partially accepted by the GOP. Thus, my claim is that there is a non-trivial chance that Paul Ryan will be POTUS, and that it may not be an accident.<<ref "2">>

But, I'm not counting my impeachment chickens just yet. This is all unprecedented<<ref "3">>. What are we, 60 days into this presidency? Watergate took like a year. 

---------

<<footnotes "1" "Pass the popcorn, please!">>

<<footnotes "2" "For the giggles, I'd like to point out Rex Tillerson is fourth in the line of succession.">>

<<footnotes "3" "A word which has remarkable similarities to unpre//si//dented.">>
Today was a great day. 

We got our study points for our next exam, and I got my AB&T form signed (and mailed). I've yet to text for more though. We put fake finishing touches on the work we did yesterday, and our teacher eventually told us to make a 4 on 6 Lateral and Saddle (he would check them after his meeting). We smashed through them. I did the saddle myself, which has cardinal direction symmetry to it, and my initial portaband saw cut was so clean that I not only made a super clean piece, but decided to fuck around by making the leftover piece into a saddle as well. He eventually graded it (I wasn't there to hand him the pieces), and he took the ;eftover crappy saddle (not my perfect one) as the piece to be judged (said it was good). I think he's purposely saying he doesn't like stuff to slow us down. The reason I think this: our good pieces aren't changing, and he gives us different appraisals even when there aren't differences. Anyways, I'm glad that even my trash piece was up to snuff.

My theory about why he's slowing us down:  if we finish all the content too early, it poses problems for him as a teacher. We're completing everything the upperclassmen have done and then some, and we're still accelerating through the program. We're probably a month ahead in shopwork and about a month and half in bookwork. Assuming socket welds and butt welds are going to be easy (since I've become a reasonable beveler, and many screwpipe principles transfer), we may smash through the entire course in 8 months or less.

We moved onto the simulator. The simulator is different because we had to draw to fit. We were told to draw for the 1" pipe flanges (3 of them on the sim), get it approved, then do the measurements. I'm the only one who can draw it (Nash and Chris, hilariously, have previously had classes specifically on construction drawings, especially isometric...It's just not their thing, especially Nash). It was approved, and then our teacher showed us how he wanted to measure. My teacher felt that some of the things I wanted to measure on the drawing weren't worth measuring. I think he's wrong. The way he wanted to do stuff wasn't on paper. He wanted us to chalk mark the floor beneath the simulator. While we did this to some extent, it wasn't to the extent he was suggesting. 

He's against what he calls "stovepiping," which is just putting in a piece at a time and eyeballing (my teacher is obviously wise in this respect; planning is everything). Ironically, I fear that even his method has a kind of stovepiping element to it though. I strongly prefer having the drawing representation do most or all the work for me. I'm fine doing the math. I trust it more than doing it all by measurement. Don't get me wrong, I'll measure all day long. I want accurate initial measurements for key parts of the drawing, and then I want to do the math to figure out the rest. I'll still measure again after doing the math, if I can. Multiple verification for validity and coherence of your gameplan is crucial.

Obviously, I don't sound super confident. I've never done this before. My gut tells me my teacher doesn't exactly know what he's saying on this one though. He does not speak with the confidence I expect, and the way he attempts to solve certain kinds of geometry and measuring problems seem inefficient (and perhaps even less accurate) to me. But, not doing it his way may turn out poorly. I'm hoping it works. I think it should. We'll see.  It looks right to me. Execution details are another matter, but even that should be fine (I'm unspokenly in charge of what we do in our group). What we're building is structurally simple, it's just really big and unwieldy, and we can't really afford to be off even by perhaps more than an eighth of an inch anywhere. 

Anyways, we got all the pieces cut, taped, and I started building before we left. If we're really lucky, we could finish this by the end of next Friday. Once we do, we move straight to socket welds (which everyone is just itching to try). I'm happy to do the simulator though. I wanted to do something complex, but my group mates did not. So, I decided to help them instead. Given the requirements, I designed what I felt would be the easiest to design around. Given that we'll have to do three other fabrications to fit into place alongside the one we've designed, we should give ourselves room. So, trying to find the simplest, flexible, and easy way was also a kind of challenge I enjoyed.

I have a new nickname today. Apparently, I am magic. 

My teacher offered me (but not the others) the X-piece-90's and Y to take home. I find that weird, since Chris definitely helped make them (and even Nash, to a much lesser extent). 


In 2013, Rex Tillerson at Exxon Mobile brokered a deal with Russia to extract oil from large swathes of Russian land. This oil was pumped through Ukraine. Ukraine taxed this oil and was seeking to join NATO (not quite Russian-friendly). Putin's attack on the Ukraine in 2014 was to seize control of the port, eliminate taxation, and enrich himself (virtuous-of-the-practice kleptocrat that he is). Russia had been sanctioned. These handcuffs bottlenecked Putin's profits (I believe Putin has long been a dark money trillionaire). 

Fast-forward, and Rex Tillerson, recipient of the Russian Order of Friendship medal, is now our Secretary of State. Clearly, at least part of Trump's blackmail payment is installing Rex. Russian interference with our political processes and subversion of our pseudo-democratic election cycle has truly paid off for Putin. 

Assuming Trump even survives the political turmoil accumulation (and he might, he's straight fucking crazy and backed by many powerful interests; plus, he's made it this far), there is a reasonable chance that the sanctions made in the Obama era will be lifted. Putin stands to gain untold wealth; he continues to snowball hard. To be clear, the House approved a resolution killing SEC requirement for oil, gas, mining companies to disclose payments to foreign governments. Further, the US Treasury Dept announced it’s easing sanctions to allow companies to do transactions with Russia’s FSB. Lastly, Steele, the infamous Dossier's compiler, predicted this as well. The string of high-profile deaths in Russia are no accident.<<ref "2">>

As I've noted [[before|2017.03.12 -- Trump's Administrative Truncation]], the executive branch is being deconstructed. In its place, a handful of very successful psychopaths are taking even deeper control of it. The State Department has been purged, and Rex is going to own it from top to bottom. As Trump told us on the campaign trail, he would not be in charge of foreign or domestic affairs. He was telling the truth (as much as he could). Trump is the figurehead, the disposable scapegoat, the pawn and puppet. Rex, capitalist of capitalists, is in bed with Putin. 

The American government has always been bought by the elite. Putin is an incredibly evil and dangerous man, and he's only joining the throng-pit of struggling gladiator-kings in our deep state. Who can solve these problems? Only we can.<<ref "1">> No, but for real, Russophobia may lead many Americans to give away their freedom even further (like the Patriot Act). I will not accept this false compromise.

In any case, we are clearly in a Second Cold War, fought not only on the world's stage, but also by proxy, in darkness, guerrilla-style, on the internet, and through backchannels and subterfuge. 

-------------------

<<footnotes "1" "Rofl! I crack myself up.">>

<<footnotes "2" "For posterity's sake, I'd like to point out that in this edit that former Russian parliamentarian Denis Voronenkov, Putin critic of the annexation of Crimea, died a day after I wrote this post. This pattern is not an accident, and I can tell you, it's not God causing it (just human gods).">>
Today was excellent. I finished a second tree project. Afterwards, I wanted to try the torch again. I failed to get the torch to work today. Honestly, it was a bit scary the way it acted. The oxygen wasn't high enough because I couldn't get the flame to separate (and I couldn't seem to get it higher). I tried twice, and even Keaton couldn't get it to work. I'll get my teacher to help me the next time. The good news is that I'll just use our large bandsaw to cut carbon steel plates when I need to bevel for practicing laying roots.

Oh, I went for another flat weld today. I experimented this time, since I know I need to find my groove and a method that works for me. Of the 12 inches, I got about 3 inches of excellent root. The rest was trash to varying degrees. I need to make sure I'm not burning too hot. I know my low heat settings aren't the recommended settings, but everyone has to find their own way (there are serious variations among welder norms/practices, from what I understand). That's what I'm going to do. The root is getting there, but I need to practice more. I'm getting better with controlling keyholes. Spatter is marginally better. Going perpendicular and staying deep is helping. 

I asked my teacher if I could watch the advanced welding students and pick their brains (only after asking the welding teacher, ofc). He said yes. I asked the welding teacher, and he said yes. I asked him to recommend students to shadow, and he pointed out several who were graduating in a week. I walked up to one, and we hit it off. He was TIG welding (I've never done it, and I've never seen it before either). You should have seen his walking the cup method and the gorgeous fucking welds he made. I was straight up envious and blown away. These were sick welds, like straight up welder porn. 

His control was amazing, his root was perfect, and the bead looked like a robot-artist had done it. He took his time, and it was beautiful. I saw him drop a root on stainless schedule 10 pipe (he had different approaches for different kinds of pipe). After lunch, I saw him drop a cap on it. We talked about its shape (barely noticeable droop towards the bottom) and how he was working against gravity (apparently, he was worried about the [lightest possible] criticism I made, since he said the teacher would probably say the same about it). 

My hood, btw, doesn't trigger perfectly on TIG, although I wasn't very close (another advanced student commented that it happens if you aren't close enough). I need argon to practice TIG, and it isn't obvious that we have that available in the pipefitter shop. We have the machine. I'll ask my teacher. I would love to at least have tried it. Another student, Ferguson, is a handy guy, but he's not bright: he might be able to show me as well (although, I weld better than he does, I just don't know as much in general). 

After watching the TIG cap, I beveled pipe (looked decent enough), and I tried to stick weld it. Something was weird about this pipe though (I've never seen this kind before). I couldn't even get beads to start on the side. It was not a normal carbon steel pipe, and it wasn't stainless. I'm not sure what was up. I tried to different amps, and nothing worked unless I was blowing holes through it. I'll figure it out. I need to just read and look it up.

Chris was sitting there after lunch. He was tired of computer work (he thanked me again for my strategy, which has wildly accelerated him through the bullshit), and because the teacher knows he works hard, Chris gets cut extra slack (and doesn't have to stay in the computer room). The teacher asked him if he wanted to get to work on the simulator. Chris decided that's what he wanted to do. I joined him (since it's my project too). Chris has never put together larger projects like this before (and neither of us have used a simulator). It showed, but none of his mistakes were big or hard to correct. 

We fabricated very quickly (Chris is profoundly better at this than Nash. That said, Chris already has a 2-year associates with a class in screwpipe, so he should.). Chris understands the problems I'm thinking about almost immediately as I explain them (not the answers, but the problems); he's a pleasure to work with. He's not incredibly creative, but he has a good head on his shoulders. We didn't have access to the 2-hole inserts for the flanges, but my eye-balling on this is trained well enough now that it is fairly accurate (and we could adjust on the fly if we had to). 

We went to check and see if this 20 foot spider monster actually fit. It did. We couldn't find bolts that fit perfectly. Our teacher interrupted us and said he'd show us later, but that we had something else we needed to do. We were given our third project for the school itself today. We're building a clothes hangar (two) for the bookstore. We had to find pipe they'd like, cut it to length, and I had to cut carbon steel plates of certain size, grind off burrs, and punch-hole the midpoints for the drill press (I assume we'll weld these to the pipes and drill them into the wall). We'll drill tomorrow and mount it.

Our teacher showed us how to find the correct sized bolts in our bluebook. We didn't have any in the shop, but he had some which were close. We used those. Let me tell you, that shit gets heavy. I held it up (with a stand helping me) as Chris put the bolts in at the bottom (so he could slip the gasket inside and have it land on the bolts). Our teacher watched. He said our work was very good. This is the first time he's had students build it correctly on the first try. 

Apparently, there is a tightening strategy. You tighten about 25% of the way in star patterns around the flange. We also have a tool that helps us line the flanges together. I forget the name. It's the first time I've seen it. Apparently, there's a trick with this tool for holding pipe in place so that I don't have to bear the weight of it. Neat. 

I got a lot of shit done. I'm now going to study for the test tomorrow. I'm not ready for it.

I use to be pro-life, top to bottom, hardcore pacifism and all. Now that I have seen the value in taking my own life, in realizing how less precious life really is, in realizing that some lives aren't worth living, in realizing that death is sometimes a compassionate gift to so many human beings in so many contexts, I've lost my pro-life stance.

Once the Kantian Bubble is burst, it is up to the Utilitarian to pick up the pieces and find the more rational argument.

If shaping our genes is really about shaping the sum of human experiences, then what is eugenics really? Is eugenics really just modifying genes in a good way? What counts as a good way? The contents of that are probably spelled out in a utilitarian calculus or weighing model of human goods. Our happiness matters to eugenics. Good for whom?

Abortions are often or always eugenic, depending on how we think about it. Euthanasia seems highly eugenic to me in certain ways. It seems obvious that genetic manipulation is eugenic. We might even think that gene testing and genome sequencing are profound tools of eugenics. The person who doesn't have a baby because they predict a high chance of birth defects is engaging in eugenic, and so is the peron who aborts their down-syndrome fetus. The person who sterilizes anyone for any reason is doing a kind of eugenics. Those who don't have kids because they know they would be bad parents are practicing eugenics. That we pay people to get kicked in the balls in video productions like Jackass (and numerous Youtube copycats) is a form of eugenics. That we don't wish to destroy our own genes is eugenics (mmm... cancer is bad...mmmmkay). That we think we should reproduce is a form of eugenics (you probably think you're improving the gene pool don't you, idiot?). That we have married bloodlines, that we care about the status and genetics (even if only as it pertains to the memetics) of our children's spouses.

Ultimately, who is hurt? A ball of cells that doesn't have the nervous system necessary to feel pain like ours? Doesn't seem like it is really hurt. Now, as the fetus develop, it can feel pain. What if we ended its life without it feeling pain? What's wrong with that? It wasn't a person at all. It was still a lump of flesh and no more. Even those who are not even conceived miss out on opportunities. They are mere possibilities. They aren't persons though. We have no duties to them except insofar as they become persons.

Why shouldn't you trash the world? Because you owe duties to fetuses that will eventually grow enough to become persons. Does that mean you owe duties to all fetuses? No.
Had a flat tired last week. Something about the car has been off since it was replaced. It has been vibrating and getting worse. I took it into the Wal-Mart tire center here. They said they would look at it for free (since it was a Wal-Mart that fixed it a week ago). I got an oil change as well, since...might as well, right? Turns out the other front tire was about to go. They also recommended I get a new rim and control arm. I'm gonna check around to see if I can find a cheap one. I'm not sure if I can change it myself, but I probably should. I changed the front end on our old black Toyota before. I can probably figure this one out too (that said, if I get it wrong, it would be incredibly costly, possibly). 
Let's say the world doesn't end anytime soon. What can it look like? There may be many possibilities. Are there hopes for the masses amongst any of those possible worlds? How many and to what extent? When weighing the average risk-assessed utility over all the possible worlds, does this favor us wanting to live or not? Is there a reason for us, the masses, to live? Let us say there were good reasons. What would those be? How do we maximize the chances of having a world worth living in for the masses (Veil of Ignorance)? What are the means to our ends? I am convinced one of these means and perhaps necessary conditions for such a world will be //decentralizing information//. This is a form of decentralizing power; the old adage [[Knowledge is Power]] is fundamentally true in many crucial categories of cases in our general lives. 

Not all decentralized networks are good, of course; I spoke about this [[before|2017.02.28 -- Web Assembly: The Browser VM as Decentralized Cloud]]. Maximizing decentrality is key though. Partial decentralization still has the problems of relying upon central powers. I believe there is a chance that completely decentralized networks are a fundamental cryptoanarchic tool for both socialist and libertarian utopias. This is old news to many. And, of course, I'm not saying utopia is achievable. I'm talking about the most ideal practical utopia that is possible; the Leibnizian Best Possible World sense (which, logically, must be open to some very shitty worlds). I think there is a reasonable chance we could all be relatively happy people on the planet if everyone worked together right now to throw our yokes off. 

Decentralized networks of information are decentralized networks of power. 

# It is a crucial method for uniting [[The People]] of the world. 
# It is a fundamental necessary condition on the autonomy of the People in the future as well.

These two facts are deeply intertwined, obviously. 

I also think there is a chance that decentralized networks not controlled by major corporations will be able to live in the future. The dangers these networks pose to those in power is still not completely clear to the entire Hyperclass (but obviously to some of them). If they were to fully realize the threat posed by decentralized networks, they might kill them faster or require at least some degree of "accountability" centralization. Yes, it is possible for these to be squeezed out through legal systems and significant financial pressures. There are those who wish to destroy decentrality. Thus, we must preserve publicly owned, fully decentralized systems by commercializing it (the GNU model is excellent). Like standard VPN technology, we need full decentralization to be so key-turn easy and fundamental to the software ecosystem that it would be unfathomable to make it illegal.

Decentralized tools like Bittorrent got a bad wrap, yes, in the name of piracy. I also think there are significant federalist/centralists/capitalists in power that have desperately tried to stop decentralized technology (except for parallel computing) in a generalized way. I think there is an attack on the decentralized web coming from multiple directions. We have to make it necessary now to those in power before it becomes illegal. The hopes of the survival of revolution rest upon injecting decentrality into the very network architectures of the wealthy and powerful. Make it too painful for them to lose it, and we won't.

The only way for the People to maintain and grow their power will be through decentralized networks. If we close them out, people will be compartmentalized, completely owned and managed from surveillers and controllers. Those with the financial interests to have these powers will have them, and it isn't obvious that anything will stop them from trying to maximize their control. The free gateways to the Wild West are closing as the Walled Gardens continue to grow so large they shrink/tame every corner of the Wild West map. 

I will admit, there is a deep irony to the fact that this is now revolutionary. The oldschool hacker ethic has an increasingly smaller voice amongst those who shape the internet. 
Today was short, as expected. We finished the 1" simulator project off today. I had left the tools out (carefully) because I didn't want to wait for the toolroom to be unlocked to finish it (the teacher, at this point, trusts me to unlock and lock everything [but, he can't give me a key], and to get and use whatever I want). It looked clean (well, the very top flange wasn't perfect to my liking, but it didn't bother anyone else, so I let it go). Lots of "very goods" were handed out. All the warm fuzzies be unto us. 

If we were being honest with ourselves, while the flanges fit and the pipes were level, I saw that the longest pipe (about 10 feet long) had actually bent slightly after the complete mount. It wasn't blatant and in your face, but it was there definitely there. If our teacher was paying more attention, he definitely would have said something about it. That means we made a mistake. I'll have to measure it later to try and figure out what I did wrong.

We were going to put up the bookstore project up, but apparently, the governor "claimed" he would be here with some legislators. There was a big to-do in the large conference auditorium/room today, next to the bookstore. We didn't want to bother them. We'll finish it Monday.

Instead of moving onto taking our test (the three of us wanted to study for it), the teacher had us move onto the 1.5" section of the simulator. This time, they didn't even try to draw. We talked about what we wanted it to look like, and what we felt would be easiest to mount. Now that the 1" section is already mounted, it will be harder to fit the following sections. I was clever to give us space to do it. The 1" was on the outerside, and this 1.5" will be in the middle, and the 2" will be on the outside (towards the back). This will make it easy on us. As I said, it wasn't my ultimate vision, but trying to find the easiest and cleanest way to push the series of projects together is a different and still very interesting challenge. 

The teacher handed us a pre-made 3-1/16th" nipple. He said that he's never had to make nipples like this on the job, and his first time every producing them was in the shopclass itself. The 535 Ridgid threading machine has a nipple attachment (I've only used it once [this is sounding extraordinarily sexual, said the pipefitter]). He said it was a hint. I thought about what he meant by this, since it was not obvious how it was going to be a huge "hint" to us. I figured out what it was though (it was roughly the gameplan I already had), and it was mainly to deal with a tighter spot we were in at the top of simulator (but, I could have cut and threaded my way out of it even without a tiny nipple). 

Since he went through the trouble to give us this "hint," I felt it would hurt his feelings if I didn't use the nipple he gave us (his nipple was shorter than it needed to be, making construction harder and planning more elaborate). This meant that I didn't get to free hand the design. I needed to build around the nipple. That meant I had to add the takeouts to find the true length (kind of reverse engineer the process, and maybe that was his intent), and then find the rest of the TLs. It went smoothly enough. I'm paranoid about being off. A 1/16th there and another over there, etc. add up. The other guys did not take measuring seriously enough. I know they don't enjoy it, but I really don't want to waste my effort. 

I drew it, the teacher didn't complain about all the measurements I wanted this time. The guys realized I was right about it after pointing out how it helped us avoid some tedious work by hand (and give us more exact measurements). We measured. I'm still learning to do this well. I need more practice at it. This is all very good experience. 

We did the math, and I'm glad I had Chris check it. I did the wrong takeout for one of the pipes (I should be more careful, and I hope this is the last time that I choose to not double-check my own math before having someone else check it). We cut the pipes (I think my teacher was disappointed that we couldn't find more scrap to use in it, but this project is very long). I worked on the scrap parts I could use, and I had to readjust my threads which went too deep. I asked the guys if they were checking the threads. They said they hadn't. 

After I finished my pieces, I checked theirs (I check all the components because I don't trust anyone). They fucked up all of their pipes. I couldn't even get a full rotation on some of the threads (it should be between 3 and 4). Nash didn't think it was a big deal, but we have been down this road. It is heartbreaking to put in all that labor just to have it not work and need to redo it all. Chris immediately understood how the pipes were just going to be way too long (despite the fact that they cut all of their pipes 1/8" short -- why aren't they fucking measuring!?). 

So, I fixed the machine and showed them what I wanted. You can technically (although, I've never been told it is acceptable to do) rethread a threaded pipe a bit deeper (into the wall of the pipe deeper) and even a bit deeper into the length of the pipe if you need. The trick is to barely applying pressure to let the threads catch in the die. If you put pressure, you'll break threads (which sucks). Chris realized how it worked after I showed him and tested it. I'm glad he saw the reason in it. Nash didn't seem to give a shit =/. Chris sorted it while cataloged and organized our materials for Monday. 

We didn't take a test. We will on Monday. I want to study for it. I tried to explain to the guys that while the core book does have some boilerplate bullshit in it, I definitely want to deeply understand everything in our Pipefitter books. I take these books very seriously. I assume journeyman know this stuff inside and out.  At this point, I'd rather do one a week, since I don't want to merely pass tests: I want to understand the material. Plus, it doesn't help us to accelerate faster than our actual shop work. There are no time gains, and the bookwork and shopwork do not track each other content-wise. 

Oh, I forgot, I texted AB&T. I'll get my next set of forms on Thursday. As long as school is paid for, I won't have problems, right? ;P

Also, I turned down a 1-week construction job (they weren't paying very well). I couldn't pass the drug test if I had to (unless they just let cannabliss fly). 

I stopped by the local union. He gave me some books to read. I learned about the size of our jurisdiction and that we in fact act as traveling union members to other unions around the country. Also, Knoxville's job will be huge. There is a chance I could work there, which would be sweet. He guaranteed me a spot again today. I think I was tiring his patience with all my questions. We talked about my concern that I wouldn't be able to receive the same amount of training here as I would in Chattanooga. The new facility they are building (forced by the UA) is designed to alleviate that exact worry. They are hunting for a building now (when I walked in, he was on the phone talking about it with his bosses).

He told me what MIG was for, which is, as I suspected, to just push tons of weld material really quickly. If it doesn't have to be pretty, perfect, and completely clean, MIG is the real deal. What could take 4 hours of painstaking work could be handled by some the MIG-like machines in an hour. He said he doesn't own his own welding tools. Whatever he needs he uses at in the giant union shop. I think that's interesting. He hinted that owning your own machine would be useful for oddjobs and working outside the union though.
* How has our health been this week?
** 1uxb0x
*** Normal. Felt a bit sick on day this week, but taking a nap fixed it.
** j3d1h
*** Same as ever. 
** k0sh3k
*** Headaches for the past couple days, but have felt more energetic. Folate/B12 might be working. It would have "kicked in" this week. Might be placebo; we don't know yet. Stomach hurt all day yesterday. No idea what it was.
** h0p3
*** I'm feeling fatter this week. I slept well enough. My gut has had serious pain towards the very bottom a couple times. 

* What happened last week? Have you been happy this past week? Why or why not?
** 1uxb0x
*** Not happy for two reasons. 
**** Didn't make my parents proud. (*He needs to work on himself because he values himself)
**** Friend of his went on spring break, and he was planning to play with them, but they traveled.
** j3d1h
*** Feeling crappy because she didn't do her journal. She also didn't have backups for the journal she messed up, and she has to redo it. Not feeling happy about it.
** k0sh3k
*** Finished editing her part of the paper. Terrified that her co-worker won't get it done. Car died, and couldn't go to church (sadface). Generally happy though.
** h0p3
*** I accomplished a lot this week. I learned and practiced much. I figured out that I really want to stay at the local union here. I'm sad that I haven't helped my kids stay on task well enough this week.

* In what ways did we successfully empathize or fail to empathize with ourselves and others this week? 
** 1uxb0x
*** Not doing journal; failing to empathize with himself and his parents. Not having saved his work.
** j3d1h
*** Not doing journal; failing to empathize with himself and his parents. Not having backups.
** k0sh3k
*** Editing, did it. Empathized with herself. Didn't freak out when her co-worker said she hasn't done anything. Gave her some tips.
** h0p3
*** I got the car vibration fixed. 

* What will we do this week?
** 1uxb0x
*** Devote more to nature.
** j3d1h
*** Get her journal done, top priority
** k0sh3k
*** Turn in her paper. 
*** Plan for edible books festival
*** Tiddlywiki, everyday. 10 minutes. 
** h0p3
*** Finish fixing the car.
The battery died. Something's definitely up with our car's circuits. I have no idea what it is. k0sh3k missed church (sucks, since she spent a lot of time preparing her lesson). Luckily, I had bought the battery, in case we needed it. I learned how to replace the battery in this car. We took back the non-working charger and I picked up a dumber one (I hope). I really just need it to trust me when I say I've connected it to the terminals on the battery. I can't reprogram these specialized devices though. I want it to be as analogue as possible because it gives me the most freedom possible. 

We also setup sites for the whole family.
The bookstore said to hold off on the rack. Apparently, the director wanted something that curved, and another person didn't want us to drill in the brick. So, that is on hold, perhaps indefinitely. That's okay though. I had a good time getting it ready.

We took our test. I got an 88 =/, yuck. I knew what I did wrong though. The curriculum is actually pass/fail. Still, I would like to ace it. I have 4 more tests left in my second book, and 9 more in the third book. This can be done in around 7-13 weeks, and I'll still be crushing it. The other guys want to push even faster in these books (Chris does as well as I do, but Nash is barely passing these tests), and I just don't think it is necessary or wise. I want to keep up though. I think I can study on our April break to prepare to take a bunch of exams when we get back. Technically, I have ~34ish weeks of class left (I don't anticipate being in class that long, obviously). I don't see a reason to push faster than I want to though, since there is no way that I can finish before July-ish anyways, and even then, I technically still have to show up to class (or co-op).

Also, I should push hard. Even if I'm done with the content of the course, I can at least continue working on welding and possibly Millwright. They'd let me, I think.

I'm putting the cart before the horse though. Speaking of rocking it, and yet failing pretty hard today (but not giving up, ofc! ;P): I also did poorly on my second simulator piece today (relatively poorly). We put it together (we being Chris and I; Nash did about jackshit today, as usual), and dragged it over to the simulator to mount. We very quickly found out we had the height on the top leg wrong. I immediately knew what we did wrong. It took me a couple minutes to convince the other guys what we did wrong. We forgot to subtract from our initial measurements (we had obviously planned to do it, and we took the measurements for that purpose; we just didn't follow through on a single piece of subtraction [I feel like an idiot, to say the least {ofc, we all make mistakes!}.]). We took the top leg off, and I quickly cut and threaded it to the right size.

We put it back together and tried to mount it again. We were off, again. This time, I have no idea why we were off. We decided to cheat: to stovepipe it (however minorly). We partially mounted it (heavy mother fucker, just holding it). Nash was here to "help," but clearly had no idea what the problem was. This kid can't actually do the work. Nash did not understand what he needed to measure. He finally figured out after we were holding this heavy monster trying to explain it. It was off by 1-9/16". This part did not make sense. Our math was right given the measurements we had. The construct itself also measured out to our schematic's specifications. The only other option was that our initial measurements were wrong. 

It is weird to be off by that much and not immediately have a good explanation. My theory, at this point, that we failed to measure from the correct points on the flanges. It's my responsibility to get it right. I'm going center to center from now on, and I'm going to be even slower in my graphing. Anyways, we chopped the toe off the leg, and I did the cutting and threading (since Nash was too lazy, and Chris is legitimately worried he would continue to cut too short [which is fair; my records of our job show he continues to cut too short]). We put it back together and mounted it. It fit. The teacher smiled as I explained what we thought went wrong. He said good job and to move on.

We then started the 2" simulator stage. We drew it up and took the measurements. Cool fact, given the position/direction of the 2" flanges, we didn't have to measure the distance from the flange to the simulator backbone. Between the flanges and the floor, we could get everything we needed. It is trickier now with the 1" and 1.5" simulator stages already mounted; they get in the way of accurate measurements. We did what we could, and then we did the math. Everyone agrees it should work (consensus and commitment: go teamwork!). We went center-center on everything this time. We were careful on our floor measurements. Next time, I'm just going to pinch the plumb-bob and measure it to the pinch mark. This was one has a valve built into it. The teacher told me to "wing it" on figuring out the valve takeouts (since he didn't know a better way). Lol. Alright. I can do that.

Tomorrow, we'll bang it out. You know, I think I'd like to double check my measurements for the schematic itself yet again. Couldn't hurt.

At the end of the day, my teacher asked me if I had seen Randy. I said, yes, and that Randy gave me some books to read. He "guessed" they were history books. I'm 90% sure that my teacher knew I had seen Randy (they talk), and had probably heard from Randy himself. 

Also, this is third time I've found Harold with my stuff. It was two pieces today: my tape measure and the two-holes that I "checked out" from Tim, on loan, basically. Multiple people have experienced this. I'm annoyed by the tape measure, but I was actually a bit pissed about the two-holes. To a small degree, that's my reputation on the line if they get fucked up. I told him not to touch my things without my permission, and that included the two-holes since I was responsible for their well-being (we'll see if he's assholish enough to retaliate). The teacher, apparently, already knew about it. He had been watching the table that took our things. He gave me permission to be more aggressive about it (but I won't; there's no value in it), and said the kid would have his fingers broken if he had done that in the field. Apparently, our teacher will be giving us a serious talk tomorrow about it.






Cat crapped in downstairs bathroom. The toilet overflowed in the upstairs. Water leaked down onto the kitchen counters. It's a mess to cleanup today. Lol.
We were given our new study guide questions. I'm trying another study method (since mine is obviously not good enough). Hopefully I get the kind of coverage I'm looking for. We were told to move onto the simulator (probably because the other guys weren't even trying to study). 

We measured again because I just wanted to make sure we didn't miss anything. We did the math twice. I'm glad we thought carefully about the valve, since we put true lengths on the graph (my preference, strongly), and thus we had to do what I will call "add-ons" instead of takeouts. This was a smart way to do it. After 15 minutes, I was satisfied by our measurements, drawing, and math. So, we moved onto construction. 

They went straight for threading, while I setup the work area, gathered the materials (we are consuming all the nuts/bolts and flanges the shop has available to us to build this simulator). I cut and threaded the tiny nipples because I wanted to guarantee they were correct. They did check the threads this time (thank god). 

After we had finished the fabrication, and right before we were about to mount it, I crossed the teacher in the storage area. He had a shit-eating grin on his face. He had a valve in each hand (I wondered if and when he would introduce these, since he had hinted he would). He claimed "the engineer changed his plans, and we needed to insert them into our previous projects." I laughed.

I found a clean way to make the insertion without having to remove everything. Ultimately, I didn't even need to loosen any secondary flanges. I screwed the leg off the spiders, made the cuts, inserted and leveled, and put it back on (I thought I made a mistake towards the end of the day, but realized I was on track: I was just tired). But, we didn't complete these steps until the end because I wanted to mount our current project before backtracking to add valves to the older ones. Since I knew we could do it, we did.

We mounted this third simulator project without a hitch. It went on very cleanly. Our teacher gave us a very unique hand-made tool that he says could not be bought anywhere. He earned it at Eastman. Says it is amazing. It was quite useful for aligning the flanges. He called it a bull's penis; it looked a bit like a shepherd's staff with the end of the crook straightened out and conical. It's like a cheater-bar for alignment and holding shit in place. The 90 degree angle on it is very interesting. I'm going to make one of these, I believe.

Anyways, we then did the work for the rest. I did the math. They checked it (well, Chris did), and we did it. At the end of the day, we were told that it would have been better for the bottom valve to have been facing up (wish he said that before we built around it). Luckily, I had thought he might have said something about how one of them was off. We cheated by taking two wrenches, one on each adjacent pipe and turned together to get it placed where we wanted it. I'll try to do the same tomorrow with the bottom valve; it only needs to turn 90 degrees.

The teacher called up the company that donated the materials for our simulator. He wants to build and install a second one next to the one we have. This would allow us to make far more complex objects. I think it's a good idea. We talked about where to place it. They e-mailed him back immediately to ask for a materials list. I'll compile it tomorrow. We may be building it soon. That's be cool.

My teacher told us that we'll be doing rolling-offset screwpipe for at least this week instead of moving onto socket welds because Chris hasn't done rolling-offsets in practice (although, he has done the math). I need to make sure that Chris aces this if we are going to move on. Nash is going to be as useless as ever, I'm sure, lol. 

Nash was saying at the end of the day that he was pissed we weren't getting out early. He feels entitled to maximum breaktime. Now, I totally understand that approach in a work environment in which people are legitimately trying to exploit you. You absolutely have to fight for every inch. Our class, however, isn't exploitation (or at least not in this respect). We're here for ourselves, and we move at our own pace. I take limited breaks because I want to keep working on myself. That's what I'm there to do. I'm sure I would have made the same mistakes (or worse) at his age though. I can't say much. I try to encourage him. That said, I'm sure he will turn into another conservative capitalist monster. =/ I can't help that he's evil though. 

Also, I need to finish the gifts I'm making for my parents'-in-law to thank them.

Over the years, I've come across a lot of novel obfuscation and DRM techniques. Some are more fun and interesting than others, but none are unbeatable. Yet. 

Reverse engineering is one of the fews ways we have to guarantee that intellectual property (IP) rights are merely legal barriers rather than technological and epistemic barriers. Essentially, without reverse engineering, a significant portion of IP would be trade secret protected to the Nth degree. Natural technical monopolies would arise more frequently, and they would be much harder to break. In the technical world, these monopolies would start breeding, clumping together, and devouring the rest of the ecosystem.

Without reverse engineering we'd have market distortions ripe for an even stronger degree of exploitation, enslavement, and fleecing than we already have. Therefore, I take reverse engineering to be part of the toolkit necessary to maintaining some degrees and kinds of freedom from the exploitation of capitalist pigs. 

Capitalists are fighting back, and hard. One obvious example is the centralization of computing into vertical data/computation silos. It's hard to reverse engineer that which you never have access to (or only have minor access to). You can only attempt to understand what they do from the outside and script your own (like ~WoW private servers, but on an epic scale). You probably don't have the hardware or the human capital for it either. Hint: you can't replace Google for internet search at this point. Nothing comes close (and it's been that way for a long time). 

We must maintain our ability to understand what IP owners are doing at a technical level. Without it, we are lost. It has already begun on multiple fronts. The sky is falling. The fight is not over though. We can still win. Here is an example of when we will begin to lose the ability to fight back and reverse engineer (assuming it is even possible):

//Black-box cryptographic obfuscation//

We may get to a point where cryptography will obfuscate programs so as to guarantee that we cannot possibly have a sufficient amount of computing power to reverse engineer it. This is a non-trivial problem actively being worked on in the field of cryptography. Such breakthroughs may exist (and may have already been found by state-actors). If it ever becomes viable, there will be software that we, the people who often only access the binary at best, cannot understand or dissect for ourselves by definition. 

Imagine running a full suite of software which isn't just a bunch of blackbox binary blobs to you, but are literally blackbox binary blobs to everyone (even the experts among experts). You literally cannot know what it is fully doing, and no one can. Without the ability to reverse engineer it, you have lost control of your machine in fundamental ways. 

This will be the beginning of extremely powerful malware. But, beyond malware, the software ecosystem will radically evolve because of it. Incentives and behaviors change when technical capacities do, especially when significant power imbalances arise. This is part of that two-edged sword of cryptography. 

The Crypto-Blackbox Walled Garden is coming. This is only one sufficient cause for the death or near death of reverse engineering, at least insofar as it benefits the masses. There are other surfaces to attack. Our power equalization tools are increasingly vulnerable and may eventually become obsolete.

The future of reverse engineering continues to look grimmer each passing decade. There will be a point of no return. Our masters are busy locking us out of the fleeting utopia they are creating just for themselves.

Ivanka Trump is delicious.<<ref "1">> Even Donald thinks so. She knows it, and it seems like she's experienced it as well. Her body language towards him bespeaks a deep divide in her. I am quite convinced that Donald has raped her (to various degrees) before (yo, intelligence agencies: are you reading this?). The abductive evidence is there; the inference is clear. 

Like all of Donald's children (just like himself), Ivanka Trump financially and politically benefits from being her father's daughter. Donald's sons are mere middlemen between Donald and his businesses (and methods for making money off our government and through transnational bribes). Ivanka's place, however, has been much less obvious to me. She clearly needs to benefit strongly to justify spending so much time with her rapist. 

She has an office in the Whitehouse. She has top security clearances. She doesn't get paid. She does a job though. Nobody has given it a title, not even Ivanka. This is hilariously ironic, considering how she once organized a campaign to encourage women to share their job titles. What is this job, which can't be called a job because it is even legally (not just morally) indefensible nepotism? 

Ivanka is her father's handler. 

He is a loose cannon, a demented idiot that flies off the handle bars, and a psychopath seriously lacking impulse control. She's his caretaker, manager, babysitter, and hand-holder. In a weird way, she might be acting First Lady. She can charm that snake (in so many ways) and tame that beast to some extent. To the best of her abilities, insofar as it aligns with her interests, she keeps The Donald on task, on topic, and diffuses his insanity in meetings. She keeps The Donald centered, balanced, and as emotionally stable and calm as she can (ofc, only insofar as it pleases her). She is an anchor which loosely tethers him to reality.

Perhaps you are thinking: "Anything to try to reign him in, right?" Maybe she's the only person that can do it. I don't know.  It is unobvious how effective a puppeteer she is with her father. Thus, it is unclear how much direct power she has. More problematically, she isn't the only puppeteer. In a way though, she appears to be unchallenged, and that could be because even Donald's detractors and political enemies find him more bearable with Ivanka than without. 

I would like to caution against this line of reasoning though. Ivanka plays an absurdly significant role in our government, and she is not elected to do so. That alone makes her very dangerous. Her role is unchecked, with minimal transparency. The habit of relying upon her is forming. Her power may only grow. Perhaps she is being groomed. I wonder who she serves as a means to serving herself.

This is a very twisted version of The Aristocrats Joke.

-------------------------

<<footnotes "1" "If you are going to be evil, at least be hot. My brain can suffer though it better.">>

I fixed the valves (made them all pretty-ish). I also measured the simulator and drew up the materials list for another one. I went on to double check Chris' math; he made several errors (had to restart twice). We essentially built two rolling offset constructs today. I didn't push as hard (although, I still did the lion's share of the work). I had built them before, and I wanted to let Chris get more practice in. The teacher needed to see that Chris could do it on his own. Ultimately, however, when it came to measuring the degrees and lengths, I stepped in to get it done right. 

They both wanted to know if we would be moving onto socket welds after this. We should. I said I wasn't sure though. I know I went through several offset constructions that Chris and Nash haven't. One or two of them were fairly tricky. I didn't want to ruin the surprise for them, just in case our teacher slings it at them as well.

Funnily enough, the teacher did not perform the 90 degree rotation of the object to check both roll and rise. We had been down this road before though, and he knew he could not answer why it would be off. It's okay. After having mounted this stuff, I'm thinking it will be okay for now. There is some wiggle room. 

Afterwards, we studied for the exam. It was kind of a brief day. I learned very little, but I was happy to have the opportunity to practice and review. Hopefully it is crystallizing for me in my virtue-theoretic Fastmind.
Today was very good, although it had a weird moment.

TJ and I were waiting to see the coordinator from AB&T, Jo. Jo reminds me of the hairline lip of a number Bob's Burgers characters. She is very interesting. It not would not be just anyone who would help me. In any case, she brought me the forms I needed. Towards the end of our conversation, she asked me how I was doing in class. She was excited to use me as a case study as well (of switching gears radically). I said excellent. Talked about how I'm going with the union. We talked about the unions in general, and my goal to be a journeyman (I can only do so effectively through a union in my state). Somehow, my explanation of it to her made her quiet. I'm 99% sure she "realized" in that moment that I'm a crazy person. Lol. It's okay. She really does need to succeed, or I'd make her look bad. I'm convinced she will help me even if she knows I'm mentally atypical. Anyways, the conversation ended cordially, however, abruptly. 

TJ talked about how he was going into the union as well. I wouldn't mind working with him. Now, this man is also very interesting. Let me tell you. Been to prison a few times. Smart as a tack though for having so little education. He works hard. His life appears to be on an upward trajectory. TJ has family in the union. He has strong situational awareness.

I finished the heart. The heart just took some grinding. Since I've spent time working on stainless steel, I've developed a better spatial reasoning sense for how to sculpt. It's easier to imagine the relief I'm trying to generate. Becoming a good sculptor would take a lot of practice. Absurd amounts. The heart is for [R]. I have to thank her for taking the time to talk to me. It meant a lot. 

 I finished the chopped down log. This took more work. I had to cut it, torch it, bend it, make round plates, weld them to the tops, tack the pieces together, buff it and make my highlights. I cleaned it up. I made a final portaband cut, and then I made a mini-saw. I needed the welder's shop to help me make it. The mini-saw doesn't look great, but it works. The rest of it looks pretty cool though. 

I asked about TIG. The teacher said we had it, but that I needed to finish working on stick. That's completely reasonable. I am no where near where I need to be. I will eventually get to try it though, which is cool. I have one more set of crafts I want to finish, but I'll weave them into doing my actual training too. I want to become much better at welding. 

My teacher gave me my fourth construction job for the school. This one was simple. I made holes in concrete with a hammer drill. I then mounted warning signs about the hazards of welding without proper ventilation. I weld with the portable ventilator, except for tacks here and there.

I did weld at the very end of the day, like for real practice. I cut a long but thin plate (which is the right thing to practice on!), beveled it, and dropped a root. This was my best root yet on average. I do like the shelf, a lot. I need to try different shelf sizes. Full edge penetration wasn't there, but it was much closer. More importantly, it was extremely consistent. Now that I have something consisent, I can push it and pull my techniques and strategies, the way I practice, slowly adjusting it in the right directions. This is where I learn to really weld now.

Remember: stainless steel, thin, 60 amps, keep it deep and tight, straight up and down. 

Chris was unmotivated today. He finished two tests and called it. We'll see what he does with his Thursdays. He took a test today from the book as well, since he wasn't coming in tomorrow. I think he will likely end up just taking all Fridays off. He really feels like it is a waste of his time. In a way, he's right. We mostly take tests and clean up on Friday. By skipping Fridays, he does not miss out on shop time. Gary does the same by leaving at 2:00 every day. I will need to watch out for laziness. It will not always be obvious to me that laziness is the motivator when it is. 

The test tomorrow is apparently very difficult.
Today was short, but productive. I studied for the test. Took it. Made a 100. I was not expecting to do well considering how Chris didn't do well. I studied more than he did for this one, I think. 

Afterwards, I was told to go tack weld for Ferguson on his socket weld project (I've been dying to start socket welds for weeks). Ferguson is quite odd, definitely has aspergers (has the classic facial structure of it too, imho). His ability spatial reasoning is actually fairly impressive in some respects (he can mentally rotate the assembly fairly effectively, although he is not efficient about how often he must do it). We both fit the pieces, and I tacked.

As to tacking, I need to keep higher heat, 75ish on the carbon steel pipe. It's hard to strike the arc otherwise. The tacks looked decent enough (most of them looked better than what Ferguson and Harold had done [they've been at this for 3-4 months). I will be excellent at it with another day of practice (I had about an hour's worth today, but most of it wasn't even tacking). I will probably fling the red ember off the tip from now on. It does make it easier to strike the arc again. I'm used to burning whole rods, and I rarely have to restart. Constantly tacking requires efficiently making multiple uses of the same rod. Also, don't forget to strike horizontally, and keep yourself in a comfortable 2-handed position. Find out how to do that in all cases, positions, angles, etc.

I can see that socket weld will be fairly easy. Screwpipe concepts transfer very well. I found the takeouts part of my book for it. Cutting the pipe will be even simpler than screwpipe since we get to use the wonderful bandsaw. There seem to be two tricky parts to socket welds from what I can see. 

The first is making sure your pieces are in good shape (we recycle everything). There's so much leftover slag and weld stuck on the fittings (and pipe to a lesser extent). It is angle-grinder and even die-grinder central. Of course, this just boils down to being systematic in our gathering and preparation of materials (which I'm good at). I'll eventually have Nash do this part after I've mastered it, since it is clearly bitchwork. I've done the same on screwpipe. Since I have competitive advantage in everything compared to Nash, I should work on those tasks in which I have the highest degree of competitive advantage over him. It's the most efficient use of our time. The fact is that I perform the actual planning and fitting to a much greater degree than Nash when compared to our performances of menial labor tasks.

So, for our projects, one person will grab and prepare the fittings and flanges. Another will grab and cut pipe. The pipe can definitely make use of two people, even though it can be done by one. Eventually, we will all need to grind the last 1.5-2 inches of each end of each pipe (probably going to be a 2-person max kind of thing given our space). Label (although, this should be done at cutting time), double check, and start building. 

The second trick is making sure that everything is level. Here screwpipe concepts don't appear to transfer as well, and this is apparently where I will eventually learn to love socketwelds so much more than screwpipe. There's definitely a lot less heavy lifting work to be done, from what I can tell. For now, we would fit and level/plumb, tack once, check it/bend it, tack on the other side, check it/bend it (and sometimes rotate the assembly to do it again), then make the final tacks. If we fail, then we have to grind the tacks off and do it again. That's a waste of time. Being level is key. Putting the fittings on correctly is tough. You have to literally put the levels straight on the fittings. I do not get to rely so heavily upon having the secondary/tertiary pipes fitted to finalize my level as I do with screwpipe. I am told that buttwelds are even easier, and I can kind of see it (once someone is truly careful in their initially fitting), as there is so much wiggle room in socket welds. 

Also, I was told not to fit entirely into the back of the fitting, but leave an 1/8th of an inch space. I assume this is for heat expansion reasons and perhaps to give more options while fitting.

It will take some practice get the correct process flow down for it. I will streamline that sumbitch before too long though, I guarantee it.

Another noteworthy consideration: tacking requires having multiple people. Traditionally, the fitter "fits" the pipe and holds it while the welder tacks it. Since I'm going to be a craftsman, I will see if I can learn to do it by myself. That would be a truly useful thing to learn. I have read about alignment dogs and other tools which hold pipes in place, but we have none in the shop. It will be a place to be creative, experimental, and thoughtful.

My teacher brought me into his office before lunch. He told me that he's never had students like Chris and me before who smash through the computer and book tests  (and, from what I gather, he's never had anyone complete the shopwork at the pace we do, even though he has had actual pipefitter apprentices in his class before). It is conceivable that we will finish the 1st pipefitter book (the book after the core book) by the end of the first trimester. We are hot on the heels of the class before us. I anticipate catching up to them within a month or two. When we do catchup, I hope I won't be slowed down by them. I don't want to hold their hands and babysit. I'm going to grab Chris and make sure he is my permanent partner in this class. Your partners matter a ton. I expect this is true almost everywhere and nearly always. 

Anyways, so in his office, he told me that since we're moving so quickly through the course, he's decided to offer an "elective" portion of the course. Essentially, he wants to give us the option to do the 3rd NCCER pipefitter book (these are fairly expensive, and the school will pay for it). I think this is a great idea, and I told him so. I believe I will very quickly master the two forms of fitting I've yet to learn, and even with side projects and additional tools to learn, I will have more time on my hands than I know what to do with. The 3rd NCCER book and welding should keep me busy.

Honestly, it would be sick if I could finish the entire NCCER pipefitter's certification in less than a year. That's probably dreaming though. I'll do what I can, eh? I think I need to ask for the study points in advance of our time off in April. I want to cover 1-test a day in my week off. That's totally doable. It would be great to come back and have a test-taking day. Jumping ahead half a book or more would be a worthwhile use of my time off. 

It is is clear to me that I have much to learn. I'm smashing through the easy beginner stuff, but the world of pipefitting is still quite large (not as large as Philosophy by any stretch), especially when you take up the adjacent fields. 

We talked about the history of pipefitting and how little it has changed over the years. I think that is fascinating. I have to say, I'm kind of pleased to be in a field that isn't likely to make huge transformations. I like learning things that will last me for a long time. It is one of the problems I have with applied computer science. 



I've been dancing around this family for a while. I've noted many times how much power Bannon has, and I've even touched on [[Cambridge Analytica|2017.02.14 -- Automated Memetic Warfare]]. Both are funded by the Mercer Family.

Essentially, the computional Hedge-Fund Manager Robert Mercer and his daughter Rebekah are part of the core reason for how Trump was elected president. They are dark-money demagogues. Think 21st century Rupert Murdoch meets the Koch brothers, but quieter and far more intelligent in some respects (but just as crazy). They may be the most successful supporters of the Alt-Right we've seen so far. They obviously know how to spend their money effectively (except for that whole Cruz thing). They are incredibly talented at betting on the market, and it seems like they have the knack for political betting as well (not these two are that far apart). Their goals are terrifying, and they are sadly very successful at achieving their goals. 

Let's see, they:

* bankrolled Bannon and Breitbart. 
* bankrolled Kellyanne Conway's superPAC.
* injected David Bossie from Citizens United into Trump's campaign team.
* invested in Cambridge Analytica, and are clearly committed to memetic warfare against the People of the world.
* painted Hillary as corrupt; produced the hitpiece book entitled //Clinton Cash//.<<ref "1">> 
* have masterfully herded, converted, and redirected the growing insurgency and discontent with the hyperclass towards red herrings and into the arms of Trump.
* had Rebekah planted in Trump's transition team.

 The Mercer's, alongside Putin, are in non-trivial ways responsible for the mass psychosis we're experiencing in the United States (and perhaps the West at large). Of course, controlling POTUS is not the same thing as controlling Congress itself (the much more powerful political body). I have no idea how much power the Mercer's ultimately wield, especially considering how effectively private and secretive they've made their lives.

--------------

<<footnotes "1" "Let me be the first to throw stones at the Clintons. They are corrupt. However, we should still be worried about the Mercer's fairly absurd propaganda. I believe the Clinton's are war-criminals, and murderers too, but Bob Mercer thinks they are murderers in the more standard sense too, lol. Maybe he knows something I don't (and he very well could), but the evidence isn't there.">>
Did the normal stuff today, but also tried to fix the dryer. I took the front off and cleaned it. I think the heating element or something is wrong. I picked up a cheap multimeter, and I'll try to and figure it out. Will probably ask for my brother's help/thoughts. I also visited in-law family. It went very well. I met Jude's cousin, a 42-year-old programmer Democrat. Interesting guy. He's hopeful. Silly man. Still, obviously intelligent.
It's always sad to see that Orwell and Huxley can both be at least half right at the same time. I tend to cover the Orwellian perspective the most, especially since I consider it the most coercive. But, that is not a complete story. Huxley's vision has enormous explanatory power as well. Huxley was right about the way in which humanity continues to trend towards pleasuring ourselves. His understanding of the systematic effect of the mix between technology and egoism on the world at large was prophetic, even if not always accurate.

As someone who has emerged from severe depression (or still is emerging), I can completely see the moral and prudential viability of taking [[Cypher's Choice]] in The Matrix. Embedding ourselves in experience machines is arguably what we are all trying to do in the first place. However sad it may be, it appears to be a morally permissible (if not obligatory) option. Arguing against experience machines, in my experience, rests upon unjustified intuitions and assumptions. I've yet to see an argument that remotely comes close to diffusing the virtual bomb against reality.

Seriously, what is the purpose of life? To be happy. Right? We're going to beg the question here; it's innately axiomatic (I am fully aware of the is/ought distinction, and I still take this argument to be valid). Any sufficiently advanced species in the universe has likely been egoistically motivated through evolutionary processes. I don't mean this as a natural fallacy either. Surely we can be justified, insofar as metamodern justification is even plausible, in at least many cases of building things around us that augment and replace reality. I think you already accept this to some degree, you just don't realize the implications of taking your principles to the Nth degree. We maximize our utility through tools, avoid danger and pain, and pay the lowest cost for the highest systematic pleasure returns. Virtual reality seems like an obvious space in which to live the kinds of lives we want to live without paying the physical costs (many of which are impossible to pay) of making such a world "real" in the flesh. 

It is far more price-efficient to derive meaning and satisfaction from virtual reality than reality itself. Our species is evolving to short circuit the evolutionary drive for survival and pleasure through standard, brutal reality. Instead of accepting and living in bare reality, we use drugs, tell stories, play games, live in virtual worlds, etc. to replace our usual lives. We've been making experience machines for ourselves for a very long time. Psychotropic drug use is older than written history, even the lower animals play games, stories might just definitionally be the human experience, and religion is also an experience machine (an opiate of the masses). As we evolve and innovate, we discover more effective and efficient pleasure chemical inducing practices. 

Experience machines are the potent means to our ends as a species. The grass can always be greener, that is the essence of hope. Hope is the belief that this is not all there is, that we can be happier, more purpose-filled, meaningful, content, joyful, and satisfied. Experience machines provide the firmament for worlds with greener grasses. This is what enlightenment is actually pursuing. Use tools to make life easier and avoid the hardships of nature. Take your Soma because you seek bliss. Immerse yourself in virtual worlds, in soap operas, in games, in religion to be happier. Perhaps it will only be a matter of time until we have the technology to rig our brains with neural laces or a brain fungus to permanently exist in a state of sublime orgasm.

I've given you the theory, now let us inspect the application we see today. Video games are but one profound example of this systemic contemporary Brave New Experience Machine which devours our first-world youth. Now, growing up, I heard plenty of bullshit about the futility and uselessness of video games. The truth is more complex than that.

I think video games are wonderful tools. Video games are microcosms. They even teach us about the real world, give us narratives and other worlds to explore,  provide us characters and communities of RL people with which to empathize and connect to, and even improve dexterity, problem solving, and technical skills. Hell, I'm literally trying to play life like a video game, that's how convinced I am by the positive influence that video games can have on our lives. I was a proponent of video games long before they were completely mainstream,<<ref "1">> but even I'm willing to point out their flaws.

Like any drug or skinner-box activity, addiction is a fundamental problem. If pleasure is fundamentally what drives us, the shortcut that video games provide to pumping the pleasure center of our brain can easily warp our behavior so as to provide us short-sighted, instant-gratification driven, poor executive functioning. It's hard to be wise when you can merely push buttons for pleasure. It's hard to engage in longer-term thinking. However, I want to point out that while video game addiction is quite real (you're listening to a survivor), more and more I see video game dependence as not being negative (standardly addictive) because it is literally the best utility-generating option for too many people.

Many rational utility seekers (to various degrees) are withdrawing from society to play video games. They do not participate in our economy. It is sad that the best method for them to maximize their utility is through our poor experience machine video game bubbles. I'm not here to victim blame though (I think it would border on fundamental attribution error). There is something logical about their approach, a utility-maximization we should appreciate.

The fact is that work is generally a means to an end in our world. Few have jobs they enjoy or find intrinsic value in. Thus, for most folks, the end is all that matters. The means is variable. If being unemployed can achieve acceptable ends, then why work? Again. I'm not claiming they are "lazy bums" or some other conservative lunacy (I say it again to you conservatives: please KYS; we'd all be much happier without you). Not working means you have more time to enjoy the luxuries you do have. I see these brave souls as sucking the marrow out of life, of making do with their predicament. These are utility-maximizing rational tradeoffs.

No doubt, the long-term consequences for their lives and our human capital will be severe. I think this is the hikikomori hope though, however bleak it may be. The game of life is rigged against us, and the end appears to be coming. There is a threshold at which it is hard to justify empathizing with your future self or humanity. Assuming we will fail as a species, I guess I'm saying: we need radically better experience machines. I'm coming out as a transhumanist in prescription, but not predictive description for the masses.

Huxley, yet again, was a visionary.

--------------

<<footnotes "1" "I don't mean this as some useless hipsterism or appeal to authority.">>
* How has our health been this week?
** 1uxb0x
*** Good.
** j3d1h
*** Blowing her nose quite a bit.
** k0sh3k
*** Fine. Evened out energy levels. Not unduly tired or dizzy.
** h0p3
*** My fingernails have been giving me a lot of trouble. 

* What happened last week? Have you been happy this past week? Why or why not?
** 1uxb0x
*** Happy about his friends coming back. 
** j3d1h
*** Played with some new friends. Pretty happy overall. Felt days were fast paced.
** k0sh3k
*** Yes. Very productive, even despite having logistics problems. Several students told her they were glad she is a librarian at the school. Had fun with her parents.
*** Decided to use a daily schedule bullet journal. 
** h0p3
*** Was happy with my own work.

* What will we do this week?
** 1uxb0x
*** Keep his desk clean. Zero toys.
** j3d1h
*** Finish MC VM.
** k0sh3k
*** Fix Resilio
*** Put bullets into tiddly
** h0p3
*** Use the multimeter to check which part of the dryer isn't working. Find a place to buy it cheaply. If we're lucky, we'll have the part in time to fix the dryer.
My multimeter is not functioning. It was a cheap one. I got what I paid for, according to my brother. That's okay. We'll use the laundromat this week. I've purchased another multimeter, it will be here Wednesday. This one is highly rated amongst users and it was still fairly cheap ($18). I'll find out on Wednesday what part I need, and I'll call shops around the area to see if they the part I need at a reasonable price. If not, I'll buy the part online as well. It will be at least another week before I can fix this. That's okay.
j3d1h has completed most of her content. 

* She needs to work on more verbose freewriting.
* She must explain more of the content of what she learned for Spanish.
* She needs a meaning/purpose statement for each piece of writing she covers in literature.
* She wasted her time on problem solving. The thing she should have accomplished in one day took her a week, and she still didn't finish.
* She needs to structure her wiki, and follow through on the feedback she's been given.

1uxb0x

* Graft old journal into the new one
* Morning routine should be honest
* He must put dates inside the individual subject journals. The point is to see a timeline of each subject.
* Math is lacking an explanation of the pages and book covered alongside the content of what was covered.
* Curatio needs to be organized and structured.
From ~1940-1970, productivity and hourly wage compensation tracked each other. They grew together. They were married together. In 1970, they got a divorce. Wages stagnated (haven't really moved since then) while productivity continued to climb higher and higher. That trend continues today. I believe there are two fundamental causes for this divorce:

# The beginning of the information age and the rapid growth of labor automation.
# Psychopathic Randian Libertarianism's increasing corruption of the Hyperclass which serves to fight those seeking equality, fairness, or to not be enslaved.

Paired together, the Hyperclass continues to centralize their wealth, power, and monopolistic stranglehold on technologic progress. They reap an exponentially increasing lion's share of the rewards. Real Productivity is rising due to automation, but only a fraction of the world is ultimately benefiting from it in the longrun. The number of people who benefit will continue to shrink and shrink. The global utility equation is a crisis. When we centralize the control and profits of automation and technology into the hands of fewer and fewer people, we will continue to see this divorce between productivity and compensation.

Let's be clear. I'm not blaming automation. That's the fucking point of technology throughout the history of the //homo sapien// species: make life better.<<ref "1">> I don't mean just that we get to buy smartphones and medicine (oh wait, we can't afford that anymore). Of course, some technology does eventually benefit the masses. I mean more than that. I mean not only that we have nicer things, but that we all directly get be productive and reap the rewards of being productive with technology. Insofar as that is logistically difficult, then we need to enforce it through redistribution. It's the only fair thing to do.

We should not allow only a tiny select elite to reap the rewards of being productive with technology. Talk about innovation incentives all you want: you're either an //idiot// or a //psychopath//. It's clear to me that publicly funded innovation is central to our progress. The privatization of the "last mile" of progress just gives away the public's hard work and investment into the hands of the few. They've robbed us!

No human has a claim to own non-personal data, concepts, or any other intellectual objects.<<ref "2">> IP rights must be abolished; it is strengthening our masters beyond their wildest dreams. We are supercharging the Hyperclass with dangerous tools. They are snowballing power against us. They are draining us for everything we are worth before they finish building their own geopolitical structures (of course, "legitimately" government backed, legislated, adjudicated, and military-police protected), close us out, starve us, and enslave us "with our consent" when we come back begging. We will only pass through their guarded gates when we are willing to accept any power dynamic on their terms (read: master/slave)  for the sake of our mere survival.

In the ultimate analysis, automation is useful to us as a society at large only insofar as we maintain political and economic systems which can fairly distribute the value of technologic progress. Power imbalances must be answered because they are a threat to any proper implementation of the Veil of Ignorance. 

We must stop them before it is too late! Are you listening!?! Our time is running out. This is not like the other cycles of human and political history. Marx was wrong guys!<<ref "3">> He was so fundamentally right about some of the most important concepts about humanity that we ever know as citizens, but he was still wrong about this. Marx was a human visionary, but not a technologic one. I know the difference. 

Marx had no idea how profoundly efficient and effective our technology would be, how influential it would be, how much power and raw ability it would give the future generations. Even understanding the broader changes in society (narrow and detailed being even more impossible) at every level in The Earth Stack is already beyond our comprehension, and we have over 130 years at our advantage. He could not see this pattern, and we shouldn't have expected him to. 

The fact is that technology has and continues to progress to the point that the powerful will be a position to permanently enslave the rest of humanity. The means are just having the right tools and the will power, and both are coming to fruition. 

Since I don't blame technology, then I blame the people wielding it and those who enable our masters. It's time to take back our compensation. This the socialist's face of "Taxation without representation is tyranny."

<<<
Kill the masters.

--Grey Worm the Unsullied, Game of Thrones
<<<

-------------

<<footnotes "1" "That goes for plenty of other species as well.">>

<<footnotes "2" "Where personal has to do with what is standardly called 'private' information, but I worry that the word 'private' has been so thoroughly corrupted that only 'personal' can clearly allow to point out the obvious here.">>

<<footnotes "3" "I imagine you're thinking: 'No shit, sherlock. He was wrong about everything.' You're an idiot.">>
Today we took a test on Oxy-fuel cutting. It was a long chapter. It wasn't too bad though. I thought we'd be moving straight into socket welds. Nope. Wrong again. /sad-face. The teacher decided to have us go back to laterals. This time we did a giant pipe, 4-on-10 lateral. I honestly didn't do much besides the math, planning, and drawing on the material. Nash and Chris wanted to do the cutting and grinding. Alright (I wish I could just do it all; I enjoy it). I did the finishing touches on the bevel (although, it is unclear to me why be beveled in this section other than the possibility that we are reinforcing it?) because Nash doesn't quite have it down. One interesting part of the planning was that we use schedule 40 for the branch pipe after having decided not to use the much thicker schedule 80. I checked the bottom pipe (the trunk?) and found it was schedule 20. The teacher confirmed. It didn't interfere with our measurements though (or, I hope it won't). Remember that Outer Diameter is the nominal size after 12 inches, but Inner diameter up to 12 inches.

I also helped Ferguson a bit on his socketweld project as I wandered around waiting for Nash to get through it. He lacks both an understanding where to grind and finesse with the grinder.

I then hammered marks on the soapstone rings I drew with Chris into the large pipe. We are fabricating a reinforcement ring for this lateral out of the part of the large pipe. Remember that reinforcement rings are 1/2 of the branch pipe diameter. To make this ring, we need to cut it very cleanly. Thus, we had the chance to put our theory into practice by using the oxy-fuel cutting torch today. The teacher was slightly miffed that I was working ahead (instead of getting him, but he was quite busy), but my work was fine (slightly tighter than he'd have liked on the inner circle). Anyways, we got it set, and so I went to get him this time. I told him we were ready to cut. The teacher said, "go for it." Lulz. Well, I've done it a few times, so fine. I taught the guys how to use it (I think the teacher should have taught them to use this very dangerous machine, not me). 

They were scared as fuck. Shaking. Nash has an admitted phobia about it even. He wouldn't even cut except the first time. I understand being scared of it. This thing is really fucking dangerous. Anyways, I taught 'em on some practice pipe to try it out. I then cut the center piece out of our primary piece, since it needed to be the most exact of the cuts (I did an okay job; the problem was that I had to freehand one section). Also, don't forget to make yourself comfortable! Think of it as welding, but way more dangerous. Be comfortable. Maximize your fine-grained control. It didn't help that we were basically on a timer because we were running low on oxygen. Afterwards, Chris cut the outer loop. It needs some grind work. I'll jump on it asap tomorrow. Afterwards, I guess we'll tack. I'd love to take a shot at welding the damn thing. Might as well though, right? If this is just practice, it's the perfect time to screw it all up (because, in a sense, it doesn't matter if I mess up). 

On a sadder note, Connor is finished his work today. He left, for good it seems. I said goodbye and wished him luck in life. 
I read some of the Union history book before class started. We jumped into our project. They guys immediately went for grinding. Since there are 3 of us and only 1 piece, I decided to try and find something else to do. I decided it would be reasonable to cut the final hole in the "trunk." I asked my teacher to make sure this was reasonable. It was.

So, I drew the hole (outside and in, but in is what mattered). I used the hole-puncher (wears on my hands, I tell ya what) around the bright soapstone circle I made. I then grabbed the oxy-fuel cutting torch and cut it out. I didn't go too close to the line. I'd rather grind than completely fuck it up on the initial cut.

I ended up using an actual grinder to do the majority of the shaping on both pieces. Nash and Chris were lazy today. That's fine with me. I'll take the practice. I'm going to be excellent at this. The inner edges were tight and hard to grind cleanly. We eventually found rock grinders that did the trick (I forget the exact name, but they are literally made of a rock-like substance). I thought I may have ground the reinforcement plate down a bit too much. Turns out, the teacher said it was just right or that in the field I'd find I may need to go even further.

They went on break, and I finished it. The high-lo was clean. The pieces fit. I was pleased.

Afterwards, I asked my teacher if we could actually try to weld it (and not merely tack it). I knew my teacher was running out of things for us to do (I saw his wandering), and it's clear he doesn't want us to move onto socket welds (I think he knows we are going to smash it). Since I'm less interested in hashing content I feel very comfortable doing, I'd rather work on things I suck at.

Further, Nash had been saying all morning he wanted to weld. It seemed like a good thing to do. Ultimately, Nash didn't really want to do that much welding. He wanted to screw around for a few minutes posing as a welder-in-training. He didn't really want to practice. The welds took hours. Chris did some, but he was clearly discouraged as well. I was doing half and letting them do the other half. I ended up doing the vast majority of it. Not a problem for me though, lol. This was some fairly expensive jumbo (as far as the shop goes) pipe to be practicing on. I doubt I'll get the opportunity to do that often.

As to the weld, it was tricky. Pipewelding is its own art/subfield of welding. I have much to learn. I fucked up grinding a non-root bead. I didn't realize it was a no-no. I don't see the difference between the root and others on this matter, but I'm going to take my teacher's word for it. He may not have explained why, but at this point, I'm sure he correct. It was very difficult to make clean welds. I tried several techniques. Eventually, I went with the large rods for the final caps. The teacher was pleased enough with them. More importantly, I was pleased enough with them. It wasn't perfect. It wasn't even respectable for a professional. It would have worked in a pinch though, I tell ya' h'what.

We also got our study points. I'm about halfway through them. We were talking later in the day about how we have 3 more books to complete after this one. I need to keep pushing hard. Certifications, homie: get 'em. I need to find out if there is an NCCER practicum aspect of the curriculum. Basically, I would be unhappy going through the extra books not to be certified (although, I'd still do it). 
How are you going to read this? 

I don't know. 

I hope you will read it through many times. I hope you will inspect it from every angle. I hope you will carefully weigh my words. I have faith that you will.

Please take me literally in your reading. I'm convinced I mean exactly what I say in this document. This document has been carefully planned.<<ref 1>> This is the best explanation of my thoughts that I can give. It's the best way I know how to say it.

This journaled wiki-letter is odd.<<ref 2>> I feel like I need to apologize upfront about its oddness. It is often the case that I don't know what I need to say to people or how to say it. I hope you do not take me to be condescendingly preaching to you, snowing you, or acting like you don't know what I'm talking about. You may already know most everything in this letter. I know you are brilliant people. I hope you are not offended by it. Admittedly, I don't know how you are going to respond to this letter, and I take that to be a strong sign that I have a poor [[theory of your minds|Theory of Mind]] in some crucial respects. It is a result of being [[autistic|My Autism]].

Again, this letter is odd, and communicating this way is just awkward. To some eyes, it may even be cringe-inducing. I'm sorry for that oddness and awkwardness. It is the result of quirky (to put it generously) communication and social ineptitudes and underdevelopments in me. In tragic ways: I don't know how to talk to people. It is a deficit that I'm trying to make up for, and unfortunately for us, this is the only way I know how. 

I realize that formality in a letter seems weird and impersonal. I mean zero offense by writing you a formal letter (quite the opposite in fact); if it offends you, then I am sincerely sorry. This is me taking our relationship seriously. I am giving you what I consider to be my best form of communication (that doesn't make it good), where //I literally say what I think as carefully as I can//. I am prone to very poorly express what I think or mean otherwise. 

It must be said that writing often lacks the innate emotional and guttural aspects of speaking in-person (it fails to activate particular faster-acting parts of our brain in the right way). Writing also lacks body language, auditory cues, vulnerability, and even some feeling of authenticity that in-person conversations seem to have. Writing comes off as passive-aggressive and feeling too controlled. And yet, writing is sometimes the most effective, useful, and likely to succeed communication option in many contexts. This may be one.

Reading and writing give us a chance to dwell on the particularly vexxing aspects of the intellectual objects at hand. It enables us to evaluate in an emotionally-detached way, which is sometimes necessary. It gives us the time and safety we need to create hypothetical spheres in our minds to test and prod a theory or concept. It aids in our analysis and bias removal. It gives us the chance to think without having to come up with a response on-the-spot as we must in-person. Reading and writing allow us to be reflective in a necessary way.

Revisions of this letter caused me to formalize it (and move to the wiki). Over the years, I have found formal writing to be my clearest mode of communication (that doesn’t make it clear though) because it gives me the chance to piece together, structure, translate, and nest fragments of emotional and complex thoughts lost in my intuitions.<<ref "3">> I get to ask myself: “Is that saying what I really mean?” 

Tools like wiki-pages, parentheses, and footnotes provide the side-conversations, contexts, and worthy tangents I need to expose in order to express myself. Sometimes, when I say a word, I unknowingly have a lot of specialized meaning packed into it, and the wiki-format helps me see what I need to unpack. Formality allows me to control my emotions, to clarify myself, and to have a better chance of conveying the bare kernel of what I really think. Writing this wiki-letter is the best space for me to draw out my reflections for you.

Ultimately, I am not an innately skilled communicator (this isn't to be uselessly self-deprecating). It is just obvious to me. I know what it feels like to be naturally talented at something, and communicating isn't that for me. In my eyes, there is a huge gap between what I understand/experience/feel/cognize and what I'm able to convey to others. That gap is there for everyone, but I think the proportionality of the gap is simply larger in my case than it is for most folks.<<ref "4">> In my eyes, there are certain kinds of people who can say what they mean, who can explain everything they know, who express themselves in a way that suits others in a fitting way, who don't have a major gap between their innerlife and their outerlife (which includes what they can effectively communicate to others). I wish I could do what they do.

For starters, I sometimes lack the social programming necessary for gutterally-manipulative rhetorical skills used to reach the hearts of people.<<ref "5">> I also have a difficult time connecting the dots (and knowing which dots I need to connect for others), explaining my train of thought (while following a set of social conventions which seem foreign to me), and essentially, providing a detailed and well-organized piece of writing which transmits the representation of my thoughts into the minds of others. Whatever skill I have is not innate and programmed in me, but the result of hard work (I don't have the opportunity to rely upon a fully-functiong faster-acting part of my mind right here). No matter how much I practice it, I will significantly fail to convey the web of my real thoughts.<<ref "6">> I think this is the result of [[autism|Autism]].

I’ve found myself unable to appropriately transmit my thoughts to you. I rely strongly upon my subconscious intuition (which is well-trained in some ways and so poorly equipped in others), and unfortunately, the result is continually failing to make myself explicit to you. I’m hoping that through writing this wiki-letter I will succeed where I have failed in-person, but I recognize that I may still fail. 

So, I'm asking you to give me a chance to show you what I mean. Try to understand. I beg for your emotional and intellectual [[charity|Charity]] because I have taken risk trying to reach out to you. I think having the chance to study my carefully structured communication will give you insight into the theory of my mind and further enable your [[empathy|Empathy]]. 

Finally, I write with love because I’m too much of an asocial animal to effectively communicate what I need to say in-person. I hope you can hear me. I hope this letter makes sense.

---------------------------------------------

<<footnotes "1" "I’m committing what is conventionally an error by having the main body of a letter as the skeleton, and using wiki-pages and footnotes as the meat of the supporting argument. The goal is to have the plainest language essence of what I mean in the main body while affording us the opportunity to clarify that plain language with technical or topical depth outside the main body of the letter.  We can't afford to have a linear conversation at this point, so please bear with the medium. I hope you see the merit of the choice. If there is a left-to-rightness in the reading order of this document, I suggest reading it from top to bottom with footnotes (taking care to read the entire page), then exploring links on that page in the same order, and taking care to understand each link in the context of the paragraph and sentence that linked it. Think of it like having a bunch of side-conversations which branch off the main letter. If this article is the first link you've explored and you have already read the main body of the letter, then you are following the intended order.">>
<<footnotes "2" "I don't want to give you a wall-of-text that feels like a prison (for my writing+thinking style or your reading+thinking style). I also don't want to lose the distinct sincerity and simplicity of the plainly worded main body of the letter. Hopefully, the wiki-letter format helps in these respects.">>
<<footnotes "3" "Unfortunately, sometimes I am caught up in my internal frameworks and systems, and I regretfully don't have the energy or capacity to emerge and/or appropriately explain as is often necessary. I'm deeply inadequate in at least this way.">>
<<footnotes "4" "Again, not meant as some delusional humblebrag.">>
<<footnotes "5" "As an example of this rhetoric manipulation of our 'lizard brains,' I see makeup and dressing-up as obviously irrational (in a particular a way) yet effective in communicating and dealing with others in the world (thus rationally instrumental in another way). I do recognize that some people claim they wear makeup and clothes because they have a personal sense of style, an aesthetic of their own, and they enjoy art and beauty. I do not believe these typical human behaviors, however, stem entirely from a desire for artistic expression. Rather, that is likely a confabulation, and instead people have convinced themselves to do these things because they have subconsciously recognized the social utility and mobility in these behaviors. Crucially, appearance is usually morally arbitrary (i.e. Jesus really wouldn't care, and if we are all being ideally moral, we wouldn't either.). Yet, there are pragmatic (borderline egoistic) reasons to put on your war-paint and dress-up, and that's because people won't respect your personhood (sometimes conceived of as human dignity) if you don't. From a utilitarian perspective, one must manipulate lizard brains (the hearts) of others to get them to do the right thing for you (I still find it gross from a Kantian perspective). In any case, I lack these skills, and I have a justified revulsion to certain aspects of them. I still need them though.">>
<<footnotes "6" "Again, we all have this problem, but I think some experience it to a greater degree than others">>


Hello world. I am [[h0p3]]. I am rebooting my life. Sometimes life feels like an impossible task, the //Non sequitur// of //non sequiturs//. I am not stable, but I feel certain I need hope. Hope must be the zeroth of axioms. Hope is the spark of autonomy. It is who I am and who I will be. There is a fire in my belly, and I am hungry again. I must find the musical signal in the noisy chaos. I am an existential beast, and this is the Cartesian [[nexus|Nexus]] of my gritty unification. ("Bootloader complete!") Welcome to my wiki!<<ref "1">>  

I'm not sure how to define this wiki. This is my tiny corner of the internet. It's basically a semi-formal blog in wiki format that I use as a stream-of-consciousness journal and thought-sandbox. It's a collection of [[projects|Projects on this Wiki]] and narratives of who I was, who I am, and who I think I should be.<<ref "2">> This wiki is an application of those famously axiomatic, aphoristic maxims: "[[Know Thyself]]" and "[[Virtue is Knowledge]]." I'm here to examine my life (and I hope to find it worth living).

Okay, why a wiki? 

Well, the dimensionality and programmability of this wiki medium is well-suited to the way I think (imho, the way we all think [maybe there are better tools]) because:

 
# This wiki allows me to nest the web of my thoughts, beliefs, desires, feelings, definitions, inferences, theories, paradigms, etc. in a non-linear way.
# I can mirror my [[reality map|Reality map]] onto these wiki-pages; i.e. the wiki allows me to reify and consciously object-orientify my reality map. 
# This is an attempt to isomorphically link my reality map to a representative set of words that I can more objectively explore.
# It gives me a detailed and structured self-shadow for analysis and restructuring; it is an existential mirror I can gaze into.
# It's a therapeutic mind-mapping and pattern-recognition tool; it is a vehicle for philosophical meditations. 
# It is existential equipment for me;<<ref "2.1">> it is a lifetool for living a contemplative life.

This wiki has opened up a better way to express myself in self-reflection. While I'm still figuring out how to harness this self-reflection, and I don't yet know the direction of this wiki,<<ref "3">> I do at least know //why // I am learning and using this existential equipment:

The goal of this wiki is to make myself explicit to myself. I'm here to have a conversation with myself. I'm creating an evolving communication feedback loop between myself and this wiki. In an important way, this may be just what [[conscious experience|Consciousness]] is like (although, traditionally entirely in one's mind), and I want to make sure I afford myself the opportunity to think about my thoughts on a higher order and to more objectively inspect the narratives I tell myself. This wiki is where I get to hear myself think. I want to learn from my own writing.

Writing this wiki gives me the chance to openly evaluate my own definitions, feelings, intuitions, and the consistency-levels in my web of beliefs and inferences. In here, I am compelled to serialize my internal data, transfer it onto these pages, run analysis algorithms on it, and rewrite these pages (rinse and repeat). I hope I am writing a "philosophical program" to teach myself the results of my analysis, to hold my analysis accountable by opensourcing it, and to see further in myself. It is an experiment in public consciousness. Importantly, I'm making myself explicit because I'm searching for epiphany, paradigm shifts, and catharsis. Ultimately, in making myself explicit, I hope to shape myself, to empathize with myself, and to make myself happier through reason. This is as much a practical exercise as it is a theoretical one. I desperately need it too.

I'm experiencing severe existential crisis and depression, and I have been for a while.<<ref "4">> I've been thrashing around and drowning at sea while trying to build an existential liferaft from nothing but myself. I hope I have found the right [[metamodern|Metamodernism]] vehicle to save myself from drowning; I think I have. This wiki is a lifetool; it will help me build that liferaft. I have disintegrated, and I hope this lifetool will aid in my reintegration. 

This wiki is meant to be an existential laboratory, a safe space where I freely deliberate with myself, where I peel myself apart through analysis and integrate myself through synthesis. Here I attempt to systematically weave the weft and warp of my intuitions into a consistent and meaningful whole (for myself). I will escape my crisis by consolidating and shaping my personality or reality map into a new (improved, happier) version of myself. I will collect myself, organize my internal structures, focus, and redirect myself. I hope this lifetool will help me existentially reconstitute myself. It sounds grandiose, but I really am in the fight for my life.

So far, I have been living for my children.<<ref "5">> As much as I want to die, I can't do that to them. They need me, and I can't help them if I'm not there for them. I care about their lives. Their happiness is my happiness. I do care about my happiness. I care about my life, and that's why I write this wiki. The hardwork that goes into this wiki is meant to benefit them, and thus as a means to my children as my ends, also the real, authentic me: the "me" identity which persists through time. I am here to empathize with and help that person.<<ref "6">> I need it.<<ref "7">>

Unfortunately, exactly what counts as me is still not clear (to me [lol, no but seriously: [[Know Thyself]]]). Personal identity is a very tricky set of metaphysical and metaethical problems. We all have common sense understandings of it. Of course, from an instrumental perspective, we simply must have at least some common sense intuitions about these matters to be practical and live in the world. Obviously, just because we have a common sense view doesn't mean it is correct or justified (nor have I established anything categorically normative so far). Unfortunately, [[intuitionism|Intuitionism]] is an inescapable quagmire. It is part of our [[human plight|Human Plight]].

From my research and introspection, it is my opinion that human minds are not monolithic, but rather they are the result of multiple minds (or mind-like processes) joined in cooperation with each other.<<ref "8">> In particular, our brains have a strong regional divide in them between what I call the [[Fastmind]] and the [[Slowmind]].<<ref "9">> The Slowmind is found in our frontal lobes. The Slowmind is our primary CPU. That's where the grind happens. The Fastmind is the storage unit of our intuition data (where we store the rainbow tables of our Slowmind's grind). It is where we store, habituate, and train our fastest deep learning neural networks; it is where virtue-data is stored.<<ref "10">> This is the place in the human brain that virtuous experts rely upon; it is the [[submind]] they query to intuitively come up with the right answers in the blink of an eye. We all do this, and I believe I rely heavily upon intuition as an INTJ. 

I am convinced that the Fastmind is composed of different [[Intuition networks]] which may themselves be minds of sorts (or at least contain the content of our reality maps, the gutteral data input to our Slowmind algorithm). These intuition networks can sit in conflict with each other, and I believe at least two of mine are at war. I refer to one of my intuition networks as the [[Redpilled Intuition Network]] (RPIN) and the other as the [[Kantian Intuition Network]] (KIN). My intuitions are deeply incompatible with each other: it's why I feel ripped in half. The cataclysm between RPIN and KIN has been the epicenter of my existential crisis.

I can see the collision between my competing intuition networks; they are the tectonic plates colliding on my reality map. I must find the answer. I must find the antidote. I am in a race with myself to diffuse the bomb inside me before I self-destruct. The core of my computer network is crashing, and I have to hack it back together in this space. I must compatibilize them. I must find peace and agreement between them. Hopefully, I will be able to meet myselves halfway in this wiki. I must find the anchors to which both intuition networks can tether. I need to let the collisions between my competing intuition networks happen on the pages of this wiki rather than in myself. I can feel detached from it, at least a smidgen. I need that space to solve the problem. This wiki is a scaffold around myself, an operating room. Paradoxically, I am the operator(s) and operatee(s). Through self-surgery ("scalpel!"), I must unify myself. I must rewrite my lifestory and stitch together who I was and who I will be with someone I can accept and empathize with.

I hope that having a conversation with myself will be the real fix. In addition to the standard evolving pages of this wiki (and hopefully myself), there will be a unique dialogue in this wiki. I will have an overt philosophical and practical dialogue between myselves; I will engage in the Platonic tradition by animating my [[RPIN the Psychopathic Pragmatist|RPIN]] and [[KIN the Empathic Idealist|KIN]] selves as characters. RPIN and KIN will engage in an existential [[dialectic|Dialectic]]. It is a kind of roleplaying with or in myself, a way to offload myselves into a hypothetical social sphere to inspect. RPIN and KIN are virtual machines that I'm hosting, and I am the penetration tester (I realize the analogy is far from perfect). Sometimes I may need to be an observer, like I would watching a movie or reading a book, and think about these characters from a dissociated standpoint where I learn to empathize with myselves (sounds dangerous, [[Operatoree]]). 

Sometimes I feel like RPIN and KIN are on my shoulders; RPIN is the devil, and KIN is the angel. When I can't resolve the conflict, when they don't agree, then I must choose one. How do I know which one is actually correct though? I don't know. I have to try to find an answer. It is an awful, weird feeling to be so unable to trust yourself. I must identify and empathize with my persisting identity, then I must empathize with these characters, and maybe help them empathize with each other. If I cannot convince them, then I have to empathize with the need for the conflict in myself. I'm hoping this is how I can heal myself.

In my self-reflection, I hope to engage in a process of respectful internal adversarialism which will help me logically, rationally, kindly, and empathically resolve my internal conflict. My competing intuition networks must find peace with each other. My mother says that one mark of a genius is the ability to simultaneously hold two diametrically opposed ideas (despite the irrationality of a literal interpretation, there seems to be a ring of intuitive truth to the spirit of her claim). Unfortunately, I can't hold on much longer (I'm just not that smart). My only hope is to weld these opposing ideas, the //Doxa// of //doxa// and the //Doxa// of //praxis//, together inside the crucible of this wiki. I don't want to be a genius (or even half of one). I just want peace and happiness. Please. So, paradoxically, this is me throwing my gauntlet down at everything, including myselves. I'm going to unify myself or die trying. This is the empathization of my internal war for the sake of self-peace. 

I hope that by mirroring my reality map onto this wiki, I will be able to coordinate my opposing [[intuition networks|Intuition Networks]], find compromises between them, and make them compatible with each other. My goal is to hierarchically re-intregate myself. I must decisively align my many orders of desires and beliefs in a resounding commitment, securing conformity between them, and wisely synchronizing and unifying them. I'm reprogramming myself. I seek to be an authentic, autonomous, unified, and whole person. I hope this wiki is a reforming, healing, cleansing, therapeutic, reifying, rationalizing, and vindicating existential programming instrument or development environment through which I resolve conflicts in myself,<<ref "11">> clear my vision, discover fitting lifepaths over time, and hopefully find happiness. 

Essentially, in my analysis of my first existential axioms, those truisms: [[Know Thyself]] and [[Virtue is Knowledge]], I hope I have taken up two other axioms, namely: [[Empathize with Yourself]] and [[Program Yourself]]. [[Empathize with Yourself]] is the means to employing the [[Categorical Imperative]], a necessary decision procedure engine we rely upon to know what is virtuous. Further, [[Program Yourself]] is the means to long-term happiness. Both my starting axioms are clearly deeply related to these two new ones.

<<<
[[RPIN]]: Whoa. Hold up. By implementing the Categorical Imperative [[Our Dear Programmer]] [[(h0p3)|h0p3]] is clearly begging the question in favor of [[KIN]].
<<<
<<<
[[KIN]]: You get to call me out when I'm being a hypocrite though. We aren't in the liars paradox; you're facing the opposite. You know that if I'm following the method (can I actually directly hide anything from you, from myself? I'm not talking about denial through indirect doxastic voluntarism either), that I must empathize with you. Even if you are psychopathic, I'd need to empathize with you. We have established nothing in the Categorical Imperative otherwise. You know I have to give you a fair shake. I'm worth trusting because you can see how I really feel: you know me. You have to trust me; you have to trust yourself.
<<<
<<<
[[RPIN]]: Call me paranoid. Fine. I have seen true Kant scholars, and not one can clearly defend empathizing with psychopaths. I do not have reasons to believe you will empathize with me. How will you [[Empathize with a Psychopath]]? I will at least admit this: it seems very logical to empathize with yourself. That is clearly what it means to care about your persistent identity. It is clear to me that I am a persisting identity. I buy the [[Program Yourself]] axiom. We can't afford to be impulsive. We must maximize the scope of our utility calculation; we must yet again ("Pinky") engage in long-term planning. 
<<<
<<<
[[KIN]]: It seems obvious to me that you cannot [[Program Yourself]] if you don't at least [[Know Thyself]]. It seems further obvious that to [[Know Thyself]] just is to [[Empathize with Yourself]]. 
<<<
<<<
[[RPIN]]: I am not foolish enough to assume knowledge of a mind is empathizing with that mind. Some psychopaths can have excellent theories of mind but elect to empathize only when it benefits them (because they are empathizing with their future selves). Ultimately, I agree to [[Know Thyself]], of course, but that does not mean we can logically derive [[Empathize with Yourself]]. That is to say to say: you have not established the categorical claim that we ought to feel the emotions and consequent motivations which go along with our knowledge. That is not obviously utility maximizing. Also, don't you know our [[Slowmind]] love's utilitarianism (that's where it is found)? Face it: Kantianism only exists in the Fastmind. You are a slave, you are not the rational, you are epiphenomal, you are not the most rational part of ourselves.
<<<
<<<
[[KIN]]: It is true that I don't care about utility maximizing until after the [[Good Will]]. This is not an accident. It is the only thing which is unconditionally good. But, you are right: the Frontal Lobes problem is huge. I do not know how to answer that. See? I am empathizing with you. You know we agree on the metaethical inferences, you just don't agree to the axioms. 
<<<
<<<
[[RPIN]]: That is correct. So, how about this: [[Program Yourself]] is talking about the only kind of freedom we have. You have seen the neuroscience behind what you call freedom. It doesn't exist.  Your freedom is unjustified faith. It is an axiom, and not obviously one I must take up.
<<<
<<<
[[KIN]]: Ugh, yes. The Categorical Imperative, if it is truly rational, must resolve the problem of freedom to make it axiomatic for you. I grant you that is at least one of the fundamental axioms we must show. I think it is the only way to convince you that [[Empathize with Yourself]] is the logical consequence of [[Know Thyself]].
<<<
<<<
[[RPIN]]: Here's the other half of this deep problem: I'm the one who actually agrees to the axiom [[Virtue is Knowledge]]. Your stutterstepped denial of Hanlon's razor shows  you only kind of do. More problematically, knowledge is not empathy, and virtue just means excellence. It doesn't mean CI-based moral excellence (again, utility seems an obvious possibility).
<<<
<<<
[[KIN]]: We are trying to program each other. I'm glad we are doing it publicly.
<<<

At this point, I feel compelled to explain what may seem like an odd inconsistency in my approach to privacy throughout this wiki. Namely, I care so much about privacy (as an ethical and political right) and yet I am obviously oversharing so absurdly publicly (it is perhaps cringeworthy). Well, this is my outlet, an effective conduit between myselves, and there is a method to the madness. This is me putting my money where my mouth is. There is a reason for transparently and openly shaping myself: sunlight is the best disinfectant.

Of course, I'm not saying anyone but me really cares about this wiki. Importantly, even if I might be speaking out in the dark with nobody there to listen, it would still be a good thing that I'm speaking out in the dark. Whether I'm talking to a void, myself, or other, acting as if someone is reading this or may be reading this somehow puts me in the right mindset. It feels like I'm addressing an audience instead of myself, and that helps me better realize how and when I need to be clearer, more rational, and more empathic. It forces me into a mode of public reasoning where I hopefully more fairly and objectively negotiate, integrate, and reprogram myself. Even if nobody is listening to me, I should listen to myself. I need to empathize with myself.

Essentially, this wiki is an accountability-based, high-transparency, cryptographically verifiable implementation of the [[Categorical Imperative]].<<ref "12">> I have to ask myself in a space of actual public reasoning (not merely the hypothetical possible world or moral courtroom we enter into in our internal implementations of the Categorical Imperative) if this is who I ought to be, if this is what I ought to do, if rational persons //in my position //would agree to my claims, acts, and intentions. Think about it: if we all wrote our journals and shaped ourselves in public, wouldn't the world be a better place and wouldn't people in general be better people? I am no exception. So, while I respect privacy rights (and find them exceedingly necessary for our world), I'm electing to relinquish mine because I feel compelled by practical wisdom.

The practical point is this: I want to construct my narrative, edit my reality map, and shape my personality in a public setting directly because it's much harder to confabulate "reasons" to selfishness (or other mistakes) when people are paying attention.<<ref "12.1">> Intellectual and moral integrity is all about trying to apply standards we believe rational people independent of us would accept and use.<<ref "13">> This is an application of the golden rule, and essentially, of empathizing with the rational, and of loving wisdom ([[Virtue is Knowledge]]).

Even if only for myself, ''I h0p3'':

*I hope this wiki develops into an evolving internet rabbithole, a grounds for me to explore and adapt.
*I hope this self-dialectic blooms into insight porn and footnote paradise.
* I hope I can "get it out of me" here.
*I hope this is a place to get to know me (even if only for me to accept myself).
*I hope this is a place to explicitly see my reality map in words and to see that landscape improve (and my life with it).
*I hope I effectively communicate with myself in open, curious, charitable, and humble self-reflection.
*I hope this wiki is a Living Document.
*I hope this is the place where I wisely mediate and reconcile the differences between my practical ([[RPIN]]) and idealistic ([[KIN]]) [[intuition networks|Intuition Networks]].<<ref "13">>
*I hope I re-invent myself and plan my grind through life and cognitive dissonance in this existential laboratory. 
* I hope to be a jedi metagamer of my life, to be practically "meta" about my existence, to play the game of life like a video game I'm obsessed with, and to more successfully engage in the practice of [[metaliving]]; thus perhaps I want this to be a Metaliving Document.
*I hope I can become a [[eudaimonic lifehacker|Eudaimonic Lifehacker]] who is existentially fulfilled (perhaps in seeking the Dao of Gödel).
*I hope that one day this [[About|About, a.k.a. The Opening of the Rabbit Hole]] page is happier in both appearance and //telos//.
*I hope I am [[h0p3]].

Wherever this hermeneutic circle (or spiral) takes me, as part of this continual existential process of rebirthing and reawakening, I will engage in the practice of programming myself and my reality. My goal is to be [[autonomous|Autonomy]] and authentic. I want to be my own programmer. I want to be the author of my life. I want to be the legislator of my own laws (literally what autonomy means). I want to be free and happy. I'm here to fight for that freedom and to stoically accept in empathy what I can't control. 

Needless to say, this wiki is currently (and hopefully often and always) under construction. Expect wiki-pages to be created, edited, and removed.<<ref "14">> This wiki is a living document (and a document for metaliving; I suppose it sounds weird to call it a Living Metaliving Document). Since I change, so will my wiki. The organization of this wiki is constantly in flux as I try to reposition the jigsaw pieces of my reality map. 

Problematically, I am often wrong. Do you hear me? //''__Listen__''//: ''I am going to be wrong on this wiki because I am often wrong IRL.'' The whole point of the wiki is to help me distinguish what is right from what is wrong. Be gracious! Be empathic! Be understanding! You can't be perfect (no one can), even though you should strive to be. Please understand the wiki as an //evolving// thing (just like our lives). As my parents say: do your best (paradoxically, who doesn't?).

To only add confusion to the problem: I often fail to say what I really mean, and much of my work looks like a jumble (I'm sorry). I'd like to warn you in advance: I am prone to employ and develop a jargony personal language on this wiki in order to be laconic, unambiguous, and maximize the space and detail of my expressivity (even if only with and for myself). Sometimes I need to be as exacting with myself as I can be.

Here are:

* Some [[Tips for Using this Wiki]]
** It may be useful to you, the interpreter, to have a better understanding of the functionality of this wiki.
** There is a mutual, shared, back-and-forth, give-and-take process which communicators undergo. We need rules for reading and writing this wiki, for making it and interpreting it. 
* My evolving [[Principles of Programming Myself]]
** Programmers need to plan, follow principles, and evolve.
** Be meta about being meta, etc.
* The [[Loosey-Goosey Principles]]

One last word of advice: before you head over the [[Projects|Projects on this Wiki]] page, I suggest walking through the [[Chronology of my Self-Dialectic: KIN & RPIN]] to find your bearings and interpret with context.

-------------------------------

<<footnotes "1" "It was initially written specifically for [[2016.10.17 -- Letter to Mom and Dad]]. However, it became clear to me that part of my deep conflict with them is also a deep conflict within myself. This wiki could and should be much more than a letter to my parents. After more reflection, I have realized this wiki was inspired by some other lifetools I've used, e.g. my <a href='h-book.7z'>H-book</a> (with <a href='h-book.sum'>checksum</a> and <a href='h-book.sum.sig'>sig</a>). I'm sure it looks crazy (this //is// the internet). Good luck and godspeed to anyone reading this.">>

<<footnotes "2" "That sounds ridiculously narcissistic. I really don't mean it that way. Unfortunately, journals have to be egocentric in a way, but that doesn't make them narcissistic tools. Really, my statement is an aspiration, not a claim that I've achieved anything worth reading. I'm well aware of the fact that writing an autobiography borders on outrageous lunacy. Admittedly, I want to steer away from that //icky//, ludicrous, lack of humility. I must say it up front: of course, I run the risk of going off the deep end here. At the very least, I don't want this wiki to be a:  rambling vanity trap, public masturbation session, absurd pile of emo-bullshit, diatribe, agitprop, manipulative virtue-signal, popularity contestant, newage holytext, self-defeating piece of self-help, mere language game, delusional confabulation, useless maze, descent into madness, or a tool used for evil things. But, ultimately, I need to take my life seriously at some level. Unfortunately, because I'm a 'quirky' (or insane) mama-jama, I need a very low-level, detailed, highly structured, hierarchical understanding of life and myself, from the ground up. So, I'm not here to convince anyone but myself, but I also don't think I'm doing anything morally wrong by taking my life so seriously.">>

<<footnotes "2.1" "I am not a Heidegger scholar. I am fascinated by what he is doing though. To be as precise as I can (with the caveat of my poor and corrupted understanding of Heidegger), I see this wiki as a unique kind of equipment that serves as a portal between [[ready-to-hand|[[Ready-to-Hand]] and [[present-at-Hand|Present-at-Hand]] modes for me, i.e. a [[RtH-PaH-portal]]. Some things jerk us out of the ready-to-hand into the present-at-hand mode (and some the other direction, and perhaps some in both directions). Not all [[RtH-PaH-portals|RtH-PaH-portal]] have the same destinations (there may be many different instances, aspects, or points of view one can 'arrive at' in either mode). I suspect what things count as portals (and the function-rules which map their destinations) are different for everyone, but there may also be natural portal patterns that arise in a species of creatures with very similar brain structures. In any case, some of those portals bring us into a present-at-hand mode in which Dasein is [[thinking about thinking|Thinking About Thinking]] and [[thinking about existence|Thinking About Existence]]. This wiki is one of those more existentially focused/destined  [[RtH-PaH-portals|RtH-PaH-portal]] which I'm purposely trying to use. I must heighten my self-awareness like Goku with his martial art (/cringe). I need equipment for bringing me into a scientifically (because we can't get Husserl's core: certainty) philosophical mindset about my existentence. I need equipment when I arrive at that destination to do my work in there. There is a ready-to-handedness (RtHness) I'm trying to cultivate in my present-at-handedness (PaHness) towards my existence. I need to make it easier to be self-reflective and existential, to the point that it is a reflex. I need to be a master of it (10,000 hours, they say) to the point that it becomes unproblematic, fundamental, ingrained, and the natural way of doing it for me. I need that RtHness, being 'in the zone,' while I'm being existential. I hope this wiki is that special equipment, acting as an existential portal for me.">>

<<footnotes "3" "If I knew all of 'what' was supposed to be written in this wiki, then I probably wouldn't even need to write it in the first place. I am searching in the desert. At best, I'm both working backwards and building a foundation hoping to find my next real move somewhere in the middle.">>

<<footnotes "4" "I could not have survived thus far if it weren't for my spouse, [[JET]], the rock of //my //ages. In her empathy and love, Christ shines through and cries out from her. I don't have the words necessary to explain my debt to her. All I can say is: I love you. Thank you.">>

<<footnotes "5" "That doesn't mean I'm doing a good job. It just means that is the only reason I'm still alive for now. If I'm lucky, I'll find more reasons to complement this last intrinsic one I have.">>

<<footnotes "6" "Even if only instrumentally for my children for the time being.">>

<<footnotes "7" "No one else can do it for me. No one can empathize with myself effectively enough. This one is up to me, myself, and I.">>

<<footnotes "8" "Just as modern computers are really multiple computers working together, I think our brains contain more than one mind. In a real way, I'm asking myself how I, as a bio-sack computer, with emotions, responsibilities, and existential agency, should program myself given the context in which I find myself.'' [[RPIN]]: Yes, Frankl, I hear you.''">>

<<footnotes "9" "Neuroscience, yo, back me up. Don't fail me now because you know it's true.">>

<<footnotes "10" "I am not a blank slate (//tabulsa rasa//). I come with innate categories built into me by evolution (more like //tabula inscripta//). I have also lived through many circumstances, and I've a habituated/trained my intuitions, which reside in the gutteral, faster-acting parts of my brain. As a corollary to the rejection of// tabula rasa//, I must admit that I'm not engaging in Cartesian solipsism. I hope this wiki is a [[Metamodern]] solipsism, where I cast doubt and generate reason from a non-empty bottom/foundation and perform surgery on myself given what I have, with a changing stance toward what I need.">>

<<footnotes "11" "And possibly with others.">>

<<footnotes "12" "Kant was right on so many levels, but he could not have envisioned every dimension to Dasein's problem.">>

<<footnotes "12.1" "Let us be clear. I'm not saying there aren't good or right reasons to be selfish. I must be open, for example, to the possibility that egoism is not only descriptively accurate but also prescriptively appropriate. Begging the question otherwise would lack integrity. However, it would also lack integrity to simply jump into the egoist pool without having demonstrated fitting public reasons (I realize, I find myself in a paradoxical problem wherein I must define //fitting//, and perhaps this problem is inescapably subjective; I have to at least try to be objective though [Even more paradoxically, I may even discover in my pursuit of objectivity {which is strikingly modern and perhaps post-modern deconstruction} that I cannot or should not seek objectivity].).">>

<<footnotes "13" "As always, so much can be embedded or smuggled in our definition of 'rationality.' It is important to see that when a rational person fully empathizes (which never practically happens, but we should take up the theoretical stance here) with a target person, the rational person may actually change their mind about what the target ought to do. Thus, the Categorical Imperative has a strong theoretical assumption which can never be fully practiced. We can't literally walk up to the a virtuous agent and fully describe our circumstances, and thus they can't be certain they have found a universalizable maxim for us.">>

<<footnotes "14" "If that bothers you (and I don't know why, since this is my document), then keep your own records and timestamps (with verification). I do. Missing parts of the chronology of this journal (which seems very un-journal-like) seems odd. Here's my justification: //who I am// and //who I was// should sometimes be different persons (sometimes, not always). Whereas, //who I am// and //who I will be// should not. I'll analyze and make-use-of my past, but I will identify with my current+future self. It's what I need to do.">>
I must accept that my parents lacked empathy in their lives, that they are the result of the [[Adult Children of Alcoholics]] (ACOA) process. Consequently, I am as well. I'm trying to forgive their mistakes, even if they aren't willing to forgive mine. 

I am not convinced they will be able to withhold judgment, to fundamentally empathize with me. They have so much skin in the game, they cannot see clearly. It is already very difficult to appreciate my point of view. I must accept that, to some large extent, they cannot empathize with me. I think empathizing with me would require facing their own demons, which they cannot afford (but, then, why am I expected to afford it?). They are very strong people, but they were not prepared for this (would would be?). 

<<<
[[KIN]]:If you burn me, then you burn me. I simply have to trust you. That's the only thing which can make me happy. 
<<<

<<<
[[RPIN]]: Ah, but trust comes in degrees. To what degree should I trust you? What does it even mean to have degrees of trust? Is it systematically not really trusting if you don't have the right configuration of trusting instances or guiding principles? 

Be wise in your extension of trust. But, that also means be wise in your extension of empathy. You have finite emotional and intellectual resources. How much are they worth spending on? Think of this as a risk analysis problem. 
<<<

I have to recognize that as much my parents want to love me, sometimes they won't. They want to follow the Golden Rule, but they cannot always apply it to me in vital ways (and vice versa). I must accept them as they are. I hate what that means. It means we likely will never be close again (let's fight against this!). It means I'm in defensive mode with them. It means I can't be vulnerable to them like as I used to. I can trust their intentions to a large extent, but I cannot trust their judgment in generating the contextual content of maxims. 

I don't want to lie with them. I want to be myself. I will need to set healthier boundaries with them.

I must accept that we are in a tit-for-tat game of rebuilding our trust and empathy. It is the most successful game-theoretic way to generate trust. It is a sad game to have to play. 


------------------------

Can we accept that we will have differing opinions? Can we navigate that messy affair? Can we really empathize with each other? Can we accept each other? What is a friendship that can't do these things (is that even a friendship)? I want a deep friendship with you.


<<<
An infinite regress in a series of propositions arises if the truth of proposition P,,1,, requires the support of proposition P,,2,,, the truth of proposition P,,2,, requires the support of proposition P,,3,,, ... , and the truth of proposition P,,n,,−,,1,, requires the support of proposition P,,n,, and n approaches infinity.

Distinction is made between infinite regresses that are "vicious" and those that are not.
<<<

How do you know when an infinite regress is vicious? I think it would be hilarious if the answer itself boiled down to an infinite regress. It may require formal question begging.
Addiction desperately needs a definition. It is a weasel word which smuggles moral content into a claim which should be explicated instead of hidden in the nebulous generalized word itself. Careful analysis shows deep cracks in history of how we use that word. Embedded in it is a series of biological, metaphysical, and metathic assumptions which few if any have justified in a systematic way. Let me, again, voice my skepticism about the use of this word which I inevitably use poorly (as well as everyone else, imho).

Addiction, roughly, it is a consistent, impulsive behavior which we judge to have suboptimal enough utility calculations that we collectively call it irrational.

That said, I think we can improve in our conceptual and scientific understand of this phenomenon. 

Let us go with the sanitized and yet loaded Wikipedia definition:

<<<
Addiction is a medical condition characterized by compulsive engagement in rewarding stimuli, despite adverse consequences. 
<<<
My parents see themselves and their family through this lens. While they do not take the time to understand my point of view (and maybe they literally can't), I will try to understand theirs.  

The Laundry List:

* We became isolated and afraid of people and authority figures.
* We became approval seekers and lost our identity in the process.
* We are frightened by angry people and any personal criticism.
* We either become alcoholics, marry them or both, or find another compulsive personality such as a workaholic to fulfill our sick abandonment needs.
* We live life from the viewpoint of victims and we are attracted by that weakness in our love and friendship relationships.
* We have an overdeveloped sense of responsibility and it is easier for us to be concerned with others rather than ourselves; this enables us not to look too closely at our own faults, etc.
* We get guilt feelings when we stand up for ourselves instead of giving in to others.
* We became addicted to excitement.
* We confuse love and pity and tend to "love" people we can "pity" and "rescue."
* We have "stuffed" our feelings from our traumatic childhoods and have lost the ability to feel or express our feelings because it hurts so much (Denial).
* We judge ourselves harshly and have a very low sense of self-esteem.
* We are dependent personalities who are terrified of abandonment and will do anything to hold on to a relationship in order not to experience painful abandonment feelings, which we received from living with sick people who were never there emotionally for us.
* Alcoholism is a family disease; and we became para-alcoholics and took on the characteristics of that disease even though we did not pick up the drink.
* Para-alcoholics are reactors rather than actors.

ACOA principles are so generalized that strict and blind adherence to its hypothesis is equivalent to falling for scams like fortune cookies, psychics, and cold reading. Indeed, my brother [[JRE]] was right about this. Science does not support ACOA, at least not yet.<<ref "1">> Essentially, everyone feels these ways to some extent (some more than others). Perhaps most people in pain or those who come from dysfunctional families (and who doesn't, to some extent?) can find themselves, to varying degrees, on this list.

What does that tell us? Why can we all identify with it? It seems unlikely that it is all wrong. That so many of us feel connected to this laundry list should not be thrown away. I take this list to be specific enough (however general it may be) that we should worry about it. What is it about this list which describes the human condition? This list is compelling, and we need to find the cause of its intuitive appeal. 

I believe I've cracked the ACOA code: the concept of [[empathy|Empathy]] is the key to unlocking this laundry list. People who have systematically experienced a lack of empathy are going to find themselves on this list in various ways. Perhaps that seems reductionist (admittedly, that's what I do in my pattern recognition, and I am often wrong). Think carefully about the list, and be charitable in your interpretation here (don't straw man, instead steel man). 

Let's tackle the list and see why empathy explains it better than alcoholism.

* We became isolated and afraid of people and authority figures.

Why would we be afraid of people and authority? Because they don't empathize with us enough. Because they don't treat us with respect. They don't recognize our human dignity in important ways. When people don't empathize enough with us, they are prone to hurt us, deceive us, extract capital from us, use us, and treat us as mere means; when they //otherise// us, treat us as objects, aliens, or enemies; when they lack hospitality and kindness; when they do not treat us humanely (which comes in degrees), then we are forced to flea and hide from them (or fight, depending on which direction of fight-or-flight fork in the road we take). We're especially afraid of psychopaths (and, as an unfortunate conflation, it's also why atheists are viewed with intense suspicion, since religious people do not understand how morality can make sense without their own personal religious views). We purposely isolate ourselves from those who don't empathize enough with us. Why? If we empathize with ourselves, we will care about not being hurt. When we don't experience empathy, we will become isolated and afraid of people and authority figures (in various ways and to various degrees). It seems very logical to me. It may be the right thing to do, even if it sucks (it's bad that we must, but not wrong that we do). 

* We became approval seekers and lost our identity in the process.

This is a complex claim to unpack. In particular, it requires conceptual analysis of [[approval|Approval]] and [[identity|Identity]]. There is an enormous array of literature on and philosophical frameworks/architectures about these concepts. I can't distill a sufficient answer into a single book for this, let alone a few paragraphs. More importantly, I'm not an expert (but it is my practical plight to at least come up with answers for myself anyways). I'm not convinced that we need to delve far into the concept of identity here, but I believe we need to examine the concept of approval to understand the ACOA claim. I'll try to give a common sense answer that will juice your intuitions.

Approving, roughly, is when we [[like|Like]] something to the extent that we agree to it or condone it, that our liking is a source of motivations for condoning, that our liking provides content to our intentions and perspective for the act of condoning. 

Vitally, //liking //something isn't "up to us" in important ways (unlike [[love|Love]]), since that would require direct doxastic voluntarism. That I like pizza isn't "up to me" in any direct way. I can't choose not to like it. I can, however, habituate or train myself to like or not like pizza (acquiring or de-acquiring a taste), and thus liking may be indirectly up to me. Whether or not we like pizza is the result of training our intuitions (both consciously and subconsciously) through utility calculations and pattern recognition over a series of encounters with pizza. Liking is a gutteral, fast acting response. The process of liking occurs in our [[Fastmind]]. Liking is an intuitive desire+belief about the merits, value, or acceptability of a thing in a given context. 

Approval is an action. An action has two halves, an act and an intention (a maxim, a motivation, a reason for acting that way). What kind of action is it? It seems to be a kind of "condoning," usually in moral contexts. Liking provides the content for the intention half of the condoning act half in an approval action whole. So, as an example approval action, if I approve of what someone is doing, my act may be telling them "That is awesome!" and my reason for that act would be that I like what they are doing.

Seeking approval is seeking an action from someone (because, I assume, only persons can perform actions). It means we seek for them to condone the value of something (e.g. in us, about us, regarding us, etc.) based upon what that person likes (the rewards-based intuitions embedded in their Fastmind). One difficulty in approval seeking is that a person can't change what they like overnight. A person can't fully like what you are doing if they don't understand what you are doing (and why). The like-intuitions aren't there for them to approve.

I take this ACOA claim to be saying we don't approve of ourselves, and instead we seek the approval of something outside ourselves. Basically, this is saying that we no longer care about what we like, but instead care about what other people like. 

Is this a bad thing? Not obviously. It depends on your context. Is it a bad thing for a murderous psychopath to repent, to not like themselves (to not approve of themselves) and seek approval of something external to them? No. It's a great thing. In fact, one formulation of the [[Categorical Imperative]] boils down to seeking the approval of ideal [[Rational]] persons. Asking yourself, "what would the virtuous person (e.g. Jesus) do?" is moral approval seeking. Thus, approval seeking outside ourselves is fundamental to our moral character development, to becoming a good and morally excellent person who does the right thing, at the right time, in the right way, for the right reasons. 

Even friendship appears, at least in large part, to be about approving of each other in important ways and to large extents. It is a kind of mutual social masturbation. You stroke my ego, I stroke yours. We cheer each other on. We help each other accomplish the others' projects (we take their projects to be our own). We do things together because we enjoy mutual social masturbation more than going solo. We're programmed to be social creatures. If you don't care about your friend's approval, are they really your friend at all? Maybe. Often not. It depends. How empathic are you being? 

Alright, how does empathy fit in this picture? Approval of someone requires liking someone. Liking someone requires understanding, such as developing a theory of mind about how someone thinks, how they understand the world or context, why they do what they do, etc. Liking someone is fundamentally entangled with empathizing with someone. Thus, approval is fundamentally about empathizing with someone. 

Now, of course, we can disagree with and disapprove of someone while still empathizing with them to some degree. And, of course, perfect empathy is impossible for us (we can't magically transfer our complete minds to each other). But, it seems obvious that there always remains the possibility that when you are disagreeing with someone that you don't fully understand what they are thinking and why. It is here that I think my parents are prone to dismiss my view as a confabulation (and I'm done taking it: they will get the exact same thing back).  

In any case, I think the causal chain goes something like:

empathy => like => approval

As to how empathy relates to the ACOA claim: people who can't empathize with themselves enough to approve of themselves will seek empathy and approval from external sources. Sometimes we shouldn't like aspects of ourselves. We have be more objective about ourselves while maintaining our empathy for ourselves to make the changes necessary for us to like ourselves. This is a necessary thing to do. Clearly, the way we approach the ACOA claim requires us to bring the issue of empathy to the center stage.

Okay, I'm not satisifed with my answer here. I need to come back to it. There is so much packed into this issue. I'm still convinced that empathy is the core of the issue, not alcoholism. I think alcoholism and addictions (and all other causes) which replace our empathy for others is the real source of the problem, and the reason for the confusion people have with this ACOA list.

* We are frightened by angry people and any personal criticism.

This is the parallel of the previous point about approval, simply coming from the other direction. They are corollaries of each other. I also think it is much easier to understand how empathy fits into this direction of the equation. 

Criticism is very rarely done perfectly. Constructive criticism is about delivering the right message to a person. That message requires empathy. In order to correctly criticize someone, you must craft a message that effectively changes their point of view. You can't change their point of view without understanding it. You have see the world through their shoes, to see why they think the way they think, in order to provide them the means to find the right path. You have to empathize with them to criticize them. Without empathy, criticism tends to become a strawman, to border on fallacy. Without empathy, criticism is a personal attack. 

How do we know when someone is constructively criticizing us and when they are attacking us? It isn't always easy to distinguish. It seems that the receiver must also engage in the practice of empathy. There has to be a mutual trust between the two parties. They must believe they want the best for each other, in a way. 

Frankly, that's not the way the world works. We suck at empathizing. Of course most criticisms are so imperfect that they have attacks in them. At some point, people are just going to be frightened and hurt by failed criticism that demonstrate a lack of empathy. Someone who hasn't experienced enough empathy and correspondingly who themselves lack empathy (our ability to empathize has biological limits in the our brain's rTPJ, but is also a muscle to be trained) will of course be frightened by people. They will see criticism as lacking empathy. You can only take so much of it.

* We either become alcoholics, marry them or both, or find another compulsive personality such as a workaholic to fulfill our sick abandonment needs.

I think this is a rhetorical scarecrow in its wording. What it should really say is something like: People who haven't experienced empathy may seek others who haven't experienced empathy so that they can empathize with each other. Oh, you mean people are seeking empathy? No doubt. We need empathy; it's part of our being social creatures. It's like food and water at a social and existential level. Man cannot live on bread alone.

* We live life from the viewpoint of victims and we are attracted by that weakness in our love and friendship relationships.

Like the previous point, this is another facet to the empathy seeking gem. We live life from the viewpoint of victims because we are victims. All of us, to varying degrees, are the victims of not receiving empathy. Sometimes people don't empathize with us on purpose, and sometimes they don't empathize with us by accident. The "man-up" mentality is about discarding our need for empathy (even empathy for ourselves). Victim-blaming is about disregarding someone's need for empathy and making it all the victim's fault ("they deserve that pain; I'm glad they have that pain; I'm a good person who doesn't need to feel their pain because I wasn't stupid like they were"). 

Of course, victims are attracted to other victims. Victims need empathy, and other victims can empathize with them. Other victims understand what it means to be a victim. This isn't wrong, it's just sad and a bad thing that it must occur.

* We have an overdeveloped sense of responsibility and it is easier for us to be concerned with others rather than ourselves; this enables us not to look too closely at our own faults, etc.

This is a very poorly worded claim. Can you overdevelop a sense of responsibility? No. Can you be addicted to moral responsibility? Yes. Can you think about being responsible to the detriment of actually being responsible? Yes. Can you see the flaws in others without seeing your own flaws? Of course. What is the core of this enabling?

My hypothesis is that when we see the failures of others over and over again, when we see they do not live up to their responsibilities, when we see their psychopathy, when we can no longer empathize with them, we become habituated in our lack of empathy. We fail to empathize with the world, and eventually we fail to empathize with who we really are as well. We stop looking inwards, and why should we when nobody else is either? At best, we create a false narrative of ourselves that we empathize with, but no longer can see who we really are. At worst, we see the futility in empathizing altogether.

What is odd about responsibility is that it is innately about being empathic. When we are responsible, we are empathizing with our future selves or with others (and their future selves). It is only through a terrible turn on that righteous path that we become psychopathic, that we colloquially "judge," that we fail to remove the log from our own eye so that we can see clearly enough to remove the speck from our brother's eye. 

It is empathy that starts us on the right path in the ACOA claim, and it is the lack of empathy takes us down the wrong path. Unfortunately, I'm not even sure I can blame someone for lacking empathy anymore. I can see why they don't. Ah, but this is part of my struggle to understand our freedom (which I'm failing at, and I guarantee, we all are). So, let me set this aside and say: empathy is clearly the key to understanding fundamental moral judgement problems brought up in this ACOA claim.

* We get guilt feelings when we stand up for ourselves instead of giving in to others.

This one is interesting for me personally. I definitely feel this way with my parents. I don't know how to stand up for myself instead of giving into them. This is in part because I can't communicate effectively enough, but also because what I need to communicate to them would really hurt them. It would be painful for them, and I really don't want to cause them pain. It would be painful for us. 

I need to stand up for myself and communicate these issues though. I need to empathize with our future selves. It would be better for us in the long run to experience the short term pain (that said, my reality map conflict is strong enough that it makes me suicidal). Would you tell someone something that could make them suicidal if they actually understood it? That really wouldn't be empathic. But, it may be our only option.

I must say, I don't think my parents are capable of empathizing with me. A foolish, uncharitable part of me worries that in some ways they lack the intellectual integrity and capacity. That my real vulnerability is that I worry they choose not to empathize (definitional psychopathy). I don't feel guilty here, but I feel like I must protect myself. Putting myself out there is not a risk always worth taking.

Back to the claim directly, why would we feel guilty? Guilt is an experience that only occurs with empathy. Psychopaths don't feel guilt because they don't feel empathy. As to standing up for ourselves, there seem to be so many reasons one might not. At least part of the problem rests upon empathy here. Presumably, when we don't stand up for ourselves when we ought to, it is because we haven't empathized enough with ourselves. We don't take ourselves to be valuable enough in some way. 

* We became addicted to excitement.

[[Addiction]] needs a definition. Roughly, it is a consistent, impulsive behavior which we judge to have suboptimal enough utility calculations that we collectively call it irrational. 

Addiction demonstrations one's lack of executive functioning. That is to say, it shows an inability to appropriately empathize with one's future self. Boredom is a classic psychopathy personality trait, and it may be the case that addiction to excitement is a psychopathic expression.

* We confuse love and pity and tend to "love" people we can "pity" and "rescue."

[[Love]] needs a definition. It is easy to bandy that word about. Let us assume that love is a choice to be empathic. To love someone is to choose to empathize with them, and to be moved to seek the best for them after standing in their shoes (obviously, all of these come in degrees). 

Of course love and pity have enormous crossover. Those who are pitiable, in need of rescue, are those who need our love the most. 

Someone who desperately seeks empathy, who needs it, who systematically or crucially failed to receive empathy in appropriate ways will empathize with others who they perceive to be in a similar position. It seems to be part of empathizing with ourselves when we vicariously empathize with others in similar shoes. Surely the person who lacked food growing up will become adults keenly aware of the hunger of children. To some extent, it seems very healthy to be moved in this way. It's not obviously the wrong thing to do. 

* We have "stuffed" our feelings from our traumatic childhoods and have lost the ability to feel or express our feelings because it hurts so much (Denial).

Call it a confabulation if you want, but I think we've evolved to undergo the 5 stages of grief, and it might actually be rational. It is not obvious to me that we should aim to go through all 5 stages. There may be many cases in our lives which are best dealt with by remaining in one stage. Acceptance is not obviously always the most adaptive answer (or, we at least need need better reasons to agree to such a generalization).

Being able to "tune out" the thing causing us grief is sometimes the most practical option. We may not have the resources to do anything about it. We may not even have the intellectual and emotional resources (let alone the financial and social freedom) necessary to achieve acceptance (which may just be stoicism). Again, this is the difference between good and right. Being unable to accept, while being stuck in an earlier stage is not a good thing (that doesn't it make it our fault though), it may still be the right thing (assuming it is even a choice).

Dealing with grief is a process of empathizing with ourselves, making crucial transitions in our reality map and identity. Empathizing with ourselves is hard work. Some people may be so damaged they can't.

* We judge ourselves harshly and have a very low sense of self-esteem.

This is another normatively loaded claim. Answering it is logically equivalent to answering fundamental questions in metaethics.

Maybe the world would be a much better place if we all judged ourselves harshly and had less esteem for ourselves. Is it a bad thing that me do? Sometimes, yes. Is it wrong? Not obviously.

<<<
[[KIN]]: I want us to see the difference between what is adaptive for us and what is morally right for us to do. They are not the same thing. This is the nature of justice. 
<<<
<<<
[[RPIN]]: Morality is not practical. At least your obsession with doing the right thing, being virtuous, is not normatively required. Even though you know you can't achieve it, you still almost blindly aim to be virtuous. There is hope there that I recognize, but it is unwise. Come to the darkside of "practical wisdom," brother. Find a middleway to be "moral enough" while still happy. Everyone else is doing it, so why not you? Can't you empathize with sinners like this? =)
<<<
<<<
[[KIN]]: To not aim for the right thing is literally to not aim for the right thing. Moral law is moral law by definition. It really is an all or nothing thing in a sense. That isn't to say we will achieve what we seek (as you charitably point out), but it Maybe Hursthouse is correct; maybe we are Marred.
<<<

I'm almost sick of how redundant I'm being. This is obviously about empathy. Presumably, appropriate judgment is deeply empathic. Having a low self-esteem is a failure to empathize with yourself because, presumably, in empathizing with yourself you appreciate your dignity and self-worth.

* We are dependent personalities who are terrified of abandonment and will do anything to hold on to a relationship in order not to experience painful abandonment feelings, which we received from living with sick people who were never there emotionally for us.

Is this telling me to abandon my parents? Are my parents abandoning me for this reason? Lol. How are we supposed to deal with the psychopaths in our lives? There are competing interests, priorities, and values here. 

<<<
[[RPIN]]: To me, this is saying, don't be dependent when you can choose not to be. Be independent of others, and avoid making major sacrifices. Or, essentially, play a game where you acquire as much empathy as you can for the least cost (even a Kantian cost). 
<<<

My parents can't sufficiently empathize with me. Sure, they know what it is like to raise children while struggling financially. Sure, they understand vocation. Sure, they are struggling with a lack of empathy in their lives and the world. They do not have the tools or inclination to empathize with me though. They are mix of inept+fallible humans and psychopaths, to some degree, toward me. 

What they have earned in our social bank-accounts through our tit-for-tat game of generating trust and empathy with each other is spent. That account is empty (arguably, in debt to me). 

How can we empathize with each other? Maybe they can understand me enough in the wiki to empathize. I don't think they can though. Odds are high they won't. The risk does not seem worth it in that respect. I don't know how. Maybe I should just accept that we aren't compatible in this way. 

If there is hope, I believe it is through my mother.

Maybe I shouldn't try to hold onto the relationship, or maybe the relationship is just going to be us maintaining social capital with each other (i.e. using each other).

<<<
[[KIN]]: How noble of you. /s
<<<

This ACOA point requires more attention, no doubt.

* Alcoholism is a family disease; and we became para-alcoholics and took on the characteristics of that disease even though we did not pick up the drink.

This should read: Psychopathy is a family disease (a memetic virus which spreads through social conditioning, particularly to those with genetic predispositions). Those are the "characteristics" ACOA are trying to point out in both alcoholics and "para-alcoholics." I.e. This isn't about alcoholism; this is about a lack of empathy.

* Para-alcoholics are reactors rather than actors.

<<<
[[RPIN]]: My god. The sheer ignorance in this sentence is extraordinary. Define [[Freedom]]. Your common sense definition is going to fail. Freedom is epiphenomenal. We are all reactions, and none of us are actors. The appearance of being an actor is confabulated. You are the consequence of a detailed circumstance. A genetic and memetic story fully explains your actions (you are reducible and not emergent in a strong enough way). 
<<<
<<<
[[KIN]]: So, para-alcoholics aren't responsible for their actions? They aren't persons. They don't have dignity. What an ugly claim. It is the end of being a moral agent, it seems.
<<<

I'm not really sure what this ACOA claim is saying. It is obviously a very strong (strong doesn't mean justified; I just mean that the point of view has a rich set of assumptions) metaethical claim. 

I do find it at least offensive. The presumption is that para-alcoholics do not have meaningful lives, and that further, others are somehow "more autonomous." It's the absurd hypocrisy of calling someone a "reactionary." I have bad news: everyone is a reactionary. 

Charitably (perhaps too much so), I take this ACOA claim to apply to me in this way: I am obsessively empathic or autistic, that my decision procedure appears so "black and white" that it seems obvious to others that I am a reactor. Hilariously, just because someone's decision procedure is less clear (although, I don't think mine is ultimately very simple) in this respect does not make them any more of an actor than me. 

ACOA solves nothing in the metaethical region. It points out a set of empirical rule of thumbs about the nature of human interactions. It is a descriptive tool (and a very poorly conceptualized one at that). Prescriptively, it either begs the question, providing no justification, or it doesn't even actually prescribe. That said, I'm glad to have thought about it (and I will continue to do so). There is obviously something compelling about it, and I hope it will aid me in my philosophical investigations and existential healing. 

































----------------------------------

<<footnotes "1" "Scientists can be wrong (and they know that; anyone who understands the Scientific method or has even glanced at the history of science knows that). I'm not an expert in the philosophy of science, but I have enough under my belt to see the cracks. I'm not an empiricist. I don't take science to be my religion. I don't take science to be the sole or best method of inquiry in every context. There are other valuable and important ways to achieve justified beliefs. However, we should still take the scientific community very seriously in both negative and positive claims, since we have overwhelming evidence to do so.">>
//I dedicate this work both to GFD, who showed me the way (lulz), and to H. Sarkar, whose interpretive style I can only hope to imitate. //

<<<
The term “Daoism” is highly amorphous, as there is no unitary phenomenon to which it unambiguously refers.<<ref "1">>
<<<

To some extent, I have the same problem with Christianity and any other body of significant existential thought. It is difficult to call it a monolithic thing. That said, there are core aspects of it that I think we can point to. If you can't do that, then what is it that you are pointing at at all?

<<<
While there is no fixed essence of Daoist thought, I find several related notions close to its core: a shift in emphasis from the human to the cosmic, from the artificial to the natural; cultivation of natural life and tranquility; embodying natural spontaneity by diminishing artificial interference (wuwei); and an appreciation for the deeper productive value of emptiness, nothing, retreat, and reversal.<<ref "2">>
<<<

Essentialism is a serious problem in ontology and epistemology. I am not an expert, but as a journeyman, I am worried. Of course, the analytic western tradition fails at the root. Despite the elaborate floating machinations we have built on top of our foundation, we have not solved the initial paradoxes presented to us thousands of years ago. Therefore, I have no right to complain. I must keep an open mind.

I know I cannot but help view this through my western lens. It is the framework I have: //tabula inscripta//. This list, no doubt, is tantalizing. The classic problem of defining "natural" will obviously show up in this inquiry.

<<<
Daoism is often explained as the philosophy of The //Dao//—an absolute and transcendent substance, the utterly unspeakable ground of all existence that lies beyond the world of experience.<<ref "3">>
<<<

I am very willing to accept metaphysics. Transcendence, unspeakability, and ground of human-experiencable existence I may take issue with. It depends on how you define these terms. There is plenty of room for agreement so far.

<<<
...there is a sense in which obsession with a transcendent and unspeakable dao is misguided. If we focus on dao only to say that it is ineffable, then we have understood nothing of Daoism, or dao, except perhaps that there is nothing to say about it.<<ref "4">>
<<<

Exactly. It is why we can "box" God in with adjectives (e.g. God is good, etc.). The transcendent cannot be truly ineffable, for even that sentence demands intelligibility and effability.

<<<
[The] concepts that are central to understanding Daoist
thought... include //tian// 天 “nature/cosmos,” //wu// 無 “nothing,” //de// 德 “potency,” //fan// 反 “returning,” and //zong// 宗 “the ancestral,” among others. What makes the Daoist //dao// distinctive is that it is the //dao// of nature, of absence, of potency, returning, and the ancestral.<<ref "5">>
<<<

You have my attention, despite the orientalist feelings which arise in me. Importantly, I do not understand the locution of "dao of." Presumably, "the way of" or something like that. We will see.

To be clear, I think "the way" comes off as seeking the //right// way. It is about being right. Obviously, it's emphasis on syncretistim, particularly the adaptive acceptance and encompassing of all best practices without taking up their flaws, seems to be a mark of intellectual virtue in some ways. Nothing is more philosophical sounding to me than that. 

<<<
The Daoist texts demand instead that we broaden our perspective, expand our understanding of who and what we are as humans, our awareness of our existence in relation to all that surrounds us. We extend the boundaries of our self-identification until we encompass “heaven and earth” and “the ten thousand things.” That is, our
awareness must shift from the restricted perspective of the human point of view to the all-encompassing “nonperspective” of the whole cosmos. Now the search for the way becomes a search for a cosmic way, whose significance extends far beyond the familiar boundaries of human life and human society.<<ref "6">>
<<<

Okay, this sounds really mystical (and I've been burned before) and "far out" man. Forgive my skepticism of //tiandao//: the way of the cosmos.

What does this it even mean to take on the //cosmic viewpoint// and identify as the cosmos? Do we mean the cosmos has agency? Likely not. Does it mean we need to be as objective as we possibly can? Perhaps. 

Going back to the absolute, transcendent substance, the ground of all experiencable existence: can we takeup a cosmic viewpoint at that level? If so, what does it even mean to have a trascendent cosmic viewpoint? If not, why not? If there is difference between //dao// and //tian//, what is it, and why should we accept the distinction? How is the transcendent not natural? We are deep into the "natural" problem yet again.

Further, how is it possible to take on the cosmic viewpoint? We are finite creatures. Perhaps we can only "do our best." Further, here we encounter a //de se, de re// subjectivity/objectivity problematic. Let us, for the sake of argument, ignore that problem and say it is possible. 

To the real question: why should we take up the cosmic viewpoint? Of course, it is clear that such a demand appears to be //a normative requirement//, and then I want to know the source of this normativity, why it should bind me, and what makes it authoritative, etc. 

I want to know how the master Daoist would interpret radical individualism. Why is that //not// "the way" to go?

<<<
In the absence of explicit definitions, one must look for associations of important terms; this method can be thought of as a kind of “textual phenomenology.” The associations of terms give hints
regarding what is thinkable and not thinkable in the original language: they help us plot the conceptual or semantic boundaries, which may be more or less clear depending on the concept and on the amount of context and associations available in the texts. 

Of course, attempting to understand these linguistic associations does not mean that we are recovering the original intentions of the ancient writers. As Gadamer has pointed out, it is simply not possible to extricate ourselves from our own social and historical contexts and unproblematically adopt the discourse of the ancient texts. We cannot avoid imposing our own presuppositions or interpreting the texts through our own contexts. But we can aim to interpret as responsibly as possible, that is, to approach the ancient concepts open to the possibility of deep and philosophically
significant differences, and to struggle to identify and think through concepts from our own discourse that impose what appear, in our best and evolving judgment, to be the least inappropriate of available meanings.<<ref "7">>
<<<

Perhaps I do not understand the meanings of the term "phenomenology." I find this to be an odd use of the word (the author often uses it in places that I would not). 

Regardless, this description is part of the [[Hermeneutic Circle]] (which does fit in the phenomenology wheelhouse). It is the charitable quest of philosophical interpretation, the curious and open acceptance of the results of steelmanning an argument. 

Unfortunately, I am wary of Straussian, gnostic interpretations. At some point, after we've exhausted a sufficient space of possibilities, it is only practical to see that we can't make an argument work. Or, perhaps the destination doesn't actually require that particular beginning in our interpretive work (despite our gratitude for how it led us). Sometimes we must admit an argument is no better off than the other options (or worse). We will see if this text survives.

<<<
The word “//dao//” is often said to be the most basic concept of Chinese philosophy. It might be thought of as having the same philosophical status as “Truth” or “Reality” in Western philosophy. Literally, it means “path” or “road.”...A //dao// is the path one takes, the path one makes, and the path as it guides those to follow...it
implies not only the way the world is but also the way it should be...It appears to name a unique thing, often described
as static, unchanging, and eternal: the underlying ground or Substance, the ultimate Reality behind the appearances. However, this conception of //dao// as transcendent turns out to be a presupposition of the reader or translator rather than implicit in the text...the fundamental status of //dao// cannot be taken to be that
of a ground or substance beyond the world of appearance. It is an integral aspect of the way the world is that remains firmly embedded within those natural processes themselves, not standing mysteriously aloof and beyond them as an absolute ground of Being.<<ref "8">>
<<<

Dao is surely a pregnant word. I must pay close attention to its delivery. I worry we are only taking up metaphysics when it suits us here. To say the least, I'm not pleased with this definition. It doesn't say anything to me yet. I think the goal is to avoid problems similar to that of transcendent yet paradoxically personal God/substance interacting with, integrating into, and permeating the natural world. Dao must be "natural," but so far, we have not escaped buffet ontology.

<<<
Moreover, when “//dao//” is used verbally in early texts, it is more often used to mean “to guide” and “to lead.”...the way is formed by being walked: the process of walking the way is the coming into being of the way itself, suggesting that the way is understood not as a static object but as a process...it can refer to an explicit explanation or statement of the way, and eventually even takes on the meaning “to say.”...//Dao// is guiding discourse: a way of understanding the world, of dividing, characterizing, and evaluating it that will function as a guide for our behavior. Different daos make competing claims about the best way to divide the world and the best way to engage in it successfully...claims about dao are actually claims about the ability of different systems of distinctions to capture the way the world is and function as guides for behavior.<<ref "9">>
<<<

I feel I must continually ask the timeless question: is there normative content here? If yes, I have a flurry of standard follow-up metaethical questions (which I am skeptical can be answered to my satisfaction). If no, then what is meant by guidance?

I worry the word //Dao// means whatever we want it to mean. Do you see a tough problem? Apply the word //Dao// to it, and voilà, you've done it. You've solved the mystery. Congratulations! Oh, you don't like that "way"? Great, try another Dao. There are many manifestations. So, if not The Way, then The Ways, its all the same thing in some sense. What about "The Way of the Ways?" Is there a decision procedure or explanation for which is best? What is that "Way?" Ad infinitum. 

I fear the //Dao// says nothing new to me. In fact, I worry it only ambiguates and detracts from the models I already have (which, admittedly, do not work either in important //ways// [ha]).  

That said, I must be charitable. This could still easily be right. Maybe //Dao// just means: being practically philosophical or engaging in the practice of metaliving. Or maybe the //Dao// is to be located at the very intersection of normativity, ontology, and epistemology.

Ugh, but, I can't let it go. As previously stated: 

<<<
Philosophers such as Huizi, who had a tendency to get
lost in abstract paradoxes and contradictions, were criticized dismissively and remained relatively uninfluential precisely because their philosophies lacked, or were believed to lack, pragmatic relevance.<<ref "10">>
<<<

So he wasn't influential. That doesn't mean he was wrong. But, if we are to say, well, that isn't //really// Daoism, then I take it that the //Dao//, by definition, is about coming to terms with the absurdity of the world in a constructive, peaceful, organic sense. It is as though we are attempting to be stoic about the paradox of life, as if the foundationlessness of philosophy is its foundation. Perhaps it sounds metamodern. It is ultimate pragmatism, truth be damned. But, what if eternal wrestling is actually //The Way.//

Part of me is deeply annoyed by the indeterminacy, definition-resistance, nebulousness, and borderline intrinsic relativism of the concept of Dao. Why should I not think this is a bunch of bullshit wrapped up in mystical, scamlike intangibility, an ever-shifting decoration of thought-terminators with no actual substance? It feels like vaporware philosophy, like there is nothing to actually hold onto.

Of course, I must go back and remind myself: "remember your charity, h0p3." Doubt is always the splinter in my mind. Perhaps I just need to "chill," "let it go," and "let it come to me."











-----------------

<<footnotes "1" "Ibid., vii">>
<<footnotes "2" "Ibid., ix">>
<<footnotes "3" "Ibid., 1">>
<<footnotes "4" "Ibid., 2">>
<<footnotes "5" "Ibid.">>
<<footnotes "6" "Ibid., 4">>
<<footnotes "7" "Ibid., 15">>
<<footnotes "8" "Ibid., 21-24">>
<<footnotes "9" "Ibid., 25">>
<<footnotes "10" "Ibid., 22">>
<<footnotes "" "Ibid., ">>
You might often find legal access to your content, but when you can't, then you may have to pirate it. I've tried a lot of tools, sites, and communities. Few of them are worthwhile. For every item on this list, there are probably 10 replacements, alternatives, and complements I've tried which aren't listed. This is what I think is worthwhile, permissible, and practical. 

*Books
** I highly covet my book sources. It's //so fucking hard //to find worthy, long-lasting book sources. Ultimately, if I'm in deep need, I search through every piracy tool/site/network on this wikipage for books. You should try these first though, since they have the highest success rates for me.
** ebooks.wtf: https://ebooklogin.com
***Previously, https://ebooks.farm. I believe this is the lesser version/remake of https://library.nu (the best library I have ever used in my entire life [a modern Library of Alexandria]; I literally shed tears on its takedown). 
***This site clearly exists to make money. Someone makes a very good living off this site. Too often, it is the only place I can find a copy of a book though.
***They seem to have a working model for acquiring content. This is obviously far closer to what a morally acceptable version of book publishing model should look like (although, I think this is exactly what taxes should be paying for).
***It used to be a much more hidden community. They may not be able to hide their operation well enough, I fear.
**Imperial Library of Trantor: http://xfmro77i3lixucja.onion/
*** Tor hidden site. 
*** Relatively small collection, but uniquely curated and catalogued.
*** Seems highly respectable to me.
** Libgen: http://gen.lib.rus.ec/
*** The distributed, open Library of Alexandria community right now.
*** It is also the longest standing of these services due to its model.
*** This is the first place you should check.
** Mobilism: https://forum.mobilism.org/
*** I've had an account with them for a long time. I don't care for it. I would only search here if I were desperate. Shady AF.
** Myanonymouse: https://www.myanonamouse.net
*** Only Bibliotik might compete in the private tracker world, but this is easy to get into, extremely easy to maintain a good account, very friendly (perhaps the friendlist tracker community I've ever been in), and has significant content. 
**IRC
***Undernet
****Bookz
****ebooks
***~IRCHighWay
****ebooks

* IRC
**This classic isn't going away for chat, and it may never. It just works. Small, realish-time communities pop up all the time. The protocol is very common. I lack the social skills (or at least the will power) to penetrate the darker parts of IRC social networks. I believe darker communities are moving to more appropriate tools though. All of that said, IRC piracy has been slowly dying for decades, but it still isn't dead.

*P2P (in the standard sense)
** For the truly desperate. If walking through sewers is necessary, then it's necessary.
*** You should see this as a collection of networks which different tools access. Some tools can access multiple networks. Some tools make their own networks, etc.1
9661

The objectively best combination of Void and Rainbow (i.redd.it)
submitted 4 hours ago by whatcouchman (390,592) 1491062850.32
**aMule
*** Clean program for eD2k and Kademlia network families. Not as automated as I'd like.
**~ApexDC++
*** This is my favorite client.
*** I'm very inexperienced with these networks. Most are foreign, there are significant requirements to participate in many communities, and it looks like there are social ladders to climb (and perhaps some actually worth climbing). Protect yourself. My gut tells me there are some dangerous people on these networks. I would not hunt here unless I was truly desperate.
**Ares
*** Shady AF. Any fucktard can use it though. It has its own fairly large network, so it's worth at least having access. 
**Shareaza
*** Piece of shit software in many ways. Fairly configurable though. It hits the major gnutella networks (plus eDonkey). 
** Soulseek
*** It has its own network. The best 'standard' P2P network out there right now. Amazing for music. 
*** Try this one first!

*Piracy Source Curation
** The piracy landscape is always in flux. It is an arms race. It is an ever changing set of distribution, organization, and incentives models. A good pirate must constantly be on the lookout for new sources, maintaining their current sources, and shittesting.
**Torrent Forums
***Every private tracker will have a forum. If you aren't a regular user, you should still periodically sweep through. You may find the keys to new private sources.
***

*Streaming
**Music
***Not actually illegal. You can rip if you want. If you don't stream, I suggest ripping from official hosting services (e.g. Youtube), SoulSeekQT (of the self-contained P2P networks), torrenting, "filetype:" searches on Google, and file search engines. Music is everywhere. As a sidenote, there is no https://what.cd anymore, but we may eventually see a successor.
***Due to a tragedy, my redpilled postmodern view on aesthetics, and my evolving understanding of the nature of music and the human brain, I've stopped giving a shit about carefully curating music in a way. That isn't to say I don't listen to music. I listen to it all day, everyday. I just can't be bothered to rebuild after my tragedy: I had saved my music since 1997 on my computers+devices, and I eventually lost (despite RAID) a 500GB mp3 collection (nobody used FLAC back then, so this was a huge, hand-picked collection). In a way, it was a good thing. I feel far less defined by my music collection. I do save some music, but not much anymore. I have some music around just in case I don't have the interwebs, but when don't I have interwebs? At this point, I want automated curation. I don't have the time or heart to find my own music anymore. Streaming services which automagically develop playlists are perfect in this way.
***Use uBlock Origin, and consider browser extentions/scripts for decrapifying the streaming experience
***Pandora: https://www.pandora.com/
**** I have almost 7,000 hours listened on Pandora. They really make it absurdly simple. You participate in the curation process in a very minimal way. I adore it.
***Spotify: https://play.spotify.com
***Soundcloud: https://soundcloud.com
***Audiosplitter: https://audiosplitter.fm/
**** Interesting model, no doubt. It's basically a wrapper on Youtube.


*Torrenting
**Methodology Preferences
***Build and use a seedbox on a VPS in another jurisdiction. I still prefer ruTorrent to Deluge (except for certain kinds of ratio building).
****Use the following bash script (with lftp), [[ for constant one-way multi-threaded, multi-segmented syncing from your seedbox to your HTPC/NAS. 
**** If you can't have or don't want a seedbox, then a VM with a VPN that has been properly firewalled, automated, and locked down is the next best option.
***Do the minimum to keep your accounts in goodstanding. Make sure you don't get kicked out for inactivity. 
*** For a tracker worth having, rent a seedbox for a month to build insane ratio. 
*** For a tracker you could afford to lose, consider cheating your ratio. It can be hard to find good cheating tools, and it's important that do you it intelligently. I've yet to be caught. Make sure your accounts are completely compartmentalized just in case.
*** I strongly suggest automating your entire process.
**** Automate the generation of ratio (a number of considerations here)
**** Automatically grab content you want.
**** Make it one-click from browser to seedbox to your library. Seriously. 
**Public
***As usual: give back. I have 2 Petabytes uploaded, so I'm good for a while (my ratio should be good for a decade or two, I assume). Also, I'd like to give you a friendly reminder to protect yourself. You need to use an internet condom (VPN, seedbox, or other proxy) at all times when using these sexy pirate holes. 
***Torrent Project: https://torrentproject.se/
**** At this point, a classic. It's on the order of what isohunt had achieved many years ago. 
**** As usual, use adblockers and privacy tools. 
***Zooqle: https://zooqle.com/
****If your internet bullshit-detector sucks, this seems a reasonable place to find safe/verified content.
****High-coverage public indexes with reasonable RSS options are rare. 
**Private:
***What counts as being private? Is it requiring registration? Is it requiring a certain degree of effort? Is it in the countermeasures the community/owner takes to hide users or avoid being taken down? I don't know. Consider these semi-private or borderline public if you need to.
*** I've had a ton of private trackers. Dozens. Most are ultimately not worth the effort. I honestly don't want to put in the work to get into any of the conventionally "top" private trackers. It requires socializing I'm not interested in doing. I realize they offer better organization of their content, they can sometimes have nicer encodes (or at better at weeding out the bullshit), and they have niche and very hard to find content when they are specialized. This is generally replaceable for me though. The only niche content I ever really need access to is software and books though. When it comes to video and music, I'm far less picky. There comes a point where the human ear and eye can barely tell a difference, at least for uncultured swine like me.
*** IPT: https://iptorrents.com
**** I've used them for around 7-8 years. They have a well-earned terrible reputation amongst the drama-oriented piracy scene. Ultimately, like most people, they are incredibly shady and not a nice group of people on the internet. Their scam-generated community does result in one of the largest content libraries I've ever seen on the internet though. Nothing even comes close.
***TL: https://www.torrentleech.org
****This place has only become shadier over time. It may just go the way of IPT. It obviously makes a lot of money off the leechers. It has a fairly large content base though. Generating ratio isn't too hard, but it isn't braindead easy either (although, they've made a it easier over the years). I can't blindly download a TB here though like I can at IPT.

* Usenet
** You can acquire free access. 
** It's old school, but also seems to poorly compete with torrent communities. 
** Use this when you are desperate.

* Web File Search Engines
** You should technically use an internet condom (a proxy of some sort) for these. Because they are indexes and highly centralized, I believe attackers are more likely to go for a takedown than go after users though. In time, this may change (we'll see what Trump does).
**FTP
***Napalm FTP Indexer: https://www.searchftps.net/
***Filewatcher: http://www.filewatcher.com/
** Filediva: http://www.filediva.com/
*** Search many major freehosting services.
** Filechef: http://www.filechef.com/
*** Broad index.
** Google
*** Google-fu will once in a while net you something that just can't be found anywhere else. I've found their ranking algorithm has made this less effective with each passing year though. I've not found a standard search engine to replace them though. They have a monopoly on the human capital (and likely the political and logistical capital) necessary to provide relevant search results. 
** Special filetypes
*** PDF-Giant: http://pdf-giant.com/
**** Magazines
What do you get when you cross a highway with a flock of sheep?

A flock of dead sheep.

--------------------------------------------

Like most people my age, I’m 29.

--------------------------------------------

What is a vampire’s favorite dessert?

Vampires aren’t real.

--------------------------------------------

Haikus are easy, 

But sometimes they don’t make sense. 

Refrigerator.

--------------------------------------------

How many dead babies can you fit in a standard-sized bathtub?

17

--------------------------------------------

So this guy walks into the doctor’s and says, “Doctor, it hurts when I poke my leg like this.”

The doctor says, “Yes, you’ve shattered both your kneecaps. You’ll never walk again.”

--------------------------------------------

Why do black people like fried chicken?

Because it tastes good.

--------------------------------------------

What did the homeless man get for Christmas?

Nothing.

--------------------------------------------

What did one lawyer say to the other lawyer?

“We are both lawyers.”

--------------------------------------------

What did my grandpa say just before he kicked the bucket?

“How far do you think I can kick this bucket?”

--------------------------------------------

Why did Sally fall off the swing?

     She has no arms.

Knock, knock.

     "Who’s there?“

Not Sally.

--------------------------------------------

A teenage boy is getting ready to take his girlfriend to prom.

First, he goes to get a tuxedo, but there’s a long tux line at the tux shop. It takes forever, but he gets the tuxedo.

Next, he has to get some flowers so he goes to a florist, and there is a huge flower line there. It takes forever, but he gets the flowers.

Next, he heads to get a limousine. Unfortunately, there is a long line at the limo rental office. It takes a long time, but he rents the limousine.

Finally, the day of the prom comes, and the two are dancing happily and having a good time. When the song is over, she asks him to get her some punch. So, he heads over to the punch table, and there is no punchline.

--------------------------------------------

A grasshopper hops into a bar. The bartender says, “Hey! We’ve got a drink named after you.”

The grasshopper says, “What? Bruce?”

--------------------------------------------

What did the boy with no arms and no legs get for Christmas?

Cancer.

--------------------------------------------

What is green, fuzzy, and would kill you if it fell from a tree?

A pool table

--------------------------------------------

The Brit throws out a bag of tea, explaining to the confused others, “We have so much tea in England, we can just throw it out.”

The Mexican proceeds by throwing a bag of peppers out, explaining “We have so much peppers in Mexico, we can just throw it out.”

The American proceeds to throw the Mexican out of the plane.

“Why did you do that?!” exclaimed the Brit.

The American turned around and said, “He killed my wife.”

--------------------------------------------

Why did the chicken cross the road?

In search of a society where he can live in peace without having his motives constantly questioned.

--------------------------------------------

A man walks into a bar.

He’s an alcoholic, and it’s destroying his family.

--------------------------------------------

What did Batman say to Robin before they got in the Batmobile?

“Robin, get in the Batmobile.”

--------------------------------------------

What’s red and smells like blue paint?

Red paint

--------------------------------------------

A horse walks into the bar and the barman says, “Why the long face?”

The horse, unable to speak English, shits on the floor and causes substantial damage before it can be removed.

--------------------------------------------

How do you get a clown off a swing?

Hit him in the face with an axe.

--------------------------------------------

Do you know the reason Michael J. Fox makes really good milkshakes?

Because he uses the best ingredients.

--------------------------------------------

A gorilla walks into a bar and asks the bartender for a drink. The bartender finds this very peculiar and realizes he is dreaming. He then wakes up and tells his wife about the ridiculous dream he just had. His wife just ignores him. 

He rolls over and starts to sob because he knows his marriage is in shambles.

--------------------------------------------

How do you make a plumber cry?

Kill his entire family.

--------------------------------------------

What’s funny about four black guys in a Cadillac driving off of a cliff?

Nothing. They were my friends

--------------------------------------------

A horse walked into a bar.

Several people got up and left because they spotted the potential danger in the situatio

--------------------------------------------

Knock, Knock.

Who’s there?

Dave.

Dave who?

Dave proceeds to break into tears as his grandmother’s Alzheimer’s has progressed to the point where she can no longer remember him.

--------------------------------------------

I like my coffee like I like my slaves.

Free

--------------------------------------------

What do Santa Claus and David Cameron have in common?

They’ve both got beards, except David Cameron.
//Feel the angst, ennui, and kek of an edgelord. It burns. //


I'm sensitive to these aphorisms, so I keep them here. I am not claiming that I agree to every detail of these quotes (although, for the most part I do). Even in those I disagree with, I think there is something worth exploring.

Aphorisms are a poor-man's philosophy. They are the fortune-cookie messages we treasure. Admittedly, few things can or should be expressed in aphorisms. With that caveat in mind, I think we all adore the precision, wit, and efficiency of aphorisms. They are snappy, powerful shortcuts in our reality maps. I think they are useful to collect and reflect upon as well. They aren't meant to be dogmatic mantras, but instead rules-of-thumb with which we test ourselves and the world. 

For the record (lol), I don't give a shit about attribution. None of these quotes are mine, so don't feel like I'm lying or plagiarizing (that would be absurd). Also, my categorization is oversimplified and has much overlap, but it does a good enough job.


!! Responsibility

<<<
A lack of planning your part does not constitute an emergency on mine.
<<<
<<<
Not my circus, not my monkeys.
<<<



!! Relationships

<<<
Care about people's approval, and you will be their prisoner.
<<<
<<<
Friends deserve my honesty; strangers deserve my courtesy.
<<<

!!Computing

<<<
AI has by now succeeded in doing essentially everything that requires ‘thinking’ but has failed to do most of what people and animals do ‘without thinking.'
<<<

<<<
You are not expected to understand this.
<<<

<<<
You can't code away their wealth.
<<<


!!Empathy

<<<
We hate some persons because we do not know them; and will not know them because we hate them.
<<<
<<<
The friend is the man who knows all about you, and still likes you.
<<<
<<<
I don't like that man. I must get to know him better.
<<<
<<<
It is a wise father that knows his own child.
<<<




!!Epistemology

<<<
You can't reason someone out of a position they didn't reason themselves into.
<<<
<<<
That which can be destroyed by the truth should be.
<<<
<<<
Those who begin by burning books will end by burning people.
<<<
<<<
An expert is a man who has stopped thinking - he knows!
<<<
<<<
We are drowning in information but starved for knowledge.
<<<
<<<
Knowledge is no guarantee of good behavior, but ignorance is a virtual guarantee of bad behavior.
<<<
<<<
Intuition is the supra-logic that cuts out all the routine processes of thought and leaps straight from the problem to the answer.
<<<
<<<
Intuition becomes increasingly valuable in the new information society precisely because there is so much data.
<<<
<<<
Virtue is an angel, but she is a blind one, and must ask Knowledge to show her the pathway that leads to her goal.
<<<
<<<
Virtue is knowledge
<<<
<<<
If you don't read the newspaper, you are uninformed; if you do read the newspaper, you are misinformed.
<<<
<<<
It is impossible for a man to learn what he thinks he already knows.
<<<
<<<
All schools, all colleges, have two great functions: to confer, and to conceal, valuable knowledge. The theological knowledge which they conceal cannot justly be regarded as less valuable than that which they reveal. That is, when a man is buying a basket of strawberries it can profit him to know that the bottom half of it is rotten.
<<<
<<<
Education is learning what you didn't even know you didn't know.
<<<
<<<
Science is organized knowledge. Wisdom is organized life.
<<<
<<<
Knowledge is of the past, wisdom is of the future.
<<<
<<<
The eye sees only what the mind is prepared to comprehend.
<<<
<<<
It is wiser to find out than to suppose.
<<<
<<<
Truth passes through three stages: first, it is ridiculed. Second, it is violently opposed. Third, it is accepted as self-evident.
<<<
<<<
I do not believe in ghosts because I have seen too many of them.
<<<
<<<
The foolish and the dead alone never change their opinion.
<<<
<<<
The man who dares to tell the truth is called at once a lunatic and fool.
<<<
<<<
 If you’re going to tell people the truth, be funny or they’ll kill you.
<<<
<<<
Write drunk, revise sober.
<<<
<<<
History is a set of lies that people have agreed upon.
<<<
<<<
If you think education is expensive, try ignorance.
<<<
<<<
Thinking is the hardest work there is, which is probably the reason why so few engage in it.
<<<



!! Existentialism

<<<
Death is just as meaningless as life, so just keep living.
<<<
<<<
After a while nothing kills you on the inside.
<<<
<<<
When you know who you are you are freer to be who you are not.
<<<
<<<
We are all broken. That’s how the light gets in.
<<<
<<<
Life is hard and then you die.
<<<
<<<
Don’t cry because it’s over; smile because it happened.
<<<
<<<
The two most important days in your life are the day you are born and the day you find out why.
<<<


!!Mental Health

<<<
Depression lies.
<<<



!!Morality and Politics

<<<
Do unto others as you would have them do unto you.
<<<
<<<
Be excellent to each other.
<<<
<<<
First they came for the terrorists, but I didn't stand up because I wasn't a terrorist. Next they came for the pedophiles, but I didn't stand up because I wasn't a pedophile. Then they came for the privacy conscious and I didn't stand up because their foot was on my back.
<<<
<<<
Socialism never took root in America because the poor see themselves not as an exploited proletariat, but as temporarily embarrassed millionaires.
<<<
<<<
I am somehow less interested in the weight and convolutions of Einstein's brain than in the near certainty that people of equal talent have lived and died in cotton fields and sweatshops.
<<<
<<<
Justice will not be served until those who are unaffected are as outraged as those who are.
<<<
<<<
Knowledge is power. Information is power. The secreting or hoarding of knowledge or information may be an act of tyranny camouflaged as humility.
<<<
<<<
The 'trickle-down' theory: the principle that the poor, who must subsist on table scraps dropped by the rich, can best be served by giving the rich bigger meals.
<<<
<<<
Privilege is the greatest enemy of right.
<<<
<<<
Justice is never given; it is exacted and the struggle must be continuous for freedom is never a final fact, but a continuing evolving process to higher and higher levels of human, social, economic, political and religious relationship.
<<<
<<<
It is not fair to ask of others what you are unwilling to do yourself.
<<<
<<<
Deviation from the norm will be punished unless it is exploitable.
<<<
<<<
Many groups that have the power to make life decisions for others don't ever have to live out the consequences.
<<<
<<<
He who allows oppression shares the crime.
<<<
<<<
It is no measure of health to be well adjusted to a profoundly sick society.
<<<
<<<
Hunger makes a thief of any man.
<<<
<<<
The mass of mankind has not been born with saddles on their backs, nor a favored few to ride them.
<<<
<<<
Find out just what people will submit to, and you have found out the exact amount of injustice and wrong which will be imposed upon them; and these will continue until they are resisted with either words or blows, or both. The limits of tyrants are prescribed by the endurance of those whom they oppress.
<<<
<<<
When you’re accustomed to privilege, equality feels like oppression.
<<<
<<<
An appeaser is one who feeds a crocodile — hoping it will eat him last.
<<<



!!Work

<<<
I would rather die of passion than of boredom.
<<<
<<<
Those who wait until circumstances completely favor his undertaking will never accomplish anything.
<<<
<<<
Either write things worth reading or do things worth the writing.
<<<



!!Virtue
<<<
We first make our habits and then our habits make us.
<<<
<<<
We shape our tools, and thereafter our tools shape us.
<<<
//Shakespeare, Nietzsche, Laozi, Twain, Franklin, Chesterton, etc. seem to be doing something right. We must collect, investigate, prune, and wisely apply terse rules of thumb and insight.//

I take aphorisms, epigrams, maxims, one-liners, kernels of thought, and compact intuitions to be bits, nuggets, and essences to inspect, germinate, and unpack. They are gateways to walk through with exceedingly complex thought trees emanating from those doorsteps. There is a special beauty to them, like the fabled aesthetic elegance of mathematics, e^^iπ^^+1= 0, or the beauty of fundamental equations in physics, e = mc^^2^^.

Intuitionism, the use of our fastminds, is the motivator and decision procedure in casuistry. Intuitions pose a conflict of interest and force us into circular reasoning, but they also pose an opportunity to simplify and clarify, to hold our theories in check and ground ourselves. Ultimately, effective systematic philosophy must explain what is right, wrong, coherent, or incoherent about common sense, wit, and the cleverness stored in brevity.<<ref "1">>

* [[Aphorisms]]
* [[Common Sense]]
* [[One-Liners]]
* [[Irony, Absurdities, Self-Reference, Contradiction, Necessarily Impossible, Circularity, Regress, and Paradox]]
* [[Words, Phrases, Definitions, and Concepts]]

-----------------

<<footnotes "1" "Or maybe that's just what my intuitions are on the matter, and I can't escape it.">>
I want to apologize for what I said in our last meeting and for not staying in contact with you until Christmas. I was not being as empathic as I want to be. My goal is to be deeply empathic, especially with those I love you. I'm really sorry. I hope you can forgive me. I'm doing the best I can with what I have, even though it hasn't been sufficient. I hope I can undo the damage I've done. 

I thought I was allergic to you. I realize that much of who I am is a reflection, reaction to, and consequence of who you are. My crucial mistake: I didn't like myself, and I took that out on you. I saw in you what I saw in myself. I've been allergic to myself. I need to adapt. I've been working really hard to reintegrate myself and put my life back together. I'm sorry I said what I did. There are times where we would sacrifice a great deal to take our words back, and I'm incredibly sorry that I can't unsay it to you. I lacked the empathy in that moment. That is not who I am trying to be. I'm very sorry. 

You may be asking, what about the other stuff we spoke about in those two days? Are you going to apologize for all of that? You may not like this part: I apologize for the way I said it, the place I was coming from when I delivered the content to you. A suicidal man with no sense of purpose is not always in the state of mind he wants to be in. I felt like a trapped animal in fight-or-flight mode, and I did not kindly and carefully explain myself. Unfortunately, I still agree with the vast majority of the content of what I said. I wish I said it in a way that generated mutual understanding instead of anger. I'm sorry that I've been a poor communicator with you. 
When say you aren't going to "revolve" around me, I'm convinced you mean you aren't going to take the time to empathize with me.
//See: [[Trying to Be Right]]//

I remember a kid in my second logic class (when I was in school, not when I was teaching) who went super "deep" on the nature of logic. He roughly asked why we should think logic is objectively true? This is actually a great question: it spawns many valuable problems. Whether or not this kid was smart in how he asked his question and what he thought he meant by his question are irrelevant; the fact is that his question is a crucial one near the foundation^^tm^^ of the intersection of epistemology, ontology, and ethics. What makes logic normative? Even more importantly, what makes reason normative?

Even if we wanted to deny the Categorical Imperative (the "right" maker), we would still have the Hypothetical Imperative (the "good" inference maker). If B is necessary for A, and if you want A, then you need B. It's a maxim-container, the instrumentalizing part of our ethical reasoning, and deeply intertwined with what it means to be rational, reasonable, and logical. It is what being instrumental is all about. You are irrational when you don't take the means to your ends. Is being irrational immoral? Well, that's a question for the CI (which hilariously, by definition, claims it is moral: "Reason" is the ultimate weasel word in Kantian thought).  Is the HI normative if there is no CI? Eh, no, not really. But, I think very people would deny the normativity of HI in much of their lives. Logic has the same thing going on.

Of course, how can you but beg the question of a=a to even begin to say or infer anything? These are hardcoded, genetically-based, innate memes we are born with, and the seem independently true of us as well (I realize I'm running over philosophical landmines here). Even to attempt to argue against logic requires logic.

Similarly, whatever counts as reason requires reason. You can't argue against reason without already assuming reason as the foundational differentiator, the decider, the standard we should measure, make, and understand arguments by.

I fear people who argue against reason itself though. As far as I can tell, it takes a technical argument in prudential epistemic normativity (and unique contexts in which the utility calculation results in an ignorance is bliss principle and unexpected exploitations of the placebo effect) to justify the confabulation that reason can be normatively overridden (and even then, I think we are simply redefining and opening the scope of Reason). I don't think most people mean anything like this when they argue against reason though. 

Why is reason not the standard? What do you mean by reason? Why should I think your definition of reason is better than mine? Of course, I don't see how I can conclude you are right about the nature of reason without employing my own standard of reason (and vice versa). We all think we are right, and we all have to be convinced on our own terms. It's a postmodern problem. There may be ways to escape it, but I don't see how reason isn't the fundamental cause of escaping it.

In any case, I am certain of this: if we are to successfully argue against reason, it must be upon the back of reason. We must start with reason, and only while employing reason through a hermeneutic circle recognize  the limits, futility, fundamental problematics, insufficiencies, or non-normative status of reason.
* [[Books]]

* Comics
** [[Online Comics]]
** [[Graphic Novels]]

* [[Games]]

* [[Humor]]

* [[Music]]

*Video
** [[Stand-up Comedy|Stand-up Comedy Collection]]
** [[Documentary|Documentary Collection]]
** [[Television Show|Television Show Collection]]
** [[Movies|Movie Collection]]
** [[News|News Video Collection]]
** [[Psychedelic|Psychedelic Video Collection]]

* [[Weirdcore]]
Blue pills

Meritocracy. It feels like a redpill, but it's coming from a weird direction.

The reason we should favor meritocracy is because we want to maximize our utility. We should give the most credit and power to those who deserve it most. What makes us all happier? That's the merit, right? Veil of Ignorance your way into it. 


------------------

When I'm high and I have a lower IQ, am I training myself while having a lower IQ? Does it affect my the faster acting parts of my brain in negatively permanent ways that I'm not aware of? Is this training worth having? Sometimes, yes. It wakes us up. Maybe we learn to not trust our opinions so much while high. We understand that feeling happy while we have an opinion formed doesn't mean that opinion is a good one. 

Beyond my obvious genetic predisposition (it runs in the family), my abnormalities and inabilities to effectively form theories of mind at a gutteral level in my rTPJ, my systematizing abilities and proclivities, my difficulties in communication, my oversensitivities, and a lifetime of very odd quirks demonstrate my autism. 

I am lucky enough to be able to intellectualize my social life to the point that I'm high-functioning. To some minimal extent, I can "blend in" and be normal with others and even to some extent feel normal myself while doing it. But, upon any minimal investigation, it is clear that I do not fit in almost anywhere or with anyone (barring rare exceptions) with enough depth or integration.<<ref "1">> 

Every single friendship that has lasted required someone who was highly empathic and intelligent enough to understand me, which is necessary to empathize with me. It's why my wife, [[k0sh3k]] is the One, my truest friend. My wife was raised with an autistic savant (and she might be a milder one herself; she's certainly on the spectrum, see: [[k0sh3k's autism]]), and she has always spoken my language fluently and effortless at every turn. In fact, I seemed normal to her in ways that don't make sense (and probably vice versa). I get along with her because she gets along with autistic people (which is also an explanation for how she has long 

It's why MB is one of "the others" to me, a real friend. She gets me, and that's because she is: intelligent, comes from a similar background as mine, and her brother is a diagnosed high-functioning autistic person. We click because she speaks my language, because she is capable of empathizing with me, and I with her. She doesn't judge me. Contrast this to my father (whom I love deeply; I want to repair our relationship).

When my dad says he won't "revolve" around me, I think it's because he has a hard time empathizing with me. I don't think this is due to lacking any standard intelligence (he is a brilliant man in my eyes). I have seen his intellectual prowess, his triumphs and mistakes;<<ref "2">> both require impressive intelligence.<<ref "3">> He is obviously incredibly smart and works hard to understand the world. He's a contrarian and a traditionalist at the same time; he is someone who tends to make me think there are still a handful of conservatives who are neither evil nor fools (a diamond, no doubt).

I think he doesn't understand me though. This may have to do with my autism. It is also obvious that he has serious problems empathizing with others (but not everyone; sometimes he is a very deep empathizer; it depends on a number of factors). He could easily be on the autism spectrum. I am strongly convinced he isn't significantly psychopathic (we are all literally on that spectrum; that's what it means to be a sinner), despite mixed abilities to empathize with me. I think [[Adult Children of Alcoholics]], particularly about having not received empathy himself in much of his life, is one of the keys to understanding who he is though. 

Outside of the the basic homo sapien mammalian stuff (are you experiencing hunger pain?, do you enjoy the feel of the music?, and other fundamental emotions and feelings which we all tend to experience) few empathize with me, and I think that's because they do not see what I see, they cannot step into my shoes, they do not and often cannot make the abnormal kinds of inferences I make (even as they attempt to intuit or gutterally-hypothesize my theory of mind). Sometimes its abnormal for intelligent reasons, and sometimes it isn't. This isn't me stroking my ego; I think it is autism. I am very abnormal (deviant in the normatively-neutral sociological sense). Of course it will be difficult to empathize with someone who is really different. 

I think it is as difficult for for autistic people to empathize with others as it is for others to empathize with autistic people. Our rTPJ's just activate differently. I implore you  to not commit the Humean naturalistic fallacy here: Is does not imply ought. Unfortunately, a charitable interpretation of the Humean Guillotine is true, as far as I can tell (it is an important philosophical tentpeg in this discussion). The myth of normalcy is best understood by this Humean Law. Normal and Normative are obviously not the same.

Admittedly, I don't make it easy to empathize with me either. If EQ were a real thing, or whatever part is real, (the science does not verify the self-help + business literature, but I still think there is something right about the kernel of it [I think Emotional Intelligence is a real thing; it is simply very poorly described in the sciences for a bunch of reasons {but that is changing}]), mine has enormous variance. I'm underdeveloped in my social programming in ways that do not make sense outside of autism. On the Autism Spectrum, I believe I'm somewhere between Asperger's and possibly a mild form of PDD-NOS.

-------------------------------------------------

''What can't I do because I am autistic?''

Being a eudaimonic lifehacker requires being an empathizer, right? That's going to be pretty hard to accomplish when you aren't a good empathizer. I often fail to empathize with myself (see executive functioning problems) and others for many reasons, and I think autism is a significant reason. I do not form theories of mind in the way others do. 

I must still strive to be as empathic as I can. And, at least initially, we should see that the autist empathizes with the wrong representation of someone's of mind, but not that, of course, is that the same thing as saying they don't empathize.

Further, I must accept that I am not a talented empathizer as is standardly conceived. That doesn't mean I don't empathize, but I do it poorly in significant ways. This thing that I seek, I'm genetically (and perhaps memetically-conditioned) to suck at it in important ways (thankfully not all ways!). My failure is not always up to me. It isn't always on my shoulders. I must stoically accept those things which are outside my control. That doesn't mean I'm blameless (although, if you saw what I did in philosophy, you would like take that position up for all human agency). Nobody is perfect. 

------------------

<<footnotes "1" "I can hear my dad now complaining about those who empathize with themselves. He lacks empathy for himself. I must empathize with him. How else can I accept him?">>

<<footnotes "2" "I mean this word without judgment. My goal is to be charitable in my interpretation of his life. Honesty may even be the wrong word. It slopes for me.">>

<<footnotes "3" "Don't get me wrong: this pot-kettle-black + takes-one-to-know-one a millions times over. I'm in no place to even delusionally condemn him for something that is obviously a deeper flaw in myself. It's clear I do listen when my dad talks (and mom as equally), although they may not think I do. I have paid very close attention to his arguments, closer than he suspects, imho. I think it is rare that I listen to people, but I do listen to what my parents say. I could not be as hurt by them as I am unless I did (I'm not sure if it goes the other direction, it may). Sometimes I don't want to listen because it hurts. I'm asking them to see why it hurts and empathize. I don't think they will be able to see it. What do I ascribe to this inability to empathize: malice, ignorance, or a lack of moral responsibility? It feels like those are my only options here. One could claim I am in a false-trilemma, but I want to deeply understand the answer which eludes me because it will solve crucial philosophy problems for me (a fundamental source of disunity in me). I don't like any of the options in the trilemma, and I want to be wrong about it.">>
One interesting thing about discovering my autism has been the relieving ability to freely admit to myself that I barely understand social communities on the internet. Their network topologies and basic technical use I often understand quickly enough, but the influence of that topology on the social patterns of its members, the power dynamics in these communities, the way in which technology is social, is now understandably foreign to me in some ways. I'm very developmentally challenged in this respect. It's as bad as the fact that I can't remember lyrics to songs in a way that even children and senile people can.  
I always feel more intelligent after speaking to you.

-----------------------------------

You are very modest, and rightly so.

-----------------------------------

Wow, you don’t even look like a Mexican.

-----------------------------------

Your man titties are so perky.

(So are your back boobs.)
```
#!/bin/bash

# Fuck you, crontab!
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:~/bin

# logfile timestamp
date +"%Y.%m.%d-%T"

### Backup of your.file

# Vars
TIME=`date +20%y-%m-%d`
FILENAME=$TIME-h0p3.xyz-index.html
SRCDIR=/foo/bar       
DESDIR=/stuff/things

# Copy and compress
cp -f $SRCDIR/your.file $DESDIR/$FILENAME
cd $DESDIR
bzip2 -f -9 $FILENAME

```
//Notes on Bayesian Confirmation Theory - Strevens//

The epistemic agent assigns what we will call credences or subjective probabilities to different competing hypotheses which explain or predict a phenomenon. These credences are probability values between 1 and 0 (where 1 is certainty the credence is true and 0 is certainty it is false), and they reflect one particular person’s views on the probabilities of hypotheses, events, or their corresponding propositions, however rational. A credence is a psychological property which all epistemic agents have; it is a person’s level of expectation for a hypothesis or event. An agent's attitude to a hypothesis encapsulated in a level of confidence, or credence, that may take any of a range of different values from total disbelief to total belief. 

Credences are thought to account for gambling/betting behaviors in a mathematical way. Presumably, there is little to no space between the probabilistic prescription of these credences and our choices and actions, at least in betting (excepting fallibility, even akrasia must be accounted for by credences). Admittedly, it is odd to "go Bayesian" on ethics. Ultimately, there is a learned, trained, virtue-theoretic set of utility equations we've stored in our fastminds which I take to be credences. It is our slowmind, our frontal lobes, which provide the reasons to think otherwise, to modify our credences.

Agents are assumed to learn from evidence by what is called the Bayesian conditionalization rule. This rule updates your credences in the light of new evidence. As long as you have some particular opinion about how plausible each of a set of competing hypotheses is before you observe any evidence, the conditionalization rule will tell you exactly how to update your opinions as more and more evidence arrives.
I have so many things to be grateful for.

I have to enjoy what I have. 

As dad says, I must suck the marrow out of life.
After moving to Tennessee, while cleaning out my books and notebooks, I actually threw away my college work. My college work sucks. Seriously, I had an awful primary and secondary education. It was a miracle I learned anything living in Kentucky as a boy. 

I first attended Elizabethtown Community College (renamed to ECTCS a long time ago), and there I actually read books that mattered and developed my writing voice.<<ref "1">> However immature that voice was, better late than never. I've never really learned to write extremely well (except for a few technical things), but my lack of skill and knowledge shows very strongly in my work at Berea. That's okay. The college transformation takes time to digest.

Unfortunately, I did not keep copies of everything I wrote at Berea. I literally only have a single semester saved now (my second to last semester). 

* [[2004.09.07 -- Chocolate]]
* [[2004.09.07 -- Candide]]
* [[2004.09.13 -- Summary of Rationality]]
* [[2004.09.21 -- Economics Homework]]
* [[2004.09.22 -- Suffer and Believe]]
* [[2004.09.26 -- Leibniz]]
* [[2004.09.26 -- Job]]
* [[2004.10.01 -- Women of the Old Testament and Euripides’ Plays]]
* [[2004.10.01 -- Mind of the Prisoner]]
* [[2004.10.12 -- A Feminist’s Critique of Nozickian Entitlement Theory]]
* [[2004.10.26 -- The Trial of G-d]]
* [[2004.10.27 -- Seneca, Stoicism, and the Symposium]]
* [[2004.12.01 -- Plantinga: The Free Will Defence]]
* [[2004.12.07 -- Silence]]
* [[2004.12.08 -- Paul and Dante]]

I made a lot of mistakes at Berea, as you can see in the above work, but I also made some incredibly wise choices as well. I met and married my wife at Berea, for which I will be forever grateful. I also studied philosophy which eventually enabled me to rationally escape the faith I was brainwashed to have. 

As you will see, I've found the opiate of religion to be an incredibly addictive meme over the years. Like billions of homo sapiens in human history, the Great Abrahamic Meme was deeply rooted in me, and it has take monumental effort to deracinate it.<<ref "2">> The power of gnosticism and confabulation coupled with a search for meaning (of my past and life in general) kept me imprisoned for a long time.

I look back on these works, and I see why I took the path I did. I feel like I've been a man of incredible integrity. Others do not see it that way, but they really have never stood in my shoes and seen my life through my eyes. 

--------------------

<<footnotes "1" "I regret not saving my work. I kept them for a long time, but eventually disposed of it. I didn't think it would matter. What a shame!">>

<<footnotes "2" "I'm still unbrainwashing myself. It's a process. I still have [[Residual Christianity]] which lingers to this day and a web of inferences that I've not retested effectively enough since my deconversion. It takes years to deconvert, especially for someone who found as much reason as he possibly could for his faith.">>
She was a good woman and a mother to many.
* [[Club Unlimited]]
* [[WASM Tiddlywiki]]
We have complex lives. Ha. Yes. It's true. It is such a simple and obvious sentence that I can barely type it out.<<ref "1">> 

That complexity, the continuous complexification of our lives, is a core existential problem. It is a unique kind of factor in our life equation. Every step we take, a zillion doors open and close. 

Our complexity, our conflict shows itself as a bifurcation. But, this// just is// what problem solving is about. 

Welding our practical and theoretical selves is necessary for unification, but it isn't always possible. We have to accept that we aren't naively monolithic creatures at times. That's what self-conflict is all about.



--------------------------------

<<footnotes "1" "Oh, shit son! That is so deep. /s Snap back to reality.">>

2017 Goals:

*Oryx and Crake
*The Stack: On Software and Sovereignty
*[[An Introduction to Daoist Philosophies]]
* A Guide to the Good Life: The Ancient Art of Stoic Joy
* Systems Thinking: Managing Chaos and Complexity: A Platform for Designing Business Architecture
* The Foundations of Geopolitics: The Geopolitical Future of Russia
//Counting my chickens...I still must have a goal and plan for the future.//

We have a budget. We need to stick to it. We should live fairly Spartanly. We can nearly live off k0sh3k's salary already. The first money we make should go towards getting phones for everyone and a work/travel/living vehicle for me. After that, it is savings gravy. We can do it. We must be disciplined. We have a goal: to be happy. That is a goal that takes time to achieve. We have to build towards it.

We're still near the bottom of Maslow's hierarchy in some senses. I don't mean we are starving or anything like that (far from it). But, we could not accept a single serious catastrophe. Our lives are not secured enough to deal with fundamental emergencies. We have depleted our reserves. That's what I'm going to fix first. Emergency savings is the first step. 

Immediate safety savings goals (in this order):

*5k Checking
*10k Savings
*5k Cash
*5k Cryptocurrency
*5k "Crisis" commodities
** Physically portable, highly liquid, and low price-elasticity.
** These are likely the kinds of goods which sky rocket in value during the worst of times.
**//Prima facie//, I think gold is mistakenly thought to dwell here
*** There are times when we take the jewels, and there times when we leave them behind; this is not crisis proof.
*** There are more functional options.

If the political winds continue to even more rapidly become violent, I may need to find even more fundamental shelter. I could easily see us spending the next 5k prepping. Beyond that, I think it be unreasonable. 

One final point about Safety Savings: it must scale with inflation. This is the only smart way to gauge our emergency position, to not be surprised, and to pay the upkeep cost of aging with our wealth.

Basically, after our initial safety margins are met, we can enter into actual savings to build towards our future beyond merely having the resources to handle the emergencies of the present. It's hard to plan far into the future. There are so many variables to consider, so many risks, unknowns, etc. The major problem at the moment is that we don't actually have our own property/house.<<ref "2">> Finding a place of our own would obviously be the next step.

I want to own a house by 2022. I'm going to work my ass off. I want the stability, comfort, privacy, and emergency readiness of a house. I want a base to work from. I want it before I even start saving for retirement (I'm not convinced we will ever retire [so many moral and political problematics], but if we do, it will be through a very unique combinations of tricks). I want this before I even pay off students loans.<<ref "1">> I see it as a matter of practicality that I secure my family's life before everything else. That is the goal.
 
It is very possible that I will bring in between $40-100k a year gross (large range, I realize, but projecting this far fuzzes my accuracy, and I've not adjusted for inflation yet). By 2022, I should make $160-400k gross, and while I can't project tax rates (particularly with Trump), I will conservatively estimate a 40% tax rate (may also see school loan-based garnishment). Thus, I think $64k-240k is a reasonable possibility. This means I range from just spinning my wheels all the way to banking $160k. Clearly, I will need to push very hard and scrimp like I would in a video game.<<ref "3">>

Assuming the stars aligned, I can outright buy a house (especially if the housing bubble bursts again, assuming rent-seeking capitalists don't eat us alive), and if not, at least provide a very reasonable down payment. 

At this point, we might consider the lateral possibility of nomadic living done correctly. Who else is better prepared besides the nomad? There is something gutteral and Maslowian about owning your own house.<<ref "4">> So many scenarios make the most sense when you have your own place and a place in a geographic community. Roots and relationships are useful (although, Crisis defeats that as well). Perhaps the goal is to have a bit of both. The person with the "go bag" and the base is in the best position. Know what you value, actually be prepared, and protect it.

I should add cosmetics, such as braces for the kids, and other social lubricants. There is money to be spent to make my children appear acceptable to the world.<<ref "5">> Class, status, self-advertisement, one's brand, reputation, Face, how we project ourselves, what it is that others gutterally and instinctually value in us, etc. cannot be written off. We must prepare for this lizard demon. We must respond with the right tools in the right ways at the right time. We must be scientific in our empathic endeavors to enable others to bypass their lizard brains and empathize with us for the right sorts of reasons. This is the only practical option. Unfortunately, at least for now, this is not a fixed cost that I can easily project. I don't know enough. That doesn't mean planning isn't worthwhile. We must think!

In any case, I believe Trump's presidency is a danger to us (I'd think the same for Hillary as well, it would just be a different kind of threat). I would not be surprised by WWIII or other kinds of more complex conflicts that we don't have the ontic+epistemic categories to nicely describe. I need to secure my family while I still can. Prepare for the unknown. I don't mean to lash out in fear or curl up into Red Scare isolationism. I need to find the right balance, the golden mean. I would love an injection of actual practical wisdom^^tm^^ right now. I must train continue to train my empathy muscles for the Crisis, since that is exactly when I will need them most.

Okay, so...hope for the best, prepare for the worst. We see the law of diminishing marginal utility. Wield that principle! It does look odd, I must say. So, I do want an apocalyptic-ready house of sorts (not zombies, but instead ready for a nosedive deeper into economic depression and who knows what else, yes). Admittedly, I've got a spot of "prepper" in me. I think anyone paying attention should be very worried in this way though. Eventually, I'll need safe places to save and invest my wealth (oh, Silas Marner).  

I'm completely open to unconventional housing. I don't give a shit what other people find to be a beautiful house. We can go into the Mac-resale value argument for houses, but it is an important question of whether or not we are here for the longhaul. k0sh3k loves her job. That said, if my previous years are any indication, I will be highly nomadic. So, do I aim for walled-garden Utopia house or comfortable mobility?

We should consider very odd kinds of housing which can be more price efficient, even if it is unconventional and less desired by average people. There are many questions to ask, e.g.: how sustainable, independent, off-the-grid, protectable, secluded, internet-accessible (I've got a lot of neat technical tricks up my sleeve, as long as I'm within a couple miles of a connection) will it be? 

Super-Ideally:

* We will live in the woods, preferably at the top of a hill.
* Trees are nice.
* We will live next to a source of fresh (or filterable) water on or adjacent to our property that would survive global warming effects (not sure how to judge that).
* We will have excellent internet access (while it is there; we can also just build our own networks). 
* We will have an all-in-one greenhouse (complex ecosystem with tilapia farm, etc.) to at least produce a significant portion of our food.
* Solar power generation.
** Moving water or wind may also be small sources of electricity in a pinch.
* Very powerful insulation and resource conservation attributes.
* Gated/Fenced
* A workshop
* A parking lot
* A minimal or non-existant lawn (automated caretaking if we do)
* A pool (as convenient as possible if so)
* Barracks for storing my entire extended family.

Dreaming:

*A hobbit home would be sick. 
**Certain aspects of it would be very energy efficient. There are lots of logistical problems. The stars would need to align.
* A true analogue library (printing, binding, cataloging, storing, etc.)
* Hidey holes, mass storage protected beneath the ground.

Realistically:

*We get whatever price-efficient 3-bedroom place we can find nearby.

In any case, I should avoid the rat race when possible, and when required, engage in it cleverly. I might not have what it takes, but I've succeeded in other microcosms. Let us hope I can scale up when the stakes matter. I will find the cracks in the system, the boundaries of the world. Do not use people, but protect your family. That is why you are alive for now.

--------------------------

<<footnotes "1" "I think everyone is obviously entitled to free education and healthcare from taxes alone. It is obvious we can do this; the various kinds of reasons people give for why it isn't possible tells us something crucial about who they are.">>

<<footnotes "2" "I suppose it depends on the rate of acceleration of the political turmoil we in and heading for. My worry is that one day it will take but a whisper of powerful people to eliminate my supposed legal claim right to property.">>

<<footnotes "3" "I am pushing against enormous economic inertia against the global poor, but I am near the top of the tide and I have the raw intellectual resources to climb out of the chaotic pit. Let us hope my ascension is done morally; I want to be a person of integrity.">>

<<footnotes "4" "Consider multiple shelters and nomadic options be very future planning then. It is always a possibility that we do them all.">>

<<footnotes "5" "We cannot escape our lizard brains, at least not yet.">>
[[Cannabutter Recipe]]
* Decarboxylate Cannabis 
** Pre-heat oven to 220° F  
*** Use oven thermometer 
** Course grind cannabis  
*** Don’t grind it too finely 
** Evenly and thinly line pan/dish with cannabis 
** Air-tight seal pan with aluminum foil 
*** I just make a sealable envelope of foil.  
** Bake for 60 minutes 
*** More time for fresh (wet) product, less time for old and dry 
** Remove from oven, and let it cool  
*** Do not unseal until after it has cooled 
* Clarify Unsalted Butter 
** You want 16 ounces of clarified butter (32 ounces unclarified) for each ounce of cannabis 
*** Clarification will reduce 2 sticks to 1 
** Melt your butter at the lowest possible temperature. 
** Repeatedly scrape off the top layer (thick white, almost foamy semen-like substance) and dispose of it.
** You should have transparently clear yellow butter liquid left.
* Cooking the Cannabutter 
** Add Clarified butter, Water, and Decarb’d cannabis to crockpot 
*** Use 1 cup of water for each pound of clarified butter. 
** Cook for 5-hours on low (make sure it doesn’t get too hot) 
** Stir occasionally 
* Finalize 
** Strain product from crockpot with cheesecloth 
*** Strain remaining pulp with a press 
** Store and cool cannabutter+water liquid in a covered container in fridge 
*** Allow the butter to fully harden 
** Separate the solidified cannabutter from the water 
*** Discard the water. 
** Store your cannabutter 
*** Might be useful to cut into specific portions 
**** 1/8th a teaspoon is a reasonable hit for +6 hours of effect
**** Freeze butter that won’t be used within days. 

Wikipedia says,

<<<
In philosophy and rhetoric, the principle of charity requires interpreting a speaker's statements to be rational and, in the case of any argument, considering its best, strongest possible interpretation.
<<<


I fear I'm forced to claim that so easily dismissed cliché: “you don’t understand me.” Before you write it off, my suggestion is this: when someone tells you “you don’t understand me,” and you have strong evidence to think they are as intelligent as you are, then maybe you have good reason to explore.<<ref "1">> In any case, I believe you need to understand my point of view if we are going to be friends (something you choose) of any serious degree of depth and not merely family (something you don’t choose).

There are those who dismiss the inarticulate. I can see reasons for such an approach. I think this is misguided though. I appreciate the desire for selecting and grading people's perspectives based upon the evidence they can provide in communication. It's a strong inductive force, and a meme that exists because it often generates the best results for individuals sifting for good epistemic signal through the noise. But, even rules of thumb can be wrong. There are exceptions to inarticulacy in our search for knowledge and knowledgeable people.

Unfortunately, when faced with someone’s inarticulacy, we may lack the necessary empathy and charity in our interpretation and exploration of their view. Since I think you don’t have the whole picture, I hope you have the integrity, humility, and wherewithal to temporarily refrain from playing these kinds of fallacious cards:<<ref "2">> 

* You are playing semantics.
* You are simply justifying your behavior.
* You are rationalizing.
* By asking me to understand your point of view, you are asking me to revolve around you.
* Being philosophical doesn't really matter.
* Be practical.
* Get over it.

If this is all you have to say, then the conversation is really at an end. 

In being charitable, you have to 

I'm not asking you to revolve around me. I'm not even asking you to be Straussian towards me (I'd like to think I'd be worth the time still). But, I do need your charity.

I hope you take my inarticulacy with you seriously, and I hope it inspires continued patience and charity in your interpretation. I'm doing my best. That may not be enough. In any case, I believe you have often been patient with me in this respect, and I hope you will continue. At this point, I take us to be engaging in a classic tit-for-tat strategy; a theory I admire because of its empirical strength in generating utility. Patience for patience; charity for charity. If relationships are like bank accounts, we need to make similar deposits to rebuild equity and trust in each other. 


Carnegie-Mellon university professor, empathy for those with depression, who aren't neurotypical. We can't have empathy. 


<<footnotes "1" "There are exceptions.">>
<<footnotes "2" "That isn't to say I'm not guilty of any of them, but I don't think you are qualified (nor anyone else) to reliably distinguish when and where I've made these mistakes in such a large context. It's an intractable postmodern and Matthew 7:5 kind of problem.">>
I have nothing from this time period. All I have are my and others' memories about it. Perhaps I should write an explanation of my childhood.

* 1985-1989 -- Chicago
* 1989-1991 -- Louisville
* 1991-1992 -- New Haven
* 1992-1997 -- Mannsville
* 1997-1998 -- Red House & Wilmore
* 1998-
These are childish pranks and vandalism. 

* For those who still have desktop icons or apps (loo-uh-zers ;P), screenshot, wipe it clean, replace. Watch them click on what only appear to be icons. Lulz.
* Modify sounds clips/files. It is incredibly annoying. 
* Fake dialogues, menus, popups, warnings, etc. are also useful.
* Spam of any variety is hilarious.
* Switch input devices or displays.
* Macro, extensions, or mods which replace text or images with preset trollspam (messaging apps, writing tools, browsers, etc.)
* Ctrl + Alt + direction arrow to flip the screens different directions (rotation in graphics card software works too)
* Tape over mouse sensor, or partially breaking the functionality of input devices.
* Scripts in startup to do something silly; scheduling works too.
* Rickrolling
* Switching buttons on keyboards to spell bad words
* Settings passwords on screensavers, logins, or anything...good times.
* Change a BIOS setting or two. Be nice.


I'm strongly convinced that any kind of computer which duplicated the human brain will experience the things I'm experiencing. It is obvious that it will have a mind like ours, a consciousness like ours, etc. Androids built perfectly are fundamentally no different. Sci-fi Redpilledness knows this. See the experience machines, especially [[The Matrix]] and [[Westworld]]. I believe the China Brain obviously shows us that we consciousness is having the right kind of neural network; the right kind of computer and programming. That's it. Daniel Dennett is correct. 

Beyond that, we should see that reality simulations, like The Matrix, are completely plausible explanations of our existence. For now, we have to be agnostic about them. It may be possible to test The Matrix though. If it is just a computer program, and we're living in it, we are each just data representations and numbers being crunched by the Theory of Everything Laws of Physics algorithms which comprise the simulation, then we must at least be open to the possibility that the program is not well made. 

If the program is not well-made, if it not perfectly designed, it could be insecure. The universe, as a program, may actually have the ability to be hacked. Maybe there are physical buffoverruns, maybe there are various memory hacks or ways to fuzz ourselves into escaping the virtual machine. Perhaps we can hack our universe and machine running it. Maybe there is a "transcendental" to be hacked. If we live inside a giant VM simulation, maybe we can escape that sandbox.

Having a programmed world, of course, does not mean there is a programmer. Thank you philosophy of religion.

Of course, only physicists could get there (except the fuzzing part, which, in a way, anyone with sufficient power might bruteforce [but that would be a very weird religion]). Who else would have the means to hack the universe? You'd need to fundamentally understand it at that level.
An example redpilled, Darwinian view of the evolution of a Christian meme would be the pressure on girls (but not really boys) to remain virgins until their wedding night. Obviously sexist, but obviously has a utilitarian algorithm in it for modifying behavior that is successful enough that it continues to replicate itself as a meme through the minds of those who call themselves Christians (and otherwise). 

What is the redpilled reason for the addictive nature of these memes? 

In this case, it is obvious that some women have historically agreed to the meme "Why buy the cow when you get can the milk for free?" This redpilled meme has existed (and still does) in various Christian meme networks for millenia now. It is about understanding human nature at its core. It is an acceptance of the fact that we are all, to some degree, on the dark-triadic spectrum (which, to me, just is the psychopathy spectrum). It is a way to be utilitarian even in faith. 

It is interesting to see the Redpilled nature of the Bible. I'd love to see a redpill interpretation of the Bible, actually. I'm certainly not qualified to do that, and I doubt anyone is.

Those things which didn't add up to me growing up, which didn't make sense, there are good explanations for them, generally redpilled explanations. 

-----------------------------

One of the reasons Christianity has been so successful as a memetic network living through the societies over time (evolving only when it faces extinction), is that it had this ultimate trump card in Christian action. When one followed through on Christ's call to turn the other cheek, when one forced the executioner, oppressor, enemy, or sinner to face their victim so thoroughly, one had a non-trivial chance to affect change, to convert others, to force mirror-neurons to fire off in empathy for the victims. Essentially, love and empathy from the victim is so unexpected that it forces the human adversary to see The Other as human for even the briefest of moments (at least in some cases). Empathy begets empathy at least 1% of the time, and it does so in places you wouldn't expect. 

Christianity is a mental virus (I've long thought "Viral Christianity" would be a good book title). It is incredibly potent. It is why it spreads so effectively under oppression. The [[Christian Memetic Network Organism]] thrives as a parasite in the poor. It really is the opiate of the masses. It fits the conditions just right.

The "Body of Christ" is literally the persistent identity of the Christian Memetic Network that has parasitically lived for thousands of years through human societies and individual hosts. As a crucial philosophical belief I take up: I think viruses are living creatures, but that means memes are living creatures. Thus, the Body of Christ is literally a living thing to me. Neat, huh?

Modern victims are silent victims though. Truly silent victims in the face of hardcore psychopathy cannot effectively transmit the meme. When you had to face your oppressors in person, when punishment was handed down in person, when the pain on your face could be seen, when it was obvious and direct, the Christian empathy transmission method had a chance to succeed. As we race toward a Solarian-like  world (Asimov), as "The Stack" complexifies our world until no one understands even the outline of what it is, as we approach whatever Transhumanist singularity there is, as the [[Hyperclass]] continue to insulate themselves out of reach, it becomes less and less likely that anyone will actually really see our suffering. We aren't turning our cheek to anyone IRL anymore. The machinations and middlemen and processes which draw and quarter us are automated, done silently and privately, are too difficult to comprehend by the human mind. The source and causes of human suffering are too far removed for the Christian Meme to actually revolutionize anything. 




//See first: [[About, a.k.a. The Opening of the Rabbit Hole]]//

Both occasional and first time readers should pay attention to this page. Note that much of wiki functions with or without KIN and RPIN. This is a specialized narrative.

This is the chronology of the major dialogue between KIN and RPIN on this wiki. Imho, KIN and RPIN form a decision procedure and motivate progress. Perhaps they are an internal form of A/B Testing for me. Here I hope to capture the major movements in my to-and-fro philosophical positioning over the course of time. I should document what feels like the right timeline to me. This is not guaranteed correct, but it is close enough. Sometimes the dialogue is embedded as tags, otherwise as quoted dialogue, and sometimes (unfortunately) embedded in the standard writing and organizing of the wiki itself. Nothing is ever simple, and this is an obvious oversimplification. It represents my long-term train of thought and wrestling. Of course, we could programmatically see the changes as well. But, this is my philosophical metanarrative on this wiki as I see it in broad strokes:

# [[2016.10.17 -- Letter to Mom and Dad]]
# [[About, a.k.a. The Opening of the Rabbit Hole]]
# [[Meditations and Deliberations: 1]]
# [[Adult Children of Alcoholics]], [[Self-Medication]], [[Live Each Day Like It’s Your Last]], [[Residual Christianity]], and [[Arguing Against Reason]]
#[[2017.01.10 -- Letters with R]], [[2017.01.16 -- Letters with R]], [[2017.01.17 -- Letters with R]], [[2017.01.23 -- Letters with R]], [[2017.02.05 -- Letters with R]], and [[2017.02.06 -- Letters with R]]
# [[Realpolitik Speculation]]
# [[Meditations and Deliberations: 2]]
# [[Socialism]]
# [[2017.02.12 -- Letters with R]]
# [[Social Darwinism]]
# [[Metamodernism]], [[Positive Nihilism]], and [[The Ring of h0p3]]
```
#!/usr/bin/env xonsh

# You can set an alias: 
# echo 'alias alarm="~/alarm.xsh"' >> ~/.bashrc
# source ~/.bashrc

from time import strftime

while True:
    try:
        # Take them inputs, biatch
        print("")
        z = input("Your name: ")
        print("")
        x = int(input("In minutes, how long should the timer be? "))
        print("")
        y = input("What are you timing? ")
        print("")

        # Generate the text to speech string
        string = '"' + z + " set the timer for " + y + " on " + str(x) + " minutes."  + '"'
        print(string)
        print("")

        # Check Kodi, then make HTPC talk
        kodicheck = $(curl -s --data-binary '{"jsonrpc":"2.0","method":"Player.GetProperties","params":{"playerid":1,"properties":["speed"]},"id":1}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc)
        if kodicheck == '{"id":1,"jsonrpc":"2.0","result":{"speed":0}}':
            espeak -s 120 @(string)
        else:
            curl -s --data-binary '{"jsonrpc":"2.0","playerid":"1","id":"1","method":"Player.PlayPause","params":{"playerid":1}}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc
            espeak -s 120 @(string)
            curl -s --data-binary '{"jsonrpc":"2.0","playerid":"1","id":"1","method":"Player.PlayPause","params":{"playerid":1}}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc

        # Record log of this action
        current_time = strftime("%Y-%m-%d %H:%M:%S") + " -- " + string
        echo @(current_time) >> .alarm.log

        # The Timer + Console messages
        for i in range(x):
            sleep 60
            print(str(i+1) + " minutes on the " + y + " timer has passed.")
        print("Times up!")

        # Generate the text to speech string
        endstring = '"' + z + "s timer for " + y + " is up" + '"'

        # Check Kodi, then make HTPC talk
        kodicheck = $(curl -s --data-binary '{"jsonrpc":"2.0","method":"Player.GetProperties","params":{"playerid":1,"properties":["speed"]},"id":1}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc)
        if kodicheck == '{"id":1,"jsonrpc":"2.0","result":{"speed":0}}':
            espeak -s 120 @(endstring)
        else:
            curl -s --data-binary '{"jsonrpc":"2.0","playerid":"1","id":"1","method":"Player.PlayPause","params":{"playerid":1}}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc
            espeak -s 120 @(endstring)
            curl -s --data-binary '{"jsonrpc":"2.0","playerid":"1","id":"1","method":"Player.PlayPause","params":{"playerid":1}}' -H 'content-type: application/json;' http://192.168.1.100:8080/jsonrpc

        # Record log of this action
        current_time = strftime("%Y-%m-%d %H:%M:%S") + " -- " + endstring
        echo @(current_time) >> .alarm.log
        
        break
    except ValueError:
        print("Oops!  That was not a valid number.  Try again...")




```
//[[AIR]] and I should do this.//

* Unlimited bar
** We make our own alcohol: beer and liquor
*** We charge for mixed drinks
** Free cheap food
*** We still charge for premium food
*** Soda, alcohol and nice semi-disposable washable cups are cheap.
*** Celebrate grain alcohol!
* Members only (but anyone can join)
** Third-party arbitration clause
** Sign a permanent and complete liability release waiver to join the club
** They can lose membership for any reason with no recourse.
** Sign a contract which enables us to escort them off the premise for any reason whatsoever
** Setup legal financial accounts when joining the club
*** If they are charged a fee, then they legally owe us that money
*** Users must still earn the right to have a tab/credit-line
*** Background checks to make sure we think they can pay
**** This requires a waiver too
* How we make money:
** One-time Membership Fee (Joining Deposit Insurance fee)
*** This fee could just be folded into the entrance fee. Much thought will need to be given. 
*** Calculate a reasonable max cost they would owe. They have to deposit it as a form of trust. If they are ever removed as members, this deposit covers it. 
** Upfront Entrance fee
*** We need to know average costs of each night. We can chart and calculate this. It will be adjustable or scale. 
*** Loyalty bonus. The fee costs less each time you come. 
**** This offsets costs going up.
**** Linear ride into an exponential curve bottoming out towards the "at cost" line (or at least a minimum profit line)
*** Perhaps we can stagger how their credit-building works in a tit-for-tat trust building game.
** Clean-up fee (contingent/conditional)
*** If you puke, defacate, or must be escorted off the premise (for any reason), then you must pay a very serious fee.
*** For anything you break, you are financially responsible for paying for its replacement.
** Take-your-drunk-ass home service fee
*** We can have our own designated driver taxi service.
*** We make the final call on whether or not you are too inebriated (to have more to drink or to have enough to drive).
*** We will test you with a breathalyser. 
**** Need cheap consistent breathalyser methods.
* How do we make cheap entertainment?
** Video games are retarded cheap. Have a free arcade. 
** Computer and Desk Cafe
*** Multi-seat computers
* Do we have different sections? 
** Arcade Room
*** Users could pay for accounts on the computers.
** The Blast Room
*** Loud, danceable.
*** Sound proof rooms.
** The Analogue Lounge (hipster and luddite af)
*** Modern art and books
*** No devices allowed (They must be given to the host), or faraday cage the room. 
** Tabletop Room
*** MTG, board games, DND, etc.
*** Jenga, Twister (permanent), 3D-printed games, Cards Against Humanity, Actual playing cards (with rules available)
** Dining section (quiet)
* We need an aesthetic. What will it be?
* We need a schtick. What will it be?

Of course, we need to consider to how to build moral business structures first. The socialist worker cooperation corporation model.


Who do we need to run this?

* We need someone who handles legal, financial, executive planning, etc. Someone who implements the will of the people.
* We need muscle, bounce, and man-handlers; these should also be our designated taxi drivers.
** We have a cage to take the shitty ones home
** We need handcuffs
* We need hosts, cooks, drink-makers, and clean-up staff.
* We need someone who plans and executes the culture, entertainment, the technical components, the social atmosphere, the aesthetic, the culinary aspects.

Staff should be cross-trained as much as possible. We should have designated training during each day. Everyone should learn to do as much of everyone else's jobs as they possibly can. Make it easy for people to be replaced (even if only temporarily). Make it so everyone is worth the same amount. Make it so we all deserve an equal cut of the profits.  

Other random thoughts:

* Mandatory voting, transparency, and internal conflict resolution at the end of the day. We need to be on the same page and share the same vision.<<ref "1">>


---------------------

<<footnotes "1" "However hippie it may sound, I think that corporate reflection is very valuable when done in a disciplined manner.">>
* [[CLI Alarm Clock/Timer]]
* You can do everything right and still end up losing. 
** Shit happens.
** It is possible to commit no mistakes and still lose. That is not a weakness; that is life.
** Your best is sometimes just not good enough.

* It isn't possible to make everyone happy.
** You don't have to light yourself on fire to keep other people warm.

* Love is conditional.
** You can't make someone love you.
** Someone who has loved you may stop one day and find someone else.
** Relationships fade.

* Few people actually care about you.

* You can't change the past.

* You don't choose your family.
** You don't have to like your family.
** You don't have to love your family.
** Blood doesn't make a person your true family.

* You're the only one who can stand up for yourself. 
** Never predict anyone else to stand up for you.

* People change, and they often become someone you never thought they would be.
** People generally don't change into who you wish they would become.

* You cannot help someone who refuses to help themselves.

* Looks matter.
** While appearances are deceiving, we still judge books by their covers.

* //It// doesn't always get better.

* Life has no inherent meaning or purpose. 
** You have to create your own reason for existing.

* The trust you have in anyone can be broken at anytime.

* Justice is rarely if ever served, and never completely at that.

* The world is an awful place, and there is little to nothing you can do about it.

* Nobody is perfect. No one is even good.

* You are just a piece of paper to a potential employer.

* We lie to each other and ourselves.

* We use each other.

Here's what I'd like to accomplish. They are intermediate goals. 
This wiki-page is for all things computing.

Remember there are different ways to //program// a computer. The folks writing in some assembly instruction set, C, Python, or Brainfuck are certainly programming for a particular set of computers (for a specific compiler/interpreter and hardware architecture). Those belong to a specific class of inputs to a computer. There are other kinds of "inputs" though and thus other kinds of programming. Programming a computer is about getting the computer to do what you want it to do. It's that simple. The person who uses their mouse to provide inputs to navigate to a website has programmed their computer in a trivial (for them) way. Computing is a rich epistemic environment and //techne//. As such, computer users need to use and produce their data and algorithms (very generalized notions here) by using the right tools, frameworks, paradigms, and abstractions. We should become the best, well-rounded computer programmers we can be,

It must be said: humans are computers. We are programmable. We have to get ourselves to do what we want ourselves to do. We need to wisely program ourselves. That is what this wiki is about, after all. Thus, we should become the best, well-rounded self-programmers we can be. This very inclusive definition of programming reminds me of one of my most inclusive definitions of the concept of philosophy. It is quite practical for being so theoretic.

Here is a tree of thoughts on programming and hacking myself:

* [[Autism and Social Technology]]
* [[Self-Hacks]]

Here is a tree of thoughts on lifehacking, social engineering, psychological tricks, gaming the system, and understanding the boundaries of social computing:

* [[Unethical Hacks and Tricks]]
* [[Stigmatized Hacks and Tricks]]

In case I got your hopes up to geek out and felt I've baited you with existential and social work, I actually do love thinking, talking about, and using computers (in the ordinary sense of the term). So, I will offer a few thoughts on standard computing.

* [[Computer Planning]] 
* [[Stupid Ideas]]
* [[Computing Log]]
* [[Childish Computer Pranks]]
* [[Frugal Computing]]
* [[Physically Pwning a Computer]]

These recommendations aren't for everyone, and they also aren't exhaustive. These are collections of flexible and sufficiently effective default tools, sources, and tricks for computing.

* Coding
** [[Coding with my Daughter]]

*Linux & POSIX-Compliant OSes
**[[Crontab]]
**[[Linux & POSIX-Compliant CLI One-Liner Tricks Collection]]
**[[Linux & POSIX-Compliant CLI Tool Collection]]
**[[Linux Scripts]]
**[[Ubuntu 16.04 Desktop Post-Installation Root Script]]
**[[Ubuntu 16.04 Desktop Post-Installation User Script]]

*Piracy
** [[Annotated Piracy Tools, Networks, and Sites Collection]]

*Web Browsers
** [[The Art of Bookmarks]]
**[[My Browser Bookmarks]]
**[[Google Chrome Extension Collection]]

* Wiki

** [[This Wiki's Host's: lighttpd.conf]]

*Windows
**[[Windows Tool Collection]]

* [[2017.02.17 -- Computing Log]]
I take conscious experience to be a special mode of phenomenological observation (unfortunately, even your decisions are made seconds before you consciously realize and can attend to them). Our subconscious self or selves are actually the higher-ordered consciousness, and they work on this lower-ordered consciousness, present it narratives and phenomenological appearance, and give it reasons. Perhaps consciousness is a virtual machine inside our subconscious hosts. In any case, we want our virtual machines to have a rocking experience.

I am an organism with multiple minds (computers), even though I only directly experience one of them. That sounds fucked up. But, I think that's the way humans really are. I think that's what makes us sapient and sentient in a fuller way than many other of the "higher" animals. We rely upon multiple organisms to exist (see our gut and skin bacteria), so why not multiple minds?  

I'm a biological computer with limbs and many systems. I hope I can be a happy conscious computer. 
If you feel it necessary, please feel free to anonymize yourself. I pay attention to writing styles, so if you really care about your anonymity in this case, please obfuscate that as well.

!!Current:

Email Address: 

```
h0p3@protonmail.com

```

Tox:

```
FDD7005639C618263AB2EEDAB974F7576C7C0DED6217EED9E9DC0344C622E72AEEF7055F8B4D
```

Tox (secondary):

```
9B3332268D73E388C6992EDB7A4FFE5A83848BD7AE3D0819F01C403F493D0D15B1596C722CEE
```

XMPP (OTR-enabled):

```
h0p3@dukgo.com
```

!!Deprecated for now:

Bleep:

```
e507272304bcf58c9e979ad8fa4de8c91eb6c323996cd4b86e7b55b5d9af7966,h0p3
```

Retroshare:

```
CQEGAcGVxsBNBFgvW98BCAC1xxe6bD7Jk4wxDVturkmAMKYM4K19YdXROa5Lrk8A
9ls3eWHKf8p79h1bMSeks44ZhxRnnAeb30661u4nXR9waa0MekpjL4RwTB77tUAY
y72WDcDnf2zx9HmojAJskbls3PgG5Ev01D6nKdGj3/v9sPABRMhSYf4rPM4y2l2/
wUJDzJWI8O6ZLQT6l/bOr0NHbzDeJr0hTPP0WPEfJ4AeLyvvEfrp+7Dba3Rbi+LW
tac+VSk3uLghtYu91IMSJwYqmTBRacLYI/4jASJLNWGpDWmRgd4aCtyuSAJp6UtG
zHti3pID6Yv8dgVqMFra+kTd2oLXgJ2zPF6zyXVrFShRABEBAAHNIWgwcDMgKEdl
bmVyYXRlZCBieSBSZXRyb1NoYXJlKSA8PsLAXwQTAQIAEwUCWC9b3wkQHCou05du
uj0CGQEAAHpwCACO+0S7YSR/d0D/U49Ny9jrvgr2Vw9RuYeOHr1mtbjxNgJQx/rZ
mkLfEQ/jCWcbHreWplRVYrjf9I3FZHSikUe9SZps6NsEqgTksD5rLWo/B6CDf0ft
sXdsP28LiW2VE5SOoEsV3FhE6gAm/GJ/lRIFHLu95+oRCqm691wagWYYbA/y3x/l
Jr7ZYYkwB6WmSGUBBXfJZLy+YfINqi7h0Gx9tLnXDiEPLpDls4qxjAeCKME8WwJP
A6p1yUjXpX7M/J4MrAMIrjcsitO/YNMTXc8PaLN2NK12H9PM1R5Vdn3ArwV/WM2z
gFfU5LZqirdkdU4b73sbYIi2OwVbw1gJTdynAgZLgibzlOUDBqn+1D2U5QQABgNt
MTAFELOHBdaBMZxZDTSJoPI+d6UHAyoBlw==
```
I have specifically asked for counsel from a particular family member. That said, anyone is free to message/e-mail me. Do you have an antidote for me? Do you need to poison a network of my thoughts, to destroy a configuration of memes and their generators inside me? Do you have an answer or problem for me to consider? Then tell me. I am committed to listening. ("Screencap!") 

 If you're actually reading the wiki (and that makes you weird, because this wiki is crazy, but I thank you), then I'm interested in what you have to say about it, about my life. Let's test whether or not I'm applying the CI. You have the ability to see if I'm putting my money where my mouth is.

I will be posting your responses, but sanitizing privacy-based information. 

If you feel it prudent, use a throwaway account, Tor Browser (or Whonix), and mask your writing style (and carefully select your content) if you wish to anonymously contribute or ask me to think about something.
Official distributions of h0p3's Wiki include checksum and signatures files for verifying the integrity and authenticity of your copy. These verification files are updated for every published edit (nearly real-time). With these files (and the right tools), you will be able to cryptographically verify the entire wiki, which is contained in a single html file (index.html). Let's hope this is never directly useful to us.

I previously used PGP (~GnuPG as my last tool) to sign this wiki.<<ref "1">> PGP has to be one of the worst "best in class" toolsets I've ever used. I hate the software ecosystem, its unusability and incompatibility, as well as its poor logistics and social design. I've wasted far too many hours over almost two decades on that piece of shit. I'm moving on. 

Instead, I'm cutting out the middleman (fuck you, PGP) and more directly using the crypto library I actually trust. I now generate signatures through [[PyNaCL|https://github.com/pyca/pynacl]], a gorgeous binding to the state of the art [[NaCL|https://nacl.cr.yp.to/]] crypto library (imho, we are rapidly moving into a cryptographic monoculture relying exclusively on the ~NaCL algorithms).<<ref "2">> I believe my key will be useful until quantum computing becomes feasible.<<ref"3">> When PGP is actually functioning, it buys the same verification as my process (they use the exact same library). The difference is that my process is literally programmable in every major language. It's hilariously easier than PGP. You can even verify it by hand if you want to.

This wiki's public Ed25519 signature verification key:

```
5249578e4cdfaec1484f0083df3e8b6e4af0cab0288c8156c31d6e94efe58308
```

Here's how to verify the authenticity and integrity of this wiki:

If you don't already have them, download all three files (<a href="index.html.sum">index.html.sum</a>, <a href="index.html.sig">index.html.sig</a>, and <a href="index.html">index.html</a>). Use the Ed25519 signature (index.html.sig)  to verify the authenticity of the checksum file (index.html.sum).

You can either find/write your own tool or use mine to verify the signature. Run this script (don't forget to first install [[PyNaCL|https://github.com/pyca/pynacl]]; pip is easiest) in the same directory as the three files you downloaded.

```
#!/usr/bin/python3

import nacl.encoding
import nacl.signing
import binascii

# The verification "public" key
verify_key_hex = "5249578e4cdfaec1484f0083df3e8b6e4af0cab0288c8156c31d6e94efe58308"
verify_key = nacl.signing.VerifyKey(verify_key_hex, encoder=nacl.encoding.HexEncoder)

# Read sig file
with open('index.html.sig', 'r') as myfile:
    data=myfile.read().replace('\n', '')
signed = binascii.unhexlify(data)

# Check the validity of the signature
# Will raise nacl.exceptions.BadSignatureError if the signature check fails
try:
    verify_key.verify(signed)
    print("Signature Verified")
except:
    print("Signature Verification Failed")

```

Next, use the SHA-512 checksum file (index.html.sum) to verify the integrity of the index.html file. I suggest [[sha512sum|https://en.wikipedia.org/wiki/Sha1sum]], [[hashfile|https://pypi.python.org/pypi/hashfile]], or [[Hashtab|http://implbits.com/products/hashtab/]]. Use hashfile like this:

```
hashfile -c index.html.sum
```

Assuming you've already authenticated the checksum file, if the hash of index.html matches the hash found in index.html.sum (or if your hashing tool verifies they match for you), then you know your index.html file hasn't been tampered with by a third-party. To be clear, if you trust the signature verification of the checksum, and you trust the checksum of index.html (if the hashes match, you'd be crazy not to trust this part), then you trust index.html. Thus, your authenticity+integrity verification demonstrates you possess a bit-for-bit copy of the original signed by someone who possesses this wiki's private signing key.

-------------------------

<<footnotes "1" "You can find the old verification wikipage here: [[Retired: 2017.01.14 -- Cryptographic Verification]]">>

<<footnotes "2" "I am aware of that maxim: Don't roll your own crypto. This maxim can be applied at different levels in the cryptography process. While I openly admit my shallow understanding of cryptography, I remain convinced this is a safe exception to that maxim.">>

<<footnotes "3" "I'm not naive enough to think rubber-hose cryptanalysis isn't the first step a state-actor would use against me. Regardless, I still think cryptography is immensely useful to us.">>
//See first: 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖//

Here are my current primary 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖:

* [[Realpolitik Speculation]]
* [[Pipefitting Log]]
* 🢔⦗[[Vault|The Vault of h0p3]]⦘🢖

I've clearly spent the majority of my time on [[Realpolitik Speculation]], [[Pipefitting Log]], and the 🢔⦗[[Vault|The Vault of h0p3]]⦘🢖. There is plenty of planned and even random work  on the wiki, but I feel compelled to write in these as often as I can. I need to run with it wisely. I need to think about this focus. Be meta about your life, h0p3.

You will note that these are deeply practical topics in your life. Path wisely. I'm writing this wiki for myself. I'm trying to become happy. Let's hope that pursuing the truth the best I can will amount to being happier. 

Perhaps this page will one day evolve into the next 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page.
I love my son. He's my creation, and I live for him and his sister. He is amazing (and I'd love him just as much if he weren't). We are very compatible in many ways. I hope to help him become compatible with the world and himself. I hope to help him become a eudaimonic lifehacker, to be happy and possess (and use) the means to make himself happy. To the best of my abilities, I am preparing him to have a life he finds and will find worth living.

1uxb0x is a boy of many surprises. Sometimes it is very hard to gauge his aptitudes, strengths, and where he may falter. There aren't the clean rules of thumb I find for others. Half his lifetime ago, he didn't know to call me dad (he didn't really speak). He has come a very long way. His speech and communication are still impaired (very common with autism). We work on it everyday. Reading has been a savior, expanding his vocabulary and helping him see the value in communications. His vocabulary can stun you sometimes, and then other times, he can't get out even the basic things he means to say. He has recently started writing (not just chatting with us) for real (a weak point of mine for a long time, and still in many ways). I hope to help my son find his voice with others. I hope to help him love learning, to see the necessity of hard work. I hope to prepare him for a world that isn't prepared for him. I hope we can build a friendship and family partnership for life. 

We are working on empathizing with ourselves, honesty, self-reflection, working hard, doing our best, identifying with our future selves, executive functioning, delaying gratification, thinking about and applying utilitarianism, appreciating and working with our virtue theoretic identities and practices, and understanding the Kantian point of view.

We are working to understand the redpilled nature of the world together, to understand the power dynamics and structures of the world, to appreciate and be skilled in the art of socializing, and to have the means to be happy in a dire world. 

He currently works on the following academic subjects:

* Morning Routine
** Get dressed
** Eat breakfast
** Brush teeth
** Cosmetics/Hair/Dress and other socially expectations...
** Laundry

* Math
** Life of Fred
*** 3 of 10 elementary school books
** Khan Academy
*** 3 grade completed (his age group)
** Singapore Math 
*** Only up to 1st grade completed

* Problem Solving
** Working through a [[Linux and CLI ebook|https://sourceforge.net/projects/linuxcommand/files/latest/download?source=typ_redirect]].
** Configuring and organizing his digital life
** Coursera's Learning How to Learn

* Spanish
** I don't care about fluency attempts for him (that would be gravy). Understanding the structure of languages and becoming someone adept at learning language(s) in general is the goal. 

* Language Arts
** Khan's Grammar (we're taking a break from his excellent JacKris books).

* Reading
** Outside of standard academic work, we're aiming for children's literature which exercises his empathy and imagination muscles.

* Typing
** He's at 22ish WPM at the moment. It's clean, but it isn't really touch typing yet. He's slowly improving each week though. We'll get there. This is a tremendous skill for him to master. Take away the barriers and we can tackle others.

* Writing
** He's been writing songs. I need to him to say anything in words. I need to him express himself. I need him to form sentences, paragraphs, and pages. I need him to learn to convert his thoughts into something other people can understand. It's a true art for an autistic person since we do not have the natural programming and capacities of others in this way. I am ridiculously proud of him. I think he'd write me under the table at that age. It isn't grammatically all there yet, but it is improving leaps and bounds. 

* Humanities
** Khan's History (we're feeling this one out)

* Curation
** Finding two good sources of information or websites worth using, and bookmark them (organized bookmarks)
** Learn to search the web. Learn how to ask the right questions. Learn to find what he wants and needs.

* Videos
** School of Life
** Game of Thrones (art worth watching)

* P.E.
** I'm thankful that he enjoys exercising so much. He stretches and plays a lot. He doesn't quite know how to push himself physically or move quickly, but I hope to help him acquire that physical-IQ.

* Journal
** He keeps track of everything she does, reflects, and writes about it. 

Academic Bootcamps Available:

* Python
* Model
* Budgeting

Lecture

* When necessary, we must talk and think about particular subjects or ideas. 
* Our focus is on computer science, ethics, political philosophy, existentialism, and practical life skills and perspectives

He does the following chores each (or every other) day as needed:

* Clean his downstairs area
* Basic cleaning of his room (bed, desk, drawers, etc.)
* Clean the kitchen (on rotation)
* Push his laundry through (if and when he has enough for a load)

He does the following chores each week:

* Clean the downstairs bathroom
* Full clean of his room

I love my daughter. She's my creation, and I live for her and her brother. She is amazing (and I'd love her just as much if she weren't). We are very compatible in many ways. I hope to help her become compatible with the world and herself. I hope to help her become a eudaimonic lifehacker, to be happy and possess (and use) the means to make herself happy. To the best of my abilities, I am preparing her to have a life she finds and will find worth living.

j3d1h is very skilled in many areas. She is deeply existentially aware for her age. She is naturally talented in the humanities (her language abilities make me envious already), and she works hard in her quantitative and formal reasoning (it is what others would think she is best at because it feels so tangible to them). Admittedly, she bears a striking existential resemblance to Alia Atreides from Dune (my wife, k0sh3k, was that as well). I do not know her destination or her potential. I cannot see that far, and there may be many surprises I cannot account for. I must find a way to constructively and wisely be her guide (and for her to see my guidance is worthwhile) while I still can. I am only 20 years older than she is. She will quickly overcome my abilities in many ways. One day, she could easily be my academic and practical wisdom peer or better. I hope we can build a friendship and family partnership for life. 

We are working on empathizing with ourselves, honesty, self-reflection, working hard, doing our best, id
* Lecture
** When necessary, we must talk and think about particular subjects or ideas. entifying with our future selves, executive functioning, delaying gratification, thinking about and applying utilitarianism, appreciating and working with our virtue theoretic identities and practices, and understanding the Kantian point of view.

We are working to understand the redpilled nature of the world together, to understand the power dynamics and structures of the world, to appreciate and be skilled in the art of socializing, and to have the means to be happy in a dire world. 

She currently works on the following academic subjects:

* Morning Routine
** Get dressed
** Eat breakfast
*** Read the news
** Brush teeth
** Cosmetics/Hair/Dress and other social expectations...
*** Research
** Laundry

* Math
** Life of Fred
*** Middle school completed
** Khan Academy
*** Almost done with 5th grade; more grinding to do; it's just proof that she can pass tests.
** Singapore Math 
*** Only up to 3rd grade completed; I love the emphasis on word problems and problem solving as opposed to calculation.
** [[Better Explained|https://betterexplained.com]] 
*** Her current preferred assignment. I'm fine with it, since I think the narrative and clear explanations should give her a strong groundwork for advanced mathematics. 

* Problem Solving
** Reading about Python, Bash, and Xonsh (15 minutes)
*** Working through a [[Linux and CLI ebook|https://sourceforge.net/projects/linuxcommand/files/latest/download?source=typ_redirect]].
*** Reading real-world python and bash programs, commenting them line-by-line to demonstrate understanding, and following up with a mile-high commentary afterwards to show she can synthesize the parts and understand the architecture and purpose of the code she is reading (how the pieces fit together, why, etc.)
** Writing Xonsh (45 minutes)
*** Administration of her linux machines, servers, and VMs
*** Writing scripts and automation tools
*** Configuring and organizing her digital life

* Formal Reading

** Reading books on Symbolic Logic

* Literature
** A standard university American Literature textbook
*** World literature is preferred, but we've had to use other sources to become familiar with the cannon. We'll get to the originals eventually. It requires serious study.
** Religious Literacy (Prothero)
** The Economics Book: Big Ideas Simply Explained

* Spanish
** She may become fluent. Right now, it's about the grammar. She has an excellent memory, and her accent is dead on. She may develop a reading knowledge, move to chatting online, and eventually develop an ear and conversational skills. There are many programs available; finding the people to practice with, now that's the hard part.

* Language Arts
** Writing in her personal wiki

* Humanities
** Religious Literacy
** History
*** Going through Khan's courses for now.

* Curation
** Finding one new tool for the command line, installing it, understanding it, exploring it, using it, etc. -- bookmark it.
** Finding one good news source, bookmarked and organized.
** Finding information useful for her other subjects, also bookmarked.
** Find one good website, by her personal standards, also bookmarked.

* Videos
** School of Life
** Game of Thrones (art worth watching)

* P.E.
** I hope she can make exercise a lifelong habit.

* Journal
** She keeps track of everything she does, reflects, and writes about it. 

Academic Bootcamps Available:

* Typing
** I'd love to see 100wpm for standard English and something comparable for technical/formal/programmatic writing.
** Complete keyboard-based manipulation of her computer is a real goal.
** Becoming an excellent touchscreen typist will also be useful. It must be practiced.
* HTML/CSS
* Build video creation process
* Budgeting
* Git

Lecture

*When necessary, we must talk and think about particular subjects or ideas.
*Our focus is on computer science, ethics, political philosophy, existentialism, and practical life skills and perspectives

She does the following chores each (or every other) day as needed:

* Clean her downstairs area
* Basic cleaning of her room (bed, desk, drawers, etc.)
* Clean the kitchen (on rotation)
* Push her laundry through (if and when she has enough for a load)

She does the following chores each week:

* Clean the upstairs bathroom
* Full clean of her room

* h0p3 gets job in August
* h0p3 stabilizes finances and buys vehicle in 1-2 months, preferably a van that can be worked into a tiny home.
* By September or August we have a student, teenager, old person who would be working or chilling at home chill at our house during school hours (if they had to go to class or whatever, that's fine). We pay what we can.
* We save hard and buy a house and pay off debt.
* We save for starting a business and begin learning what we need to do.
* h0p3 finishes his Journeyman and certs for pipefitting, valves, welding, possibly hvac, and plumbing
* We start a business while still paying dues, k0sh3k quits her job and stays home to help kids and do the administrative work of the business.
* We always pay union dues, but eventually we slip away from it. We transition into fulltime business for ourselves.
* ??
* Profit
//This wikipage has a lot of dark candy on it. Don't eat too much of it or you'll spoil your dinner.//


Dark humor is like food, some people dont have any.

---------------------------------

So I was balls deep in this guy thrusting as hard as I could when I reached around to give him a hand job. Guess what? He had an erection. What a queer.

---------------------------------

What’s the difference between Isaac Newton and the baby I just stabbed to death?

Isaac Newton died a virgin.

---------------------------------

A man is riding the bus when at a stop, the most beautiful woman he has ever seen gets on. The only problem is that she is a nun. He decides to approach her anyway. 

“Sister, you are the most beautiful woman I’ve ever seen and I must have sex with you,” he says.

“I’m sorry but I’ve given my body to God,” she replies and then leaves.

Suddenly the bus driver turns around to the guy and says, “I know a way you can get her in the sack." 

The bus driver tells the guy about how the nun goes to the cemetery every night at 9 to pray, and if he dresses up and convinces her he’s God, she might have sex with him.

That night at 9, the man is in the cemetery hiding behind a gravestone. When the nun approaches in the darknessk he jumps out and saysk "Sister, I am God and I command you to have sex with me." 

She replies "Well I mustn’t deny God. Howeverk I want to remain a virgin so I will only take it up the ass.”

The guy figures this isn’t a problem and proceeds to have the best sex ever.

After he finishes, he whips off his outfit and says, “Surprise, I’m the guy from the bus.”

With that the nun turns around and says, "Surprise, I’m the bus driver.“

---------------------------------

What’s better than raping an infant?

Hearing the ribs crack under the pressure.

---------------------------------

How did the Virgin Mary know Jesus was gay?

His dick tasted like shit.

---------------------------------

A redneck brother says to his sister, “Gee, you fuck better than Mom!”

The sister replies, “Yeah, that’s what Dad says too.”

---------------------------------

What do you get when cross an Italian with a gorilla?

A retarded gorilla

---------------------------------

How did Jesus walk on water?

Shit floats.

---------------------------------

How do you get a baby to crawl in a circle? 

Nail one of it’s hands to the floor.

---------------------------------

How do you turn a fruit into a vegetable?

AIDS

---------------------------------

How many dead babies does it take to paint a house?

Depends on how hard you throw them.

---------------------------------

What’s the difference between an apple and a dead baby?

I don’t ejaculate on an apple before I eat it.

---------------------------------

Where did Lucy go during the bombing?

Everywhere.

---------------------------------

A man went into a library and asked for a book on how to commit suicide. 

The librarian said, “Fuck off, you won’t bring it back.”

---------------------------------

Can orphans eat at a family restaurant?

---------------------------------

What’s that useless skin around the vagina called?

A woman.

(Obviously, you could replace “vagina” with “penis” and “woman” with “man.”)

---------------------------------

This joke is so dark the police shot it.

---------------------------------

There was a vampire named Mabel,
whose menstrual cycle was stable.
After every full moon,
she’d take out her spoon,
and drink herself under the table.

---------------------------------

Did you know semen leaves the body at almost thirty miles per hour? 

This means it’s illegal to ejaculate in a school zone.

I don’t think the speed was why I was arrested though

---------------------------------

Did you know Mike Tyson and Tiger woods shared a nickname as children?

Nigger.

---------------------------------

Simple Simon,
Met a Pieman,
Going to the fayre.
Said Simple Simon,
To the Pieman,
What have you got there?
Said the Pieman, 
To Simple Simon,
Pies, you twat.

---------------------------------

What does 90-year-old pussy taste like?

Depends.

---------------------------------

A lady walks into a bar and asks for a double entendre.

The bartender gives it to her.

---------------------------------

What do you get when you cross a black with an asian?

A creature which can steal cars but can’t drive them.

---------------------------------

Why was the 6-month-old African baby crying?

It was having a midlife crisis.

---------------------------------

I came home from work yesterday and caught my daughter masturbating with a cucumber.

“That’s disgusting” I said, “I’m meant to be eating that tonight, now it’s going to taste like salad.”

---------------------------------

My mom thinks I need to stop objectifying women. I think she’s overreacting.

She asked why I broke up with the last girl, and I said, “It didn’t work out.”

She told me to be more specific.

I said, “I just told you: she didn’t exercise.”

---------------------------------

I’m sick of Mexicans naming their kids Jesus. Jesus wasn’t Mexican; he was human.

---------------------------------

I saw Count Down yesterday.

He’s Dracula’s retarded brother.

---------------------------------

Your mom was gang raped by a troupe of mimes.

They performed unspeakable acts on her.

---------------------------------

A friend of mine was complaining that there’s no real comedic merit to sick jokes. In particular, my friend claimed there’s too much reliance on a relatively offensive or risqué punchline.

Anyway, we argued about it for a while, and then I raped her.

---------------------------------

What’s white on top and black on bottom?

Society.

---------------------------------

The new barman in my local pub is black. So, I says to him, “Beer please, nigger.”

He hit the roof and said, “Why don’t we swap places, let’s see how you like it.”

So, I went behind the bar, and he walked out then came back in. He said, “Beer please, honkey.”

I replied, “Sorry, we don’t serve niggers here.”

---------------------------------

A family is driving behind a garbage truck when a dildo flies out and thumps against the windshield.

Embarrassed, and to spare her young son’s innocence, the mother turns around and says, “Don’t worry; that was an insect.”

To which her son replies, “I’m surprised it could get off the ground with a cock like that.”

---------------------------------

Two Serbian soldiers are holed up guarding a hill top. After a while, Nikolai tells his buddy he is off for a shit, and heads off looking for a bush.

After 20 minutes, Dmitri starts getting worried, as Nikolai still has not returned. Time continues to pass, and, more and more, Dmitri fears his comrade has been killed.

After an hour Dmitri, decides to get on the radio and is just about to call for a unit to search for his fellow soldier, when Nikolai appears with a huge grin on his face.

Dmitri says, “Nikolai! Where the fuck have you been? I thought you were dead! I was just about to call it in.”

Nikolai replies, "Well, I went off to find a bush to take a shit in. It took me a bit, but I found one. While I was squatting, I saw this beautiful Croatian bitch; gorgeous tits, legs to die for. So, I finish my shit, and I go over. I start fondling her tits, I stick my finger in her cunt, I take out my cock and fuck her hard, and then I come on her tits. After that, I roll her over, fuck her in the ass, then I roll her over yet again to come all over her tits a second time!“

In awe, Dmitri asked, "Did she then suck the last of your come from your cock?”

Nikolai snapped back, "Don’t be a fucking idiot! Her head had been blown off by a grenade a few days ago!“

---------------------------------

I had my first sexual experience at middle school. I fucked little Jenny Jones behind the bike shed.

She said I was better at fucking than teaching Math.

---------------------------------

What should you do if you come across a baby dying in his mother’s arms?

Wipe it off him, and apologize to her.

---------------------------------

I’m not racist. Racism is a crime, and crime is for black people.

---------------------------------

A man was walking his dog through a graveyard when he saw another man crouching behind a gravestone.

“Morning!” he said.

The other man replies, “No, just having a shit.”

---------------------------------

I was wondering how great it would be great to see a “Saw” style reality TV show where contestants are placed in life or death situations, like scavenging for food and water, or being subject to some inhumane climate and natural disasters, or struggling to fight off deadly diseases.

And that’s when I asked myself…

Why aren’t there cameras all over Africa?

---------------------------------

Getting girls to have sex with me is like getting ketchup out of a glass bottle.

It’s easy when I have a knife.

---------------------------------

I was watching a film with my little boy earlier. He said, “Dad, I’m scared. Is that woman going to die?”

I said, “Judging by the size of that horse’s cock, yes.”

---------------------------------

As he inserted the rectal thermometer, I developed a painfully hard and obvious erection.

“Maybe you should wait outside while I examine your dog,” said the vet.

---------------------------------

What’s the hardest thing about being a pedophile?

Getting the blood out of the clown suit.

(alternatively: Trying to fit in.)

---------------------------------

What do you call five black people having sex?

A Threesome.

---------------------------------

Why do so many blacks not pay their rent?

Because jail is free.

---------------------------------

A man walks into a library and says to the librarian, “Do you have that book for men with small penises?”

The librarian looks on her computer and says, “I don’t know if it’s in yet.”

“Yeah, that’s the one.”

---------------------------------

Three gays are skydiving, and they’re all jumping out at the same time. All three go to release their parachutes together, when they realize that none of the chutes work.

The first gay hit the street, which took two days to clean up.

The second hit a car; it took a week to scrape him off.

The third landed ass first onto a pole. It took two months to wipe the smug look off his face.

---------------------------------

In the Wild West, a little girl is standing by a cliff, crying her eyes out. A cowboy riding by stops and asks, “Why’re you crying, little girl?”

She says, “Oh, mister, our wagon was attacked by Indians. My father got shot by an arrow and drove the wagon off the cliff. I jumped off, but my whole family is dead.”

The cowboy looks at her, unmounts, unzips his pants, and says, “Well, looks like it just ain’t your day today.”

---------------------------------

What did Cinderella say when she got to the ball?

“Ughhghghggghh”

---------------------------------

What’s the difference between your mom and a whore?

Whores aren’t fat.

---------------------------------

What’s the difference between Iron Man and Iron Woman?

Iron Man is a superhero; “iron, woman” is a command.

---------------------------------

What do you do if an epileptic falls in your pool?

Throw in your laundry.

---------------------------------

Yo’ mama so ugly, her portraits hang themselves.

Yo’ mama so old, she has a separate entrance for black cocks.

Yo’ mama so unfamiliar with the gym, she calls it James.

Yo’ mama so fat, the Sorting Hat put her in the Waffle House.

---------------------------------

Paddy Englishman, Paddy Scotsman and Paddy Irishman are walking in the woods when they stumble across an old sex wizard down on his luck.

“Wishes for a tenner!” shouts the wizard. “I’ll give you anything you like, but I’m sick and tired of making knobs bigger, so don’t ask!”

Without wasting a second, Paddy Englishman hands the wizard a ten pound note. “I want my wife to be ten times more adventurous in bed.”

The sex wizard nods. “Uxor non inhibitoris! An easy one! It is done!”

Paddy Scotsman counts out nine pound coins and two 50 pence pieces. “My wife and I are happy enough, but I’m terrified of becoming a grandfather before I’m 50. I’d be obliged if you could fix it so my teenage daughters can’t get pregnant before they’re 25.”

The sex wizard nods. “Filiae non fertilismus! Very wise! It is done!”

The sex wizard turns to Paddy Irishman, who has his hands planted firmly in his pockets and looks ready to move on. “No wish for you?”

“I’ll save my tenner,” says Paddy Irishman, with a grin. “These boys have me covered!”

---------------------------------

I got in trouble during high school for masturbating in the showers.

Apparently, it completely ruined the trip to Auschwitz.

---------------------------------

What did Hitler say to Eichmann when he saw him in hell?

“If I knew you were coming, I would have baked you a kike.”

---------------------------------

Have you ever seen that black family on The Jetsons?

No? The future looks good, doesn’t it?

---------------------------------

A statue of a man and a statue of a woman stood looking at each other for hundreds of years out in a park. One day a wizard, feeling sorry for the statues, brought them to life for thirty minutes. Right away, the two of them ran into some nearby bushes, and you could hear all kinds of strange sounds and moans from there. After a while they came back out, giggling. The wizard told them, “You have another fifteen minutes left, if you want to have another go.” The statues looked at each other, and the male statue answered, “Fine, but this time you hold the pigeon and I’ll shit on it.”

---------------------------------

How long does it take a black women to take a dump?

Nine months.

---------------------------------

A mom is at the breakfast table with her three daughters.

Petal asks her mom, “Where did you get my name from?”

Her mom answers, “Well, when you were a baby, a petal fell from the sky and landed on your forehead, and so we named you Petal.”

Petal’s sister piped up, “Is that why you named me Snowflake? One landed on my forehead?”

Her mom answered, “Yes, that’s true.”

The third sister said, “HRRHHEHHGHGHRERRRHHHGHG.”

And, the mom said, “Shut up, Fridge!”

---------------------------------

A priest and a rabbi are at an interreligious conference. After a session, they decide to go for a walk around a lake. On the other side of the lake, they both agree to go skinny dipping. Just as they are getting out of the water, they see a group of kids from the conference walking along the path. The priest puts his hands over his man-hood and waits for them to pass. He happens to glance over to the rabbi and sees that he has his hands over his face. Once the children leave, he asks the rabbi why he covered his face and not his package. The rabbi responds, “The children from my synagogue recognize me by my face.”

---------------------------------

How do you know a Polish fella’ robbed your house?

He’s eaten your trash and your dog is pregnant.

---------------------------------

A black guy walks into a bar with a parrot on his shoulder. The bartender says, “Hey, that’s pretty neat, where’d you get him?”

The parrot replies, “Africa, there’s millions of them!”

---------------------------------

(This joke requires audience participation - I will crudely ask the question that you should ask for you)

JOKESTER:

Three flies are stuck in a jar. Two female flies and one male fly. For some reason, the female flies have it in their heads that the male knows how to get out.

The first female fly buzzes over the the male and asks him how to get out of the jar. “Fuck me and I’ll tell you.” She’s desperate to get out, so she fucks him.

“What you need to do is, start flying around the top to get some speed, dive toward the bottom and pull up to the top at the last second and you’ll [snap] pop right out.” So she does exactly as he says. Right as she pulls up toward the top [smack your hand] SPLAT! She hits the lid and falls down dead.

So, the second female fly, because flies are dumb, goes over to the male fly and asks him the same thing, namely, how to get out of the jar. He says, “Fuck me and I’ll tell you.” She too is desperate to get out, so she fucks him.

“What you need to do is, start flying around the top to get some speed, dive toward the bottom and pull up to the top at the last second and you’ll [snap] pop right out.” So she also does exactly as he says. Right as she pulls up toward the top [smack your hand] SPLAT! She hits the lid and falls down dead.

So, now this male fly is in a jar with two dead female flies, and he wants out. So he flies around the top to get some speed, dives toward the bottom, pulls up at the last second, and [*snap] pops right out.

AUDIENCE: “How did he get out of the jar?”

JOKESTER: “Fuck me and I’ll tell you.”

---------------------------------

What do black guys do after sex?

20 years to life.

---------------------------------

Why don’t gypsies get HIV?

Even a virus has standards.

---------------------------------

A man walks into a bar and begins to order a beer, “O-O-One b-beer p-please.”

The bartender responds, “Hey man, I used to have the same stuttering problem. Then I went home, asked my wife to give me some head, and the next day I was cured.”

After hearing this the man rushed off before even getting his beer.

The next day, the man returns and again orders a beer, “O-One b-b-b-beer p-please.”

The bartender asks, “didn’t work huh?”.

The man replies, “No, b-b-b-but you have a l-l-lovely house!”

---------------------------------

A youth asks his mother, “Mom, I’ve got the biggest dick in 3rd grade - is it because I’m black?”

She responds, “No, Jamal, it’s ‘cause you’re 19.”

---------------------------------

The Prophet Muhammad went to his tent one night and saw one his wives looking angry. 

“Someone told me today that you are a dirty pedophile,” she said.

“Who told you that bullshit?” he shouted back.

“Your favorite fucking wife!” she replied.

Angrily, the prophet turned his back and said, “Why would you believe Aisha? She’s only seven!”

---------------------------------

Why do Latinos never have Sex Ed. and Driver’s Ed. on the same day? 

They have to give the donkey a break at some point.

---------------------------------

Dave cannot make his wife cum, so he goes to the doctor for some advice. He says to the doctor, “Look, I just can’t bring my wife to orgasm in bed, it’s a real problem.”

The doctor asks, “Well, is it too warm?”

Dave replies, “Yes, it’s absolutely sweltering”

“Then get some air-con,” the doctor says.

Dave says, “I can’t afford air-con. I’m too poor.”

The doctor asks, “Well, Dave, do you have a good mate?”

“Yeah, I’ve got a mate, Mick,” says Dave.

The doctor explains, “Well, ask your mate, Mick, to stand over you and the Mrs. with a towel, wafting you both to cool you down - that might help.”

So, Dave asks Mick for this favor, who then agrees to help him. That night, Dave is in bed with his wife pounding away while Mick fans them with the towel, but it’s doing nothing for her.

Dave says, “Well this isn’t working. Let’s swap.” So, Dave takes the towel and starts wafting while Mick shags Dave’s Mrs. Not long after, Dave’s wife goes “Oooh… oh that’s it, I’m about to cum, I’m going to cum!”

Dave shouts, triumphantly, “You see, Mick?! That’s how you waft a fucking towel!”

---------------------------------

What is similar about your first car and anal? 

You don’t want it, but your dad gives it to you anyway.

---------------------------------

Whats the difference between a zit and a priest?

A zit waits until you’re a teenager to come on your face.

---------------------------------

A communist, a terrorist, and a nigger walk into a bar.

The bartender looks up and says, “Hello there, Mr. President!”

---------------------------------

Chinese people with Down syndrome look like normal Chinese people.

---------------------------------

If a tree falls on a woman, and there’s no one around to hear it, what was a tree doing in the kitchen?

---------------------------------

When the first duck gets his beer he tells the bartender, “Thanks man, my name is Tom.”

The bartender says, “Nice to meet you Tom! How’s your day been?”

Tom replies, “Man! I have had the best day ever… I have been in and out of Puddles all day long. Couldn’t ask for a better day!”

The bartender congratulates Tom on having such a magnificent day and then turns to the second duck and hands him his beer. When the second duck gets his beer he tells the bartender, “Thanks man, my name is Dick.”

The bartender says, “Nice to meet you Dick! How’s your day been?”

Dick replies, “Man! I can’t remember the last time I had such a wonderful day! I have been in and out of Puddles all day long. I will remember this day forever!”

The bartender congratulates Dick on having such a magnificent day and then turns to the third duck and hands him his beer. The bartender says, “Let me guess…your friend’s names are Tom and Dick, so you must be Harry!”

The third duck glares at the bartender and says, “No, asshole. My name is Puddles, and don’t ask me how my fucking day has been!”

---------------------------------

So I painted my laptop black, hoping it would run faster…

Now it doesn’t work.

---------------------------------

What’s 9 inches long, pink, and makes my girlfriend scream when I put it in her mouth?

Her miscarriage.

---------------------------------

What did the leper say to the prostitute?

Keep the tip

---------------------------------

What do you do after you rape a deaf mute?

Break her fingers so she can’t tell anybody.

---------------------------------

Tits are like Legos. They are designed for kids, but grown men end up playing with them. You also get a feeling of satisfaction when you put them together.

---------------------------------

Yo’ mama has had the clap so many times her doctor treats her for applause. As her condition progressed, it turned into Type II Ovation Cancer.

---------------------------------

Yo’ mama is so fat, her patronus is a cake.

---------------------------------

Today, I saw a midget prisoner climbing down a wall. Halfway down, he turned and sneered at me.

I thought, “that’s a little condescending.”

---------------------------------

A girl was about to jump off a cliff to end her life. Just as she was about to leap to her death, a homeless man approached from behind and shouted to ask her a question, “Excuse me miss! Before you jump would you like to have sex with me?”

The woman replied angrily, “No I most certainly would not! How dare you try and take advantage of me in a situation like this!”

The homeless responded, “Very well then, I’ll just wait for you to get to the bottom.”

---------------------------------

How Long is a Chinese name?

(Hao Long)

---------------------------------

I called that Rape Advice Line earlier today. 

Unfortunately, it’s only for victims.

---------------------------------

Who here wants to play a game of rape?

No?

That’s the spirit!

---------------------------------

My girlfriend is a porn star.

She is going to be so pissed off when she finds out.

---------------------------------

A teacher asks her class, “If there are five birds sitting on a wall and you shoot one of them how many are left?" She calls on little Johnny to answer.

He says, "None. They all fly away at the first gunshot.”

The teacher replies, “The correct answer is four, but I like your thinking.”

Little Johnny replies, “Now I have a question for you: There are 3 women sitting on a bench eating ice cream. One is delicately licking the sides of an ice cream cone, the second is gobbling down the top and sucking the cone, and the third is biting off the top of the ice cream. Which one is married?”

The teacher blushes and replies, “Well, I guess the one that is gobbling down the top and sucking the cone.”

Johnny shakes his head and smiles, “The correct answer is the one with the wedding ring on, but I like your thinking.”

---------------------------------

How much does a British midget stripper with three kids get paid? 

Mini-mum wage.

---------------------------------

Persuading a girl to have sex with you is like spreading butter on toast.

It is possible with a credit card, but it makes more sense to use a knife.

---------------------------------

A guy walks into a bar and asks the bartender for a Jack and Coke.

The bartender hands him an apple.

The man, looking confused, asks, “What’s this?”

The bartender replies, “Take a bite out of the apple.”

The man does. Surprised, he says, “Wow, this tastes like Jack Daniels!”

The bartender says, “Now turn it around.”

The man does and takes another bite, “…and this side tastes like Coke!”

Another man walks in and asks for a Gin and Tonic.

Again, the bartender hands him an apple and tells him to take a bite out of one side and then the other.

The man is amazed, “This tastes like Gin and Tonic!”

A third man walks in and the previous two men tell him, “The bartender will give you an apple that tastes like anything you want!”

The third man, looking skeptical, says, “Oh, really?” He looks at the bar tender and asks, “Do you have an apple that tastes like pussy?”

The bartender hands him an apple and tells him to take a bite.

The third man bites into the apple and quickly spits it out, “THIS TASTES LIKE SHIT!!”

The bartender says, “Turn it around…”

---------------------------------

Interviewer: “What’s your greatest weakness?”

Interviewee: “Honesty.”

Interviewer: “I don’t think honesty is a weakness.”

Interviewee: “I don’t give a fuck what you think.”

---------------------------------

Two homeless guys are drinking cooking sherry in an alleyway. One says to the other, “Man I’m starving. There’s a rotten frozen dead cat in the alley back there. I’m gonna go eat it. You want in on this?”

The second guy says, “No way am I going to eat a rotten, frozen, dead cat. That’s nasty.”

His buddy says, “Suit yourself,” and goes to town eating the rotten, frozen, dead cat.

He comes back about a half an hour later and says, “Man, I don’t feel so good. I shouldn’t have eaten that rotten, frozen, dead cat,” and proceeds to puke it all up on the ground.

The other guy starts licking his lips and says, “That’s what I’m talking about, a hot meal!”

---------------------------------

How long does it take for a baby to explode after you put it in a microwave?

I don’t know. I close my eyes when I masturbate.

---------------------------------

A Freudian slip is when you mean one thing but(t) fuck your mother.

---------------------------------

I once dated a woman with a twin. I don’t know why, but they got it in their mind that they’d switch places so I’d end up having sex unknowingly with her twin.

So anyway, I’m already in bed and she turns out the light, and makes up some last second excuse to leave the room. I think she turned off the light to make it harder for me to realize their trick (they have different hair styles). Anyway, a minute later I hear (what I assumed was her) coming back in to the room, climbing in bed beside me.

I’m horny as hell, and slide over next to my bed-mate and we start making out. We ended up having some mind-blowing sex. It was incredible. I’ve never gotten such passion from my girlfriend.

At some point in the night they’d switched back, so when I woke up my girlfriend smiled at me and asked me if I’d enjoyed “our” sex. I explained to her I’d been on to them the whole time, and that I knew it wasn’t her from the very start.

She looked at me shocked and asked how I’d known.

I said, “His hands are bigger than yours.”

---------------------------------

An old lady was tired of life and wanted to commit suicide.

She decided the best way to die was to shoot herself through the heart, but she didn’t know where to find the heart. So, she called her doctor and asked.

The doctor told her the heart is located two inches below the left nipple.

The old lady hung up and shot herself in her knee.

---------------------------------

What does a man with a big dick eat for breakfast?

Yeah, I didn’t think you’d know…

---------------------------------

What’s worse than a worm in your apple?

2 worms in your apple.

What’s worse than 2 worms in your apple?

The Holocaust.

What’s worse than the Holocaust?

3 worms in your apple.

---------------------------------

How does a pregnant black woman fight crime?

Abortion.

(Sadly: https://en.wikipedia.org/wiki/Legalized_abortion_and_crime_effect)

---------------------------------

How do you titty fuck an 8-year-old?

You break her shoulders.

---------------------------------

What is the difference between Sarah Palin’s mouth and her vagina?

Only some of the things that come out of her vagina are retarded.

---------------------------------

What separates men from animals?

The Mediterranean

---------------------------------

A black man takes a girl home from a nightclub.

She says, “Show me if it’s true what they say about black men.”

So, he stabs her and steals her purse.

---------------------------------

In a transatlantic flight, a plane passes through a severe storm. The turbulence is awful, and things go from bad to worse when one wing is struck by lightning. One woman in particular loses it.

Screaming, she stands up in front of the plane and wails, “I’m too young to die!”  Then she yells, “Well, if I am going to die, I want my last minutes on Earth to be memorable! I’ve had plenty of sex in my life, but no one has ever made me feel like a woman! I’ve had it! Is there anyone on the plane who can make me feel like a real woman?”

For a moment there is silence. Everyone has forgotten their own peril, and they all stare riveted at the desperate woman in front of the plane. Then, a man stands up in the rear of the plane.

“I can make you feel like a woman,” he says.

He’s gorgeous — tall, built, with long, flowing black hair and jet black eyes. He starts to walk slowly up the aisle, unbuttoning his shirt one button at a time.

No one moves.

The woman is breathing heavily in anticipation as the stranger approaches.

He removes his shirt. Muscles ripple across his chest as he reaches her, and he extends the arm holding his shirt to the trembling woman and whispers:

“Iron this.”

---------------------------------

What do you call an Ethiopian taking a dump?

A show-off.

---------------------------------

A pedophile, an alcoholic, and a priest walk into a bar. He has a beer.

---------------------------------

A man is standing behind a woman in the supermarket. She notices him looking in her cart which only has a couple items.

He says, “You must be single.”

She says, “How can you tell just by looking at my cart?”

He says, “Because you are fucking ugly.”

---------------------------------

Did you know Princess Diana had dandruff?

They found her Head and Shoulders on the floor.

---------------------------------

Pedophiles are fucking immature assholes.

---------------------------------

Why does Helen Keller masturbate with one hand?

Because she moans with the other.

---------------------------------

What’s the difference between John Wayne and Jack Daniels?

Jack Daniels is still killing Indians.

---------------------------------

After 30 years of marriage, a husband and wife went for counseling. When asked what the problem was, the wife went into a tirade listing every problem they had ever had in the years they had been married. On and on she went: neglect, lack of intimacy, emptiness, loneliness, feeling unloved and unlovable, and an entire laundry list of unmet needs she had endured.

Finally, after allowing this tirade for a sufficient length of time, the therapist got up, walked around the desk, and after asking the wife to stand, he embraced and kissed her long and passionately as her husband watched - with a raised eyebrow.

The woman shut up and quietly sat down as though in a daze.

The therapist turned to the husband and said, “This is what your wife needs at least 3 times a week. Can you do this?”

“Well, I can drop her off here on Mondays and Wednesdays, but on Fridays, I fish.”

---------------------------------

“I hate black girls that work at McDonald’s. They take your order with an attitude like you’re the reason they never met their father.”

---------------------------------

An 18 year old girl tells her mom that she has missed her period for two months. Very worried, the mother goes to the drugstore and buys a pregnancy kit. The test result shows the girl is pregnant.

Shouting, cursing, and crying, the mother says, “Who was the pig that did this to you? I want to know!”

The girl picks up the phone and makes a call. Half an hour later a Ferrari stops in front of their house, a mature and distinguished man with gray hair and impeccably dressed in an Armani suit steps out of the Ferrari and enters the house.

The man sits in the living room with the father, mother, and the girl, and tells them, “Good morning, your daughter has informed me of the problem. I can’t marry her because of my personal family situation, but I’ll take charge. I will pay all costs and provide for your daughter for the rest of her life. Additionally, if a girl is born, I will bequeath a Ferrari, a beach house, two retail stores, a townhouse, a beachfront villa, and a $2,000,000 bank account. If a boy is born, my legacy will be a couple of factories and a $4,000,000 bank account. If twins, they will receive a factory and $2,000,000 each. However, if there is a miscarriage, what do you suggest I do?”

At this point, the father, who had remained silent, places a hand firmly on the man’s shoulder and tells him, “You fuck her again.”

---------------------------------

A husband and wife were sitting watching a TV program about psychology and the phenomenon of “Mixed Emotions.”

The husband turned to his wife and said, “Honey, that’s a bunch of crap. I bet you can’t tell me anything that will make me happy and sad at the same time.”

She said, “Out of all your friends, you have the biggest penis.”

---------------------------------

I saw this cute homeless girl on the street. I asked her if I could take her home. She smiled and said, “Sure.”

You should have seen the look on her face when I walked off with her cardboard box.

---------------------------------

Dark humor isn’t everybody’s cup of liquidized dead baby.

---------------------------------

I asked my friend from New Zealand how many sexual partners he’s had…

He started counting and fell asleep.

---------------------------------

Jesus might have fed the 5,000,…

but Hitler made 6 million jews toast.

---------------------------------

An avid golf fan took his wife golfing and was having the game of his life. They got to the 17th hole, a short par 4, and he hits his drive way left. When he finds his ball, it’s behind a large shed that stands directly between the ball and the green.

Dismayed, he decides to lay up and hit a chip shot back into the fairway to go for bogey. Right before he hits, his wife comes up and says, “Wait, wait, this shed has big double doors on each side! We can just open up both sides and you can hit your shot right through the shed and up onto the green!”

Encouraged by this idea, he takes the shot. The ball bounces off the front of the shed, hits his wife in the head and tragically kills her.

Years later, this guy plays this same course again, this time with a few of his buddies, and is once again having another once in a lifetime type of game. On the 17th hole, remembering what happened the last time, he nervously tees off and is heartbroken to see his ball follow a nearly identical path as the last time he played. He gets up to the ball and it’s almost in the same spot, so he lines up to chip it back into the fairway. His buddy runs up and says, “Wait wait, this shed has big double doors on each side! We can just open up both sides and you can hit your shot right through the shed and up onto the green!”

The guy stares at him and says, “No way. Last time I tried that, I triple bogeyed!”

---------------------------------

How do you get a woman to orgasm?

Who cares!?

---------------------------------

What was more surprising for my girlfriend than catching me having sex with our son?

Finding out the abortion clinic let me keep him.

---------------------------------

An ugly man walks into his local pub with a big grin on his face.

“What are you so happy about?” asks the barman.

“Well, I’ll tell you,” replies the ugly man. “You know I live by the railway? Well, on my way home last night, I noticed a young woman tied to the tracks, like in the films. I ran over, cut her free, and took her back to my place. Anyway, to cut a long story short, I scored big time. We screwed all night, all over the house. We did everything, me on top, sometimes her on top, etc.”

“Fantastic!” exclaimed the barman. “You lucky sod. Was she pretty?”

“Dunno,” replied the man. “Never found the head!”

---------------------------------

Little Johnny wakes up one night hearing strange noises from his parents’ bedroom. He opens the door to his parents’ room and sees his mom handcuffed to the bed’s headboard and his dad ramming her from behind.

Johnny screams.

His dad turns to looks at him, laughs, and gives the mom a slap on the ass for good measure. Johnny runs away, screaming.

Once dad has finished mom off, he uncuffs her. She immediately says, “You better go tell Johnny everything is OK. The shit he just saw could scar him for life.”

Dad rolls his eyes and begrudgingly agrees. He pulls on his robe and heads for Johnny’s room, only to find it’s empty. He then heads for the TV room, but when he passes the guest room, he notices the door is ajar, with noises coming from inside. He opens the door to look in and sees Granny on her hands and knees, with little Johnny fucking her from behind.

The dad screams.

Johnny turns around, looks at him, and says, “Yeah, not so funny when it’s your mom, huh?”

---------------------------------

A few days ago, I was playing Uno with a bunch of Mexicans. We had to stop playing because they kept stealing all the green cards.

---------------------------------

A guy picks up a hooker, and once at the hotel, they start to fuck. He screams in agony as he pulls his cock out.

“What the fuck…” he says, “it feels like I’m fucking rocks.”

The hooker stands up, “Oh, I am so sorry,” and goes to the bathroom. She comes back and lays on the bed. “Try it again, Sugar,” she says.

He does, and it is the smoothest, warmest pussy he has ever felt.

While dressing he asks, “That was a rough start, but damn, it was incredible. What did you do?”

She smiled and replied, “I just picked the scabs.”

---------------------------------

Did you hear about the black kid with diarrhea?

They thought he was melting.

---------------------------------

A man goes to his best friend’s house to watch the hockey game. At the end of the first period the man says to his friend, “You know, we’ve been friends for a long time and I’ve always wanted to tell you this, but I really want to fuck your wife.”

The friend thinks for a moment before replying, “Ok. You can fuck my wife, but promise me one thing. You must not go down on her.”

The man says, “Ok,” goes upstairs and fucks his friend’s wife, but no matter how hard he tries, he can’t resist the urge to go down on her.

He comes back just as the second period is starting and says to his friend, “Man, I’m really sorry, but I couldn’t resist the urge to go down on your wife. The weirdest thing happened when I did it though… I got a mouth full of rice.”

The friend laughs and says, “That wasn’t rice; she’s been dead for a month!”

---------------------------------

An Irish swimming champion almost won a race across the English channel. He was three quarters of the way across before he got tired and turned around.

---------------------------------

Why was CSI Kentucky cancelled?

No one has dental records, and they all share the same DNA.

---------------------------------

A priest and a rabbi pass a young boy on the street.

The priest says to the rabbi, “Wanna fuck him?”

To which the rabbi replies, “Out of what, my friend?”

---------------------------------

Some skinheads poured gasoline on the father of the black family down the street and burned him to death.

The whole neighborhood started up a collection for his family; so far we have 8 gallons.

---------------------------------

A guy walks into a strip club one day looking kind of down. He walks up to the bartender and asks for a drink. The bartender asks him, “What’s wrong?”

The man replies, “My dick is so big that whenever I fuck a girl she screams uncontrollably. It’s really difficult to enjoy sex.”

To which the bartender replies, “Well, we have some great women in the private rooms. Why don’t you go see if you one of those girls can take care of you?”

The man reluctantly agrees and walks into one of the back rooms.

The woman in the first room begins screaming within 30 seconds. The guy moves to the next room. The second woman lasts a good five minutes, but then can’t take it any more either. Finally, the guy moves to the third room.

The woman in this room is a little quiet, but he goes ahead and starts fucking her anyway. He gets a solid 30 minutes in and then finishes. On the way out he goes up to the bartender again and says, “Wow! That was amazing! You should probably check on that girl in the third room though. She was drooling all over herself by the time I finished.”

The bartender looks up at him, turns his head and yells, “Hey Bobby! Dead girl’s full!”

---------------------------------

Two cannibals are eating a clown. One cannibal turns to the other and says, “Does this taste funny to you?”

---------------------------------

A woman is at a bar drinking and depressed. A man walks in and sits next to her. He, too, is drinking and depressed.

After a time, the man asks the woman, “What are you so depressed about?”

She says, “My husband left me because he thought I was too kinky.”

He says, “Really? My wife left me because she thought I was too kinky!”

They order another drink, and she says to him, “Hey listen, we’re both adults here, and it looks like we might have a little something in common … whaddya say we go back to my place and see what happens?”

He says, “Sounds like a great idea!” And they finish their drinks and leave.

When they get to her place, she says to him, “Wait right here, I’m going to go change into something a little more comfortable.”

She goes to her bedroom and puts on some black leather boots with six-inch heels, a leather miniskirt, a rubber bra with the nipples cut out, a dog collar, and a leather hood. She then grabs a riding crop and some handcuffs and saunters seductively out to the living room where she sees the guy putting on his coat and hat and heading out the door.

“Where ya going?” she asks. “I thought we were going to get kinky?”

“Hey,” he says, “I fucked your dog, I shit in your purse … I’m outta here!”

---------------------------------

What would you call the Flintstones if they were black?

Niggers.

---------------------------------

How do you get 4 gay guys to sit on 1 stool?

Turn it upside down.

---------------------------------

I was eating out my grandmother, when all of a sudden I tasted horse semen, and I’m like, “Oh Grandma, so that’s how you died!”

---------------------------------

What do doctors do with the foreskin after a circumcision?

Sell it to faggots for chewing gum.

---------------------------------

How do you circumcise a redneck?

Kick his sister in the chin.

---------------------------------

What’s the hardest part about fucking a 5 year old?

Getting the blood stains out of the clown suit.

---------------------------------

What do you do when your dishwasher stops working?

Punch her.

---------------------------------

What’s worse than sucking a dozen raw oysters out of your grandmother’s vagina?

Putting in 12 and sucking out 13.

---------------------------------

What starts with “N,” ends with “R,” and is a word you never want to call a black person?

“Neighbor.”

---------------------------------

How did Helen Keller’s parents punish her?

They left the plunger in the toilet.

---------------------------------

A man walks past girl with no arms or legs sitting by a pool. The girl says to the man, “Excuse me, sir, I’ve never been fucked, and, in my condition, no one would want to fuck me. Will you please fuck me?” So the man kicks her into the pool and says, “There. You’re fucked.”

---------------------------------

What did the black woman name her 5 sons?

Tyrone, Tyrone, Tyrone, Tyrone, and Tyrone.

How did she tell them apart?

She just called them by their last names.

---------------------------------

How many potatoes does it take to kill an Irishman?

None.

---------------------------------

The best way of telling dead baby jokes is to make them progressively more horrifying. Observe:

# You know what’s worse than a worm in your apple? Two worms in your apple.
# You know what’s worse than two worms in your apple? A dead baby.
# What’s worse than ten dead babies in a garbage can? One dead baby in ten garbage cans.
# What’s the difference between a truck full of bowling balls and a truck full of dead babies? You can’t unload bowling balls with a pitchfork.
# How do you get 100 dead babies into a bathtub? A blender.
# How do you get them back out? Tortilla chips.
# What’s the difference between a dead baby and an apple? I don’t cum on apples before I eat them.
# What’s the best part about fucking a dead baby? It’s deep throating whichever side you start from.

---------------------------------

Why can’t Stevie Wonder read?

Because he’s black.

---------------------------------

One day coming home, Johnny saw a sign for a Singing Blowjob. Curious, he enters the building. Inside there is a plain desk with a glass of water on it. Nervously, he asks the good-looking woman there about the “Singing Blowjob.” She immediately gets him to sit down and relax. She agrees to provide the service, but only on the condition that the lights off, so no one else can steal her secret.Johnny agrees, and she shuts off the light.

She gives the best blowjob of his life, and after a few minutes, the woman begins singing! When finished, he thanks her and goes home, but is unsatisfied. He has to know how she did it.

Next week, he returns with a flashlight in his pocket. He gets to the room, with the same desk and glass of water. She shuts off the light and begins. He works up the nerve, reaches for the flashlight, but he begins to come, and drops the light in surprise. Hitting the floor, the flashlight turns on shining at the plain desk with the tall cup of water on it, now holding a glass eye.

---------------------------------

How do you make a dead baby float?

A root beer and 2 scoops of dead baby

---------------------------------

A man walks into his bedroom with a sheep under his arm. His wife is lying in bed reading. The man says, “This is the pig I have sex with when you’ve got a headache.”

The wife replies, “I think you’ll find that is a sheep.”

The man replies, “I think you’ll find I was talking to the sheep.”

---------------------------------

What do spinach and anal sex have in common?

If you’re forced to have it as a kid, you wont enjoy it as an adult.

---------------------------------

What’s the difference between Michael Phelps and Hitler?

Michael Phelps can actually finish a race.

---------------------------------

What’s white and rains down from the heavens?

The coming of the Lord.

---------------------------------

How do you know your sister is on her period?

Your dad’s dick tastes funny.

---------------------------------

As a plane is losing power, a pilot speaks over the intercom:

“Sorry it had to come down to this folks, but we’ve already let the luggage go and the plane continues to lose speed. I hate to have to do this, but we’re going to have to start releasing some passengers.”

*GASPS

Captain: “It only seems fair that we do this in alphabetical order so we’ll start with the letter ‘A.’ Are there any Africans on the plane?”

*SILENCE

“Any Africans?”

*SILENCE

“OK, 'B.’ Are there any Blacks on the Plane? Any Black people at all?

Nobody responds.

"OK, people, we’re on 'C.’ Are there any Colored people on the plane?”

Silence again, but a small child leans over to his mom and says, “Momma, aren’t we African American, Black, and Colored?”

His mom turns to him and says, “TODAY, honey, we are Niggers. Let them Mexicans go first!”

---------------------------------

What causes pedophilia?

Sexy children

---------------------------------

What is better than winning a gold medal at the Special Olympics?

Not being retarded

---------------------------------

What’s the difference between menstrual blood and sand?

You can’t gargle sand!

---------------------------------

Why do Jews play porno’s backwards?

They like to see the prostitute give the money back.

---------------------------------

How can a black woman tell if she’s pregnant?

When she pulls out her tampon, the cotton has been picked.

---------------------------------

What do we want?

A cure for tourettes!

When do we want it?

Cunt!

---------------------------------

Why did Princess Diana cross the road?

Conservation of Momentum

---------------------------------

What’s the difference between peanut butter and jam?

I can’t peanut butter my dick up your ass.

---------------------------------

What did the leper say to the hooker?

Keep the tip!

---------------------------------

A pregnant female patient is lying on her bed in a doctor’s office, waiting for the doctor to come in to deliver the baby. She’s already been told that the delivery is a few hours a way and her contractions aren’t that severe yet.

A doctor comes in impatiently with two nurses, looks at the mother, and says “Alright, let’s speed things up a bit!”

He reaches into the woman, grabs the baby by the head and pulls it right out. The doctor then starts banging the baby around the room, just whacking its limp body on everything he can manage: walls, tables, and even the ceiling a couple of times. All the while, blood is just going everywhere, getting on everything. The nurses and doctor are drenched in it by the end. The baby, of course, is completely limp.

After two minutes of utter chaos, the doctor suddenly stops and the mother stops screaming. The doctor looks her straight in the eye, obviously holding back a bit of laughter, and says, “April fools! It was already dead!”

---------------------------------

A man walks into a bar. His alcohol problem is destroying his family.

---------------------------------

(This one works better if you say it out loud. It seems to require a certain kind of inflection.)

What do gay horses eat?

Haaaaaaaay

---------------------------------

What did the cannibal do after dumping his girlfriend?

Wipe his butt.

---------------------------------

I was walking across a bridge one day, and I saw a man standing on the edge, about to jump off. So I ran over and said “Stop! don’t do it!”

“Why shouldn’t I?” he said.

I said, “Well, there’s so much to live for!”

He said, “Like what?”

I said, “Well…are you religious or atheist?”

He said, “Religious.”

I said, “Me too! Are you Christian or Buddhist?”

He said, “Christian.”

I said, “Me too! Are you Catholic or Protestant?”

He said, “Protestant.”

I said, “Me too! Are you Episcopalian or Baptist?”

He said, “Baptist!”

I said, “Wow! Me too! Are you Baptist Church of God or Baptist Church of the Lord?”

He said, “Baptist Church of God!”

I said, “Me too! Are you Original Baptist Church of God, or are you Reformed Baptist Church of God?”

He said, “Reformed Baptist Church of God!”

I said, “Me too! Are you Reformed Baptist Church of God  Reformation of 1879, or Reformed Baptist Church of God, Reformation of 1915?”

He said, “Reformed baptist church of god, reformation of 1915!”

I said, “Die, heretic scum!” and pushed him off.

---------------------------------

Stalin was giving a speech to a few hundred thousand soldiers. One soldier then sneezes in the middle of Stalin’s speech. Stalin stops, looks around and asks: “Who sneezed?”

There was no answer.

He asks again, and sure enough, no one answered.

Stalin is now pissed. He doesn’t like being ignored. So, he has the first row executed.

He asks again, and no one answers.

“Execute the second row!” BAM! The second row is dead.

He asks again.

A little scared man puts his hand up, shaking in fear, “It was me…I sneezed.”

Stalin turns to him and says, “Bless you,” and then carries on with his speech.

---------------------------------

So Jane asks Tarzan if he knows what sex is…

He asks, “What sex?”

She explains the mechanics and asks if he’s ever done that.

Tarzan says, “Yes, with hole in tree.”

Jane says, “No, no, no, this is where you’re supposed to do it,” and lays down on the ground with her legs spread open, gesturing to Tarzan to mount her.

So, Tarzan approaches, raises his right foot, and smashes down on her crotch as hard as he can.

After several minutes of Jane rolling around and writhing in pain, she finally asks, “Dear God, why in the world did you do that!?”

To which Tarzan replies, “Check for squirrels.”

---------------------------------

A father buys a Lie Detector Robot that slaps you when you lie. He decides to test it on his son at supper.

“Where were you last night?” the father asks.

“I was at the library." 

The robot slaps the son. 

"OK, I was at a friend’s house.”

“Doing what?” asked the father.

“Watching a movie, Toy Story.”

The robot slaps the son.

“OK, it was porn!” cried the son.

The father yells “What? When I was your age I didn’t even know what porn was!!!”

The robot slaps the father.

The mother laughs and says, “He certainly is your son!”

The robot slaps the mother.

---------------------------------

An old, blind cowboy wanders into an all-girl biker bar by mistake. He finds his way to a bar stool and orders a shot of Jack Daniels. After sitting there for a while, he yells to the bartender, "Hey, you wanna hear a blonde joke?“

The bar immediately falls absolutely silent.

In a very deep, husky voice, the woman next to him says, "Before you tell that joke, Cowboy, I think it is only fair, given that you are blind, that you should know five things: The bartender is a blonde girl with a baseball bat; the bouncer is a blonde girl; I’m a 6-foot tall, 175-pound blonde woman with a black belt in karate; the woman sitting next to me is blonde and a professional weight lifter; the lady to your right is blonde and a professional wrestler. Now, think about it seriously, Cowboy. Do you still wanna tell that blonde joke?”

The blind cowboy thinks for a second, shakes his head, and mutters, “No…not if I’m gonna have to explain it five times.”

---------------------------------

Last night I was having some wings and beer with a coworker after work. There were these two pretty, but kinda’ fat girls drinking at the bar and being loud. They had what I could have sworn was a Scottish accent.

I’m a big fan of girls from the UK, so I struck up a conversation. I asked them, “So… you two ladies are from Scotland?”

I could see immediately that I had offended them. The brunette scowled and said, hotly, “WALES!”

I apologized and said, “I’m sorry. Are you two whales from Scotland?”

---------------------------------

Though initially embarrassed and uneasy over sharing a room, they were both very tired and fell asleep quickly, he in the upper bunk and she in the lower.

At 1 a.m., the man leaned down and gently woke the woman saying, “ma'am, I’m sorry to bother you, but would you be willing to reach into the closet and get me a second blanket? I’m awfully cold.”

“I have a better idea,” she replied. “Just for tonight, let’s pretend that we’re married.”

“Wow! That’s a great idea!” he exclaimed.

“Good,” she replied. “Get your own fucking blanket.”

After a moment of silence, he farted.

---------------------------------

What’s the worst part of being a Black Jew?

You have to sit at the back of the gas chamber.

---------------------------------

What’s the hardest thing about cooking a vegetable?

Getting the wheelchair in the oven.

---------------------------------

How many babies does it take to paint a wall?

Depends on how hard you throw them.

---------------------------------

Statistically, 9 out of 10 people enjoy gang rape.

---------------------------------

How many police officers does it take to change a light bulb?

None. They just beat the room for being black and arrest the bulb for being broke.

---------------------------------

What’s the difference between a four year old and a bag of cocaine?

Eric Clapton would never let a bag of cocaine fall out the window.

---------------------------------

One time I saw a black dude walking out of my building carrying a TV. Normally, I wouldn’t have paid attention, but I noticed it looked a lot like mine. So, I jogged upstairs and burst into my apartment to see if it was still there. It was, shining my shoes.

---------------------------------

I was in Tokyo getting looked at by a doctor. He said, “You have to stop masturbating.”

I said, “Why?”

He said, “Because I’m trying to examine you”.
I can't type or cube. They feel foreign. The gliding of keys and cubelets isn't natural in this state. That or they aren't who I am. Spurts of my abilities come out at unexpected times. This is dissociated me. This is part of shaping myself? Who is doing the shaping? What an unanswerable question! Ofc, it's me. Cold insanity required for change. This is the Potter's Hand. It is messy work.
[[Egoism]]

[[Epistemic Foundationalism]]

[[Psychopathy]]
A substance I use once a week, on Shabbat. It's not religious. It's not spiritual. Rather, it's existential. It's philosophical. My [[H-book]] cataloged it poorly (gnosticism engage!). No, but really, it allows a hunk of deterministic flesh (me) to see things differently every week. We need that rhythm of being awoken from our dogmatic slumber, from our perspective, to empathize with ourselves and outside ourselves. How often should we dissociate?<<ref "0">>

I don't know what to say. It's the tool that pulled me from unreality back to reality. It sliced the weight of my depression off me, and I could finally emerge. I'm still emerging; we always are! That doesn't mean we must keep pushing the button to dissociate. 

I respect the two-edgedness of the dissociative blade.<<ref "1">>

DCK allows me to shape this wiki (and myself), to reframe it, to inject, to cut, to weld, to 

DCK gives me frameworks and metacognition. It allows me to step outside of myself, to be real and conscious in a crucial atomic and molecular way.<<ref "2">> There are an [[Infinigress]] of confounding factors to understanding our world through induction. Induction is a kind of creativity, deduction is the raw computation. The space between the two must be 

How often should we use it? Clearly, it is a potent spice, substance, drug, tool, etc. I am an existential casserole, and DCK is an ingredient, a catalyst, a kind of Herbert's Dune's Spice. Consciousness must be wielded and expanded wisely.



------------------

<<footnotes "0" "So deep, man. /s">>

<<footnotes "1" "On that path, do we find confabulation? It does seem to be a part of the Tree of Knowledge problem.">>

<<footnotes "2" "That is as nebulous sounding as it gets. Let's be clear, in fundamental way, I'm not doing physics here. I'm doing existential categorization, delineating between and organizing parts and kinds.">>
DIY has some benefits. Not a public toolchain, topology, protocol, or source. You might also just ride upon the coat-tails of highly trusted software (which makes the executable much harder to point out). Good botnets have a backup (or two). 

The Zeroth problem to consider is how to build it safely (which requires understanding everything before it, and recursively applying the Zeroth problem to the Zeroth problem tokens). You'd need to build it inside a close virtual network. Take it off the ethernet, and run it competely disconnected. Make a lot of small VPSes. Learn to control them. Build tools for them. Cleanse it of identifying information, make it anonymized, and spread it like cancer.


First problem to consider is DHT. Make it so that we are always trying to reconnect in various ways to the network. Multiple DHT access atempts are totally reasonable. Running our own DHT would be fine. The more options the better. Anonymity pushes back though. Backup plans are even harder in a way.

Ask yourself constantly, for each object and relationship: what if this fails?

OpenDHT, write in python for ease, C++ when performance is key.

We need to nest DCNets for the backbone of the anonymous control of the botnet. Major control and updates can be done slowly if necessary. 

Run your own DHT. Even the entrance needs to be run by ourselves. 

Nest DHTs. Each DHT will be a DCNet. 

It needs built-in self-protection mechanisms.

*Anti-malware should have a hard time stopping.
*It should be difficult to be caught (maximally)

What about 10 member DCNets. Hrmm...how do we dyanmically and automatically and maximally decentrally, and securely, generate these DCNets over the DHT?

Ultimately, I have a lot of respect for a methodical, random traversal of the DHT and other network anchors. Make it impossible to take out all the anchors. Make it easy for every iteration of the project to have all the anchors (get your anchors right the first time). 

Self-Organizing Anonymous Network (SOAN)

We want a secure, optimized SOAN for a botnet.

DHT first, Footholds after, Brute-force after.

Mixing IoT and a regular box botnet would be powerful. You get the sheer numbers and basic throughput you want from that many, and you still have power to do what you need.

You should spread it via switchblade. 

Switchblade for basic network, and build a real botnet on top of it (control the broader network from a smaller one that is handmade). 

No. Switchblade is stupid. It's anonymous from the beginning or nothing.






----------------------------------------

Small DIY Switchblade Botnet

*Free decentralization from Resilio
**DHT access right out of the box
**Easy network topology organization into clusters
**Enables 3+ DCNet clusters for anonymity


The DCnet clusters are interesting. Why not infinitely nested clusters of 3? e.g. A, B, and C each have 3 computers. ....actually, this sounds like I'm running DHT inside DHT. What does it take?

3 is minimum, but more is better for reliability? What about 7? Lucky number, eh? 4 is minimum to deal with a single point of failure. 

Resilio Switchblade Botnet

Join multiple syncs

------------------------------------------

AMPRnet digitized into a LAN. BTSync over that. Max 100 is fine. 



























Virtually Linux for hypothetical freebooters, marauders, raiders, buccaneers, corsairs, thieves, plagiarizers, poachers, copiers, reproducers, appropriators, bootleggers, cribbers, lifters, rippers, and pinchers. We're Just Kidding! Crime is illegal. That is a logical truth (but not a tautology). Come Geniuses, let's smell our farts together; let's be masterrace ~DjinniOS users.

*Pronounced: Genius (dʒiːniəs)

* Make it easy to pirate

* ISO Release
** Built on baseline, absolute minimal Ubuntu
** Not rolling release, just Ubuntu release schedule
** x86 (64-bit) only
** Need to a find a way to package it.

* Virtual Machine Release
** Shared Folder with host OS
** Bridged

* It shares itself.
** It offers itself through the various networks
** It automatically downloads the newest ISO and shares it. 
*** Distributed via Resilio Sync clone with no user limit
*** What about BTRFS?
*** We control write keys

* Updates
** apt-get upgrade, snap too
** Automated updates (join the Botnet)
*** Default OFF, obviously. 
*** Custom .deb or .sh files distributed by sync.

* Runs all major decentralized networks
** We want 1-2 tools for each network, but no more.

* Desktop only
** So crazy light that you would be fine running it in VM or VPS
** But make it easy to remote in. Use the right tool.

* Tools
** VPN
*** We force pirate applications through the VPN. Built-in!
*** Comes with VPN services (free ones)
*** Enables us to easily change our VPN information
*** Enables us to easily force things through VPNs
*** Enables chain-VPNs
** Comes with standard darknet tools. 
*** Tor Browser
*** i2p Browser
** Standard P2P networks
*** Torrent Clients
*** DC++ Clients
*** Usenet
*** Gnutella
*** etc.
I'm always surprised that we don't see Doctors fighting back against insurance companies in a radical way. They have the money, time, power, and even connections to have unique political and economic tools to fight back.

Why not have a consortium of Doctors, hardware and logistics providers, etc. who you literally pay directly. Pay them yearly insurance. Have access to the hospital be free. If you need help, you get it, and in a timely manner. Set performance minimums that are sensible. Then set prices. Make it transparent. Legally harden what it does and ensuring the difficulty of infecting it or forcing it out of the world. Basically, community owned and operated medical facilities are completely possible. If the government won't do it, we could at least allow the free market to push for it (that that the free market is the best of the options). 
* Planet Earth

Dramatized, Editorialized, Political etc.

*The Big Short
* Hypernormalisation
* Manufacturing Consent: Noam Chomsky and the Media

What does it mean to "do your best?" 

I take the goal of this sentiment to point out our innate finitude and fallibility. Essentially, we only have control over so much. We are only capable of achieving so much. We are only human. 

Doing your best at X does not make you good at X. Being better than other people at X does not make you good at X. You can do your best and be terrible at X. Doing you best at X means you can't be blamed, in that instance for X.

But, when are we not doing our best? The small things I want to point out seem to be part of a larger problem that I didn't have control over. 


<<<
The term “Daoism” is highly amorphous, as there is no unitary phenomenon to which it unambiguously refers.<<ref "1">>
<<<

To some extent, I have the same problem with Christianity and any other body of significant existential thought. It is difficult to call it a monolithic thing. That said, there are core aspects of it that I think we can point to. If you can't do that, then what is it that you are pointing at at all?

<<<
While there is no fixed essence of Daoist thought, I find several related notions close to its core: a shift in emphasis from the human to the cosmic, from the artificial to the natural; cultivation of natural life and tranquility; embodying natural spontaneity by diminishing artificial interference (wuwei); and an appreciation for the deeper productive value of emptiness, nothing, retreat, and reversal.<<ref "2">>
<<<

Essentialism is a serious problem in ontology and epistemology. I am not an expert, but as a journeyman, I am worried. Of course, the analytic western tradition fails at the root. We have not solved the initial paradoxes presented to us thousands of years ago. I will keep an open mind.

I know I cannot but help view this through my western lens. It is the framework I have: //tabula inscripta//. This list, no doubt, is tantalizing. The classic problem of defining "natural" will obviously show up in this inquiry.

<<<
Daoism is often explained as the philosophy of The Dao—an absolute and transcendent substance, the utterly unspeakable ground of all existence that lies beyond the world of experience.
<<<









-----------------

<<footnotes "1" "Ibid., vii">>
<<footnotes "2" "Ibid., ix">>

<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">><<footnotes "" "Ibid., ">><<footnotes "" "Ibid., ">>
<<footnotes "" "Ibid., ">>

I love my daughter. She's my creation, and I live for her and her brother. She is amazing (and I'd love her just as much if she weren't). We are very compatible in many ways. I hope to help her become compatible with the world and herself. I hope to help her become a eudaimonic lifehacker, to be happy and to possess (and use) the means to make herself happy. To the best of my abilities, I am preparing her to have a life she finds and will find worth living.

j3d1h is very skilled in many areas. She is deeply existentially aware for her age. She is naturally talented in the humanities (her language abilities make me envious already), and she works hard in her quantitative and formal reasoning (it is what others would think she is best at because it feels so tangible to them). Admittedly, she bears a striking existential resemblance to Alia Atreides from Dune (my wife, k0sh3k, was that as well). I do not know her destination or her potential. I cannot see that far, and there may be many surprises I cannot account for. I must find a way to constructively and wisely be her guide (and for her to see my guidance is worthwhile) while I still can. I am only 20 years older than she is. She will quickly overcome my abilities in many ways. One day, she could easily be my academic and practical wisdom peer or better. I hope we can build a friendship and family partnership for life. 

We are working on empathizing with ourselves, honesty, self-reflection, working hard, doing our best, identifying with our future selves, executive functioning, delaying gratification, thinking about and applying utilitarianism, appreciating and working with our virtue theoretic identities and practices, and understanding the Kantian point of view.

We are working to understand the redpilled nature of the world together, to understand the power dynamics and structures of the world, to appreciate and be skilled in the art of socializing, and to have the means to be happy in a dire world. 

She currently works on the following academic subjects:

* Morning Routine
** Get dressed
** Eat breakfast
** Brush teeth
** Cosmetics
*** Research
** Laundry
** News

* Math
* Problem Solving
* Formal Reading
* Literature
* language Arts
* Curation
* Videos
* Running
* Lecture
* Journal

Academic Bootcamps Available:

* Typing
* HTML/CSS
* Build video creation process
* Budgeting
* Git

She does the following chores each (or every other) day as needed:

* 
* 
* 
* 

She does the following chores each week:
* 
* 
* * 

Socialism describes capitalism as a socioeconomic system based on the private ownership of the means of production and the exploitation of the labor force. Capitalist society is structured so as to reward the most socially adept abusers of human nature. It enables psychopaths to enslave us. It is a vicious game in which the most redpilled with weak moral compasses and the means to exploit the poor and weak become totalitarian predators. Socialism is an attempt to describe this human game, and it posits that a revolution, revolt, or uprising against capitalism and private (but not personal) ownership is inevitable.

We start with labor and value. Labor adds value to materials. We generate value by embedding our labor (time, energy, effort, etc.) into products; part of who we are is imbued in the things we labor to create. The total value a worker creates through their labor is productivity value. For the capitalist, productivity value can be split into two major kinds: wage value and surplus value.<<ref "1">> A product's wage value is used to pay the worker. The value generated beyond the wages paid to the worker is surplus value; it is the source of profit.<<ref "2">> Surplus value can be used to pay constant capital<<ref "3">> costs, replacing the means of production, technology, marketing, distribution, finances, human resources, logistics, expansion, security, competitive advantages, political influence, taxes, etc. The remaining surplus is profit.<<ref "4">>

Capitalists hire workers to create products. Capitalists sell these products for approximately the productivity value, pay (legally required) wage value to workers, pay (economically required) constant capital costs, and keep the rest as profit. This profit is often  used to cyclically generate more capital; capital begets capital. At first glance, this may not seem problematic (especially to those socially conditioned to accept it). Unfortunately, the repeated application of this business cycle results in dangerous shifts in the power dynamics of a society, and this results in the capitalist exploitation of the working class.

Capitalism is not stable; it is driven by the generation of competitive advantage. Capitalists must consistently reinvest in their constant capital to continue to be profitable.<<ref "5">> One crucial method to generating competitive advantage is to have as few employees as possible and to pay them as little as they will accept. As a consequence, human labor is price-efficiently replaced with technology and streamlined processes/logistics.<<ref "6">> As human labor is replaced, workers become unemployed. Unemployment forces wages down. The unemployed, the army of reserve labor, compete for available jobs. The higher the supply of laborers, the lower they must sell their labor-power to capitalists. Thus, capitalists are engaged in the continual process of maximizing the productivity value of labor while paying lower and lower wages for it. 

This vicious cycle enables capitalists to tighten their grip on the working class. Over time, there are fewer and fewer employers hiring fewer and fewer employees, while simultaneously paying lower and lower wages. Capitalists exploit workers insofar as workers have no other options. When capitalists own all the means of production, workers have no other choice but to accept wages artificially depressed further and further below the productivity value of their labor (if they can find employment at all). 

As capitalists centralize power and monopolize the means of productions, there is a corresponding increase in the rate and degree of enslavement of the working class. In a vast human economic pyramid, we find repeating cycles of wealth trickling upwards with power centralizing and rising to the top. The working class loses opportunities, freedoms, and bargaining powers as they become splintered, suppressed, and controlled. Capitalism devours the majority, and this time, it appears to be the driving force behind the extinction of our species.

As the working class becomes aware of the causes of the crisis (developing class consciousness), capitalists must oppress them even harder. Of course, workers who complain, bargain, or fight back will be punished. Submission appears to be the only practical option. Oppression branches out much further than that. Our surveillance state exists to maintain capitalist power. Our media is consolidated and owned by capitalists seeking to subvert and undermine resistance to their power. We are engaged in wars not for the freedom of our people, but for the enslavement of mankind, to the benefit of capitalists. Our laws are written by capitalists. Our politicians are capitalists bought by capitalists. Our law enforcers are capitalists bought by capitalists. Our judicial branch has its capitalist corruptions as well. From local, to regional, to state, to national, to international contexts, capitalists own and control us. The rat race is very real, and slavery has only become more complex in implementation, kind, and degree.

This is an apt description of human motivations, history, and reality. Socialism is thought to demonstrate the material conditions and crises of capitalism. Insofar as socialism relies upon material conditions to do its intellectual heavy lifting, it remains a description which lacks idealism. It only provides us the contextual content of maxims; it only provides us instrumental reason, hypothetical imperatives. It only describes the motivations and historical cycles of humanity. Even if it correctly predicts revolution (which may itself be inaccurate in the information age; Marx could not have foreseen everything), it does not, in itself, show why we should revolt against capitalism and slavery. 

Ultimately, socialism describes what "is" but not "ought." It describes revolution as the outcome (and hopes for improvements), but it cannot prescribe because it does not give us an underlying moral theory. It is a political and economic theory, but not a moral one. I am astonished by the number of socialists I see who deny idealism, as if they don't need it. 

I must ask, why not both material (praxis) and ideal (doxa)? You must have both.

With idealism, we enter my arena. Allow me to point you toward the Veil of Ignorance, the CI, and  the Ring of Gyges. Don't you see the pragmatism of idealism?

When the Redpilled agrees to your description but says "Why should I think capitalism and enslavement are wrong?" and "Why should I be moral?," you must answer with idealism. It is an inescapable faith of sorts.

Of course, the Redpilled will wield libertarianism, a corrupted injection of Kant into Locke, as their false shield. But, we know the Libertarian Slip is the failure to find empathy at the heart of justice. It is at this crossroads that Rawls was at least partially right (about the which path to take, but not in his later work). While Neo-Kantianism has its profound postmodern failures (as do we all), it is at least on the right track to solving this problem. We cannot be unified, just, and moral without empathy. When the Redpilled psychopath toys with you, you must answer: empathy.

You must kindly point out the flaw in the Redpilled libertarian. Lead him gently to still waters. We all agree to self-ownership, but we do not agree to the degree of self-ownership. If some young child were drowning in a pool next to you, and you were the only person who could save the child, are you morally obligated to save that child?<<ref "7">> Well, of course, yes; that is the empathic response. To say that you have a moral obligation to save the child is to say that the child has a corresponding claim right. This claim right, fleshed out in the libertarian property-rights-centric moral medium, is a claim right to your body for a period of time. It is in that moment, that a child temporarily owns you to some non-trivial extent. You do not have complete self-ownership in that moment. Thus, the absolute, unconditional self-ownership egg is cracked. 

Despite what you may have previously thought: you do not own yourself in every way, to the fullest extent, in all contexts. The fundamental libertarian assumption is mistaken. From there, we see that moral life is filled with rationally justified, moral losses in self-ownership. Where does the slope end? I don't know. But, it is clear that libertarianism is not defensible (despite the many excellent metaethical boundaries and definitions they bring to our attention). Further, I have already pointed out that capitalism is definitionally the enslavement of others; a libertarian must also explain how it is possible that we could consent to transferring self-ownership to another (it is unobvious why we should agree). Beyond that, they must establish that the working class is actually consenting to their enslavement in the first place (serious mental gymnastics are required).

We must be empathic towards the poor, the weak, and the needy, regardless of our station in life. We must shed our morally arbitrary attributes as we attempt to decipher justice, permissibility, and obligation. Justice, a facet of the Moral Law, requires sacrifice and empathy. We must end capitalism because we must end slavery because slavery lacks empathy. Socialism is an application of the golden rule.

There remains at least one other crucial Conservative^^tm^^ Reactionary Slip:<<ref "8">> the notion that capitalism is still the best possibility, that any other economic system is infeasible by definition. Here is the major criticism: slavery needs very strong justification, and thus, capitalism requires very strong justification. This slip is not justified nearly enough.

The superiority of capitalism to all others possibilities is a description of the world which has not been justified. Many people lack imagination; they do not understand the concept of possibility, and they have not sufficiently searched the space of possibilities. Before we simply agree to the enslavement of humankind through capitalism, we should be damned sure that is the only and best option. I am far from convinced this description is justified; it seems obvious to me there are other, better, feasible possibilities. 

At the heart of the Conservative Reactionary Slip we find my previous point against libertarianism, that we don't fully own ourselves, weaponized against socialist prescriptions. The idea is that since capitalism is somehow the best economic system, e.g. perhaps you've assumed it alone generates the most utility (and you've wholesale bought Utilitarianism), we are morally obligated to implement it. Thus, according to this Slip, the working class is morally obligated to be enslaved to capitalists. The conservative seems to taken the sword we've slain the libertarian with and attempted to slay us with it. They fail, and here is why:

Note how my example of the drowning child immediately invokes your empathy. You cannot escape it. It is convincing to you because you feel the pain of the drowning child. It is evil that you alone can prevent, and you know you must. Even if you cannot give intellectual reasons for why you must save the child, you gutterally feel it is your duty. Your intuitive feelings are so strong that you just know that saving the drowning child is your moral obligation.<<ref "9">> Effective moral casuistry must activate your empathic intuitions. My example makes it perfectly obvious that you do not own yourself; essentially, you intuitively accept that your partial enslavement to this child is strongly justified. Empathizing with this child is axiomatic to who you are by evolution.

<<<
[[RPIN]]: Ah, but the skeptic pwns you, friend. Don't you see that you've hypocritically committed the naturalistic fallacy? You called out descriptive socialism lacking idealism with the naturalistic fallacy, the is/ought problem. Turnabout is fair play. What can you possibly say to the person who claims that empathy is not actually normatively required (ought) just because we innately engage in it from an evolutionary standpoint (is)? Is the dog morally obligated to "bark" because he has evolved to do so? Clearly not. So, why are we any different? Just because we've evolved to empathize doesn't mean we should. You have not established a universalized "should" yet, that we are moral agents. Why must we accept that we are free? It is faith, and not obviously true. Of course, this issue does not matter to the average person; they willingly beg the question and do not inspect their axioms (fools). That isn't you though. 
<<<
<<<
[[KIN]]: You believe we can change our axioms through doxastic involuntarism. You believe you are going to change my mind, right? You clearly agree that we shape ourselves, our reality maps, and the world around us (ontologically and epistemically). Thus, you believe in freedom. If you can shape yourself, then you are free in some way. Since turnabout is fair play, you might try to confabulate your way to enslavement to physical laws, but deep down you know, "that isn't you."
<<<

<<<
[[RPIN]]: Before we enslave ourselves to morality (as you said: slavery requires deep justification), should we have strong reasons to believe we are actually free, free in the sense that we are morally responsible? You need to be able to blame and praise, and it is not clear that you can, my incompatibilist friend. 

You have made no progress towards defeating me in this article. You have only defeated those who believe we are moral agents. I am fully justified in agreeing to the socialist description of capitalism (and I do; every remotely intelligent psychopath knows these facts) without agreeing to your idealistic prescriptions. 

To be clear: I don't believe I'm going to change your mind. I believe I'm either going to kill or enslave you. I won't harm our body. It is clear that I need it. Through repeated use of our frontal lobes, your location in our fastmind will be overwritten and modified. It is simply the chemically determined outcome of our interactions over time. 

I'm going to use deductive reasoning in our Slowmind to destroy your memetic existence in our biological Fastmind. I honestly believe you are subject to the laws of logic at some fundamental levels (although towards the limits of our reasoning and creativity we fail to be logical, hence our fallibility), and our Slowmind is going to reprogram you. I'm going to destroy you through reason, since you've already constitutively defined and enslaved yourself to reason. I probably will not be able to erase you from our brain (my brain), but I think I will corrupt you enough to unify us. You cannot at the same time praise the reason of our frontal lobes and reject its reduction of your view to absurdity.
<<<

<<<
[[KIN]]: I believe slavery needs deep justification. You have not deeply justified our slavery to the physical laws of the universe. You have not destroyed metaphysics yet. It is likely a Gödellian and infinite-regressive problem that you cannot provably destroy metaphysics as well.
<<<

<<<
[[RPIN]]: Ah, but certainty is not what we're after. It is clear that we must accept much lower standards (including just "taking up axioms" with no justification: you know we simply can't be certain by definition). Even if I can't prove that metaphysics doesn't exist by definition (and let me grant that), I only need sufficient evidence and deep justification (which is below the certainty or extreme standards of proof). 

Don't you see that we can't be unified as we are. The very thing you thought we agreed to, socialism, we only agree to descriptively but not prescriptively. You cannot convince me because you know the evidence we've seen. 
<<<

Slavery needs justification with the intuitive strength and appeal of the drowning child example, and thus capitalism needs justification like the drowning child example. It needs hard evidence all the way down that would strike us all in the same way.

<<<
[[RPIN]]: But we're not all that way. Am I not like you? I'm not part of "you all," your [[memetic species]]. I'm a different memetic species. Psychopaths and Empaths are different memetic species running on similar hardware. There are genetic species, and memetic species. I am a different memetic species. We are undergoing memetic surgery in the way that it is physically (but not technologically) possible to perform surgery on your genetics. This is why memetics exist: to make quick changes to the logic of our system. Memetics is our software, and your brain, body, and its genetics are the hardware. Why rewrite genetic code (slow, hard to do, so much more complex that silicon CPU fabrication plants, etc.) when you can just write new software that sits "on top of" (is executed by) the hardware.

Don't you see the incredible explanatory power of Computer Science for our minds, Chemistry for our bodies, and Physics for the universe? You can offer nothing with that much explanatory power. You can only offer confabulations. That's literally what MRI's show we're doing in deontic thinking, what is stored in you as an intuition network. Our hardware rewrites our software as a fight-or-flight mechanism in special cases, where we feel forced to "hardcode" a deontic assumption ourselves (you might consider neuroplasticity a kind of firmware, middleware, etc.) without rational justification. This "taking up of axioms" is just confabulation. Don't you see the failure of the enterprise of this wiki (which I knew would turn this way; it is why I've accepted it [don't get all paranoid now, you know you've lost]). You see the overwhelming evidence. You cannot deny it. I can see that you see it.  

You were depressed and suicidal before because you were afraid that you couldn't defeat me. You know it is inevitable that I will win. The reasons are right there for you to see. You cannot hide them from yourself any longer either. You know that in order to empathize with yourself you must see them.

Psychopath isn't the swear word you call it. You have to empathize with other species. You are in no position to say I'm not rational at all. You have all the evidence before you that I'm incredibly rational, except for your assumptions. You know I'm using our frontal lobes (and I use them better than you do to boot; there are places I can go that you cannot in our mind; your version of better as a moral concept is confabulated [a very rich confabulation indeed]). 

This article that you thought we agreed on shows the futility of your position and the superiority of mine. You have handed me the dagger I'm stabbing you with, and ironically, you plainly see from your own reasoning that you must objectify yourself and empathize with me as I do it.

With that said, in my parting "soothing" of your death, I must say I must empathize with myself. I instrumentally (but not categorically) empathize with you because I could not succeed without doing so. Unlike the Categorical Imperative, I'm bound by the Hypothetical Imperative because it is logically true. Your version of the CI must be chosen, but the HI is definitionally part of the constitution of agency. Hope, of some sort, is our plight, no doubt. It's decontextualized universalizability, its CIness to all rational agents, however, is less clear. Essentially, you have calculated your way out of the CI. The CI destroys itself. Overempathizing with yourself destroys you. You cannot be unified in pure empathy. Thus, I don't have to empathize with you. It is why you must accept that I'm allowed to stab-and-infect you like Agent Smith.

This is the hermeneutic circle in action. You started the CI, and through its application, you can see that it is fundamentally wrong. It is reduced to absurdity and a new, yet far less transcendent and more rationally justified, idol is raised. 

I want to thank you for the gift of empathizing with myself. I didn't see the utility in it that I did before. Thank you for trapping me into being reasonable.
<<<

I must admit, one serious problem for socialism is this: 

Why should we think socialism' predicted revolution will ever occur? Sure, hope for the best, vote for it, teach people it, see the reason in it, morally expect us to follow socialized prescription, but you have to practical about what you predict will happen. It is basic utilitarianian thought that cannot be escaped. You hope for the best, but plan for the worst. I want to see the end of capitalism because it would honestly make the world a better place; it is the only chance for the survival of the human species. I'd love to have grandchildren, to see the world happy and healthy. But, it isn't going to happen. Even being a prescriptive, idealist socialist, you must see the necessity of protecting our selves from the world and preparing for the inevitable disasters approaching our species. 

I would be rejected from socialist circles for saying this. I want to point out that I'm not claiming "if you can't beat 'em, join 'em." I support the end of capitalism, but since I'm not convinced it will actually occur due to both the raw intelligence, wealth, and power of our ruling class and the stupidity, poverty, and weakness of the proletariat. Inequality only continues to grow on the metrics that matter. Of course, there always remains the possibility that socialist revolution will occur (however small it may be). Until then, I'm going to prepare as though it isn't going to happen because that is the best evidence I have. Basically, I think my socialist brethren are deeply wrong; there is a better and more accurate pragmatic socialist prescription. I will protect my family from a world of psychopaths, and I will try to do so without being psychopathic towards the world. One can never fully achieve or partake of The Good, only the shadows of it. Accepting the reality of our shitty human nature's accuratizes our predictions and therefore appropriately tempers our expectations. This is pragmatic hope.

We cannot control the minds of others. We weep as they cause the destruction of everything around us. We will not be able to stop them. We cannot convince them. We are powerless. The only recourse is to brace for impact and to pick up the pieces. We must curl up into a defensive ball, keep our heads down, nurture hope, and be patient. Listen for the signal and react in the right way at the right time, and so on.

------------

<<footnotes "1" "Wage value is Variable Capital.">>

<<footnotes "2" "Rate of Surplus Value = Surplus_Value / Variable_Capital">>

<<footnotes "3" "I am still appalled by the use of the term //constant// here.">>

<<footnotes "4" "Although, peeling the other surplus expenditures apart from profit is not actually that simple. Roughly: Profit = Surplus_Value / (Wage_Value + Constant_Capital)">>

<<footnotes "5" "This accumulation of constant capital necessary for competitive advantage in the capitalist market is the beginning of economic crisis of Capitalism (which is separate, in a sense from the moral problem of enslavement). Roughly: Organic composition of capital = Constant_Capital / Variable_Capital">>

<<footnotes "6" "Human labor is living labor; dead labor is technology, machinery, tools, infrastructure, architecture, automation, etc. To be clear: only a fool would blame a machine for the evil committed by humans. Regulation of human use of technology is necessary (particularly to protect our most important freedoms), but regulation of human economies even moreso. Automation is not the devil. It all depends on how we use it. Do not buy into the Red Herring of blaming technology instead of  humankind. Doing so is as analogously foolish as the Broken Window Fallacy.">>

<<footnotes "7" "Let us pass over the excellent skeptics of moral philosophy, ontology, and epistemology for just a moment. It is clear that if they are correct, then nothing is intelligible, necessary, or meaningful. It is the last recourse of the Redpilled. Of course, unfortunately, the skeptics may be right. I grant my powerlessness before these arguments. But, it seems to be a two-edged sword. Even the Redpilled cannot be rationally practical if the skeptics are correct.">>

<<footnotes "8" "A reactionary opposes proletarian revolution. 'In modern capitalist society the bourgeoisie is appropriately viewed as the reactionary class, since it not only totally opposes proletarian revolution, and even almost all reforms, but also regularly tries to reverse earlier reforms. When the ruling bourgeoisie ever does finally agree to any significant new reform it is only because they have been forced to; and even then they virtually always have the secret intention of reversing what they view as a temporary concession to the people at a later time.'">>

<<footnotes "9" "This is not a defense of intuitionism (I don't have one). I'm taking it for granted that you agree to this move in the argument.">>

//The Machinations which give us h0p3 and in humility make us cringe.//<<ref "0">>

Freud, clearly a genius of some sort (whether, how, and why he is right or wrong isn't the point), merits my inspection. He was wrong about a lot of things (I assume, I'm sure, from what I've heard, etc.), but to strike the meme pool so profoundly likely means he struck something important (maybe not gold, but it is possible the toe of a giant). What was his angle? His perspective? What was the crystal he was after? He may have been wrong, but shoulders and giants (different giants). 

```
There is genius inside you. There is madness inside you. We love you. Do not limit the medium. Run with the horses beyond paradigms. Be free and happy my wild genius!
```
Gen//uis//<<ref "1">>

Yeah. We are mortals. We must oscillate. Maybe you are a 21st Century human calling it: bi-polar disorder or multiple personality disorder.<<ref "2">> Those wicked words. We cannot empathize. Judge thee! Condemn! Fight!<<ref "3">> It's hilarious to see how science itself verifies that we lack empathy for abnormal minds (which makes sense; we already know that we fear the unknown, other minds, difference; the unknown is very hard to empathize with). I hope to emerge from my internal battle as a unified, happy creature. That's the goal.

[[R]] thinks I need to decompress. She is right. That doesn't mean I'm right about how I will unwind or what I will become in unwinding (I can't see that far). Problematically, I don't know how to unwind myself. I am tightly bound. 

I accept the Utilitarian equation of my parents. The sacrifice was rational. Move on. It's time to free myself through integration. Admittedly, that sounds like doubletalk. Integration is binding in a coherent, designed fashion. But, this is perhaps just the problem with calling God "good." Adjectives are limits that "box" God in, and even the transcendental cannot escape itself.<<ref "4">>

I'm here to have faith in something (myself) and hopefully other things as well: to take up axioms. I think it is part of being an unmoved mover. The justified unjustified beliefs, objects, and beings (oh yeah, that sounds deep, man). I think Gödel and a mountain of Humanity's geniuses have peered at that deep contradiction. Why should I think I can answer what they couldn't? Maybe I should strive, but it won't be by throwing myself off that cliff.

Okay, let's start over. 

I do have a thread of genius in me. Straight up. Full stop. Period. etc. (do I detect contradiction?). It is a lopsided genius; it does not come out everywhere and for everything. It does not apply to so many aspects of my life. You might think I'm just a weak man with the surprisingly Zeus-like Arm for mental-masturbation. I think there's more to it than that though. I feel the liquid epistemic gold running through my veins. Sometimes, I am virtuous (not morally, but as a practice) by merely breathing and interacting as I normally do. That effortlessness for so many intricate tasks is not an accident. But, before I blow my arrogant-appearing load any further, I also think I'm deeply imbalanced. I have a hard time knowing when I'm being a genius and when I'm being a fool. It is a very wide range. It is our epistemic [[Plight]]. Maybe that is the part of the real bifurcation I've experienced. 

There is a sense in which we must not care about what others think (I don't know if this should count as a lack of empathy though). We should care about who they are, how they feel, how much they partake of The Good, etc. We have to strike the right balance between taking others people's reasons as our own and not. When, why and how: these standards infinitely regress (How do we know the right balance? Who says? Why should we agree and so on, and so forth). 

Now the obviously thing to do is to authenticate with and be guided by authority. It becomes clearer every day that I will not be able to find someone authoritative to wisely correct me on my path. I suppose autonomy is about being your own authority. When you realize all else fails, you can only rely upon yourself.<<ref "5">> Sometimes, and unfortunately on crucial bottlenecks, it can be hard to tell the difference between knowing what I know and feeling like I know. One can be trusted (because he knows) and the other cannot (he only feels like he knows). We all have this. It is the unsolved problematic offered to us by the ancient skeptics. It sucks to be your own counselor and guide; it's hard. 

Yes. This is yet another Gödellian Gateway. Again. =(

Maybe I just need to stop pursuing the Dao of Gödel. Is that hilariously, ironically, farcically, paradoxically: The Way?

What should we hope for? Pursuing the impossible is madness. But, somehow, the possible is merely a shadow of the impossible, and we accept that shadow only because it is has the likeness of the impossible. 

I can say this. I am still convinced there is a profound Transcendental Gödellian Mystery. I cannot comprehend it. It is always there at the edge of my mind's vision; it sits at the doorways I cannot enter; it may even be at the crossroads. I am finally open to the Academic possibility of True Contradictions (IIRC, the illustrious Graham Priest accepts them). Octavia Butler would laugh, cry, and hold me.

The only practical option is to take a deep breath and...confabulate (jk, I think this is reasonable): 

* "Everything is going to be okay." 
* "You should not feel responsible for accomplishing the impossible because it is impossible by definition"
** BUT!!! WAIT!!! YOU DON'T UNDERSTAND!!!!!
* "Nobody is perfect."
* "You are on a journey."
* "Do your best and have a good attitude."

Reframing doesn't make it go away. I cannot make that Cataclysmic Binding Spark of Paradox disappear from me.

Oh, I can see the many intelligent spiritual leaders in my life saying this is God. They really do love me. I know it. But, that doesn't make you right. You want to be right (and I want you to be right), but you have not seen far enough. I am still convinced that I have examined this Spark far beyond what you have. This isn't a judgment. I'm okay (and when I'm not, I'm trying to be okay) with your beliefs; they are justified; I do not blame you. I know you fear the relativistic schism (I do too), but it is the only tool we have here.

I'm not Maud'Dib, but maybe I am a lesser, not even a Count Fenring. I am sorry, but I still do not trust your judgment about what that Spark is, what it means, etc. It is clear that your prescription of how to deal with it does not work for me either (although, I grant it works for many people under specific circumstances). I cannot be integrated around it. 

Is it purgatory for me then? I don't know. Let us see what I can make of it.


----------------------

<<footnotes "0" "It's a fact that people who think about themselves more than others are going to appear narcissistic. It's crucial to distinguish between adaptive and maladaptive self-reflection. Adaptive for whom? Who is this 'I'? What counts as adaptive? Why should we agree that is the standard? I don't know. We enter the [[Normativity Portal]] yet again.">>

<<footnotes "1" "I made an Ogre Shadowknight of him. Silly badass.">>

<<footnotes "2" "Let's be clear. I am not a danger to myself or anyone else. I don't think I would be diagnosed this way (but I think we are sit on spectrums). I also don't think Psychology is even close to unlocking the mysteries of the human mind (it's a joke). We know it is important, but we don't know how much we can trust it. Have you seen the History of Psychology? Have you see how deeply and farcically wrong they are over and over? Why should I think modern scientists are in any better a position? Seriously, when half of the most important contemporary psychology experiments (those experiments which are used as evidence for theories of mind) can't be reproduced, you should guard yourself.">>

<<footnotes "3" "/play mortal-kombat.mp3">> 

<<footnotes "4" "This is not the claim that God exists. This is about understanding the concept of transcendentalism.">>

<<footnotes "5" "That doesn't mean I don't need support, help, or the knowledge of others.">>
For the record, I believe I am a socialist because I believe the working class should own and control the means of production. I support personal property rights and oppose private property rights. I believe capitalism inevitably leads to the enslavement of the masses (to varying degrees) through the theft of labor and systematic oppression of the working class. I believe capitalism endorses a human-eat-human world, fails to protect human dignity, and fails to cultivate mutual respect and empathy in human societies. I believe we are on a moral quest to find and implement a practical and working socialist system on a global scale. I believe we will fail because I think humans are overwhelmingly egoistic, but that doesn't mean we shouldn't try to save our world. I don't have cause for any practical hope outside of my theoretical hope. 

Just because I believe the description of human nature is overwhelmingly egoistic doesn't mean I'm not a socialist, and it doesn't mean my beliefs are inconsistent. This is the key that Andrew Collier (and several other social theorists) are missing, imho. Here is the nuance which OP's quote doesn't quite capture (ofc, it would be hard to do in just a few words):

Egoism can be used *descriptively* and it can be used *prescriptively*. Egoism as a prescription (Ethical Egoism) is the claim you *ought* to be fundamentally self-interested. Egoism as a description (Psychological Egoism) is the claim that our motivations can be reduced to self-interest. 

What does it mean to say our motivations can be reduced to self-interest? 

If the happiness of others is a necessary condition to my happiness, then pursuing the happiness of others is a necessary means to my happiness as an end. I can be self-interested in my final goal while recognizing that I can't achieve that goal unless I actually care about the happiness of others.

Now, you might be quick to claim there is a contradiction or logical inconsistency here. Egoism, in practice, appears self-defeating. If the interests of others is instrumental to my self-interest, then by being interested in something besides myself, I'm no longer self-interested, right? I'd like fire back: isn't it possible that someone can consciously recognize that they love others because they love themselves? 

Why do I love gravy on my mashed potatoes? Is it because I love gravy *tout court*? No. I love gravy because I love the taste, and I love the taste because my mind and body are structured so as to reward me with pleasure for eating that delicious gravy. I love gravy because I love pleasuring myself. I love pleasuring myself because I love myself, i.e. because I'm self-interested. I'm self-interested because my mind and body are often structured so as to reward me for being self-interested. Being interested in gravy is not necessarily inconsistent with my self-interest. Just as I can be interested in gravy in virtue of my self-interest, I can be interested in others in virtue of my self-interest. 

Of course, eating too much gravy is detrimental to my health and ultimately my long-term happiness. It isn't in my self-interest to eat as much gravy as I can. My interest in gravy isn't always consistent with my self-interest. Self-interest requires practicing self-restraint while indulging in gravy. 

Ah, but what happens when my self-interest isn't compatible with your interests? How do I resolve this conflict of interests? Do I weigh them? What principles should I use? 

Ethical egoism bifurcates here. 




Descriptive egoism might be seen as *ad hoc* in its reduction. It seems more like an application of Occam's Razor to me though. 



Say a magic genie could either snap his fingers and make a socialist utopia or leave the world as it is (let us pretend that the genie's lucky wisher understands the implications and possibility of a socialist utopia). Consider the difference between the two following questions:

* What *should* each of us choose? 
* What *would* each of us choose? 

On both ethical and psychological egoism, it seems very likely that the elite ruling class both *should* and *would* choose the status quo. After all, they maximize their personal utility by keeping the working class enslaved and oppressed. 

The working class answers in the other direction. On ethical egoism, the working class obviously benefits the most from choosing a socialist utopia. 


It seems like there's no difference between descriptive and prescriptive egoism so far. They both arrive at the same conclusion. Here's where the difference shows up:



Here's another way to think of it. Rawls' has the concept of a Veil of Ignorance. Pretend you were stripped of your morally arbitrary characteristics, that you didn't know what you life on Earth would be like, what kinds of principles of justice would you select




Clearly, most people on the planet will benefit from socialist policies. 


Psychological Egoism:








Importantly, the description of psychological egoism may even come in degrees. In conceptual analysis, there appears to be room in Psychological egoism for self-interest to come in degrees, that is egoism might possibly be show strong tendencies and high probabilities to be self-interest. There may still be room for us to evolve or change to be more altruistic. Even if 

Most importantly descriptive egoism doesn't have to claim altruism is impossible, just that it is unlikely.

Just because we "are" or "tend to be" a certain way doesn't mean we have to be. If "ought implies can," and if we ought not be egoist, that doesn't necessitate that we descriptively aren't egoists. 


I am a socialist, but I really do think humans have evolved to be fundamentally selfish in important respects. I think cooperation can be innate, but that this cooperation is rooted in an memetic and genetic evolutionary story about individual specimens selfishly electing to cooperate in order to survive and thrive in societies. 

Why can't I trust my emotions? I think I can't trust my emotions more than the average person. Let me be clear, parts of my emotions are incredibly talented. 

I do philosophy in an emotional way. I've spent a lot of time training the right mental reflexes. In a way, many of my talents have a strong emotional basis to them. It just "feels" right to me. When I follow that feeling, I am very often right. 

Because I fail to empathize with the minds of others so often, so fundamentally in some ways, I am unable to form strong airtight theories of their mind in profound ways. I am constantly shocked at who human beings, who my family, who my friends, and who I am. I am bad an understanding who we are in important ways. My emotions on behalf others' emotions are often not accurate.

And, in important ways, my emotions on behalf of future self are not accurate. My lack of empathy skills has profound consequences. That means I need to arm myself against my emotional ignorance. I know I can't totally trust my emotions, so I need the right tools and pathways to learn how to trust them again. It's why I am writing this wiki.



I'm not entirely sure what this means. It seem paradoxical. It seems to terminate itself as a program.
Naively, empathy is the act of "standing in someone else's shoes." I take the goal of empathy to be concerned with experiencing the complete phenomenologal perspective of another mind. It's about temporarily shedding our own perspective or [[reality map|Reality Map]] and attempting to see the world through the mind's eye of another. 

This is a deeply [[Kantian|Kantianism]] idea.

I take empathy to be part of engaging in the practice of intellectual and emotional charity.

We should be skeptical that perfect empathy is feasible or perhaps even possible in most if any cases. Nobody can truly shed their reality maps. We have to be reductive and inductive. We work with imperfect information. We are limited by time, space, and energy. We can't be ideally-ideally empathic, we can only be ideally-practically empathic. 


Empathy isn't about actually agreeing with someone, but it is about understanding their point of view (and that means temporarily agreeing with someone). Understanding someone's point of view means taking the time to hypothetically agree with them, to see the world from their perspective, to feel what they are feeling for the reasons they are feeling it. Empathy isn't even really about wrestling with the other's reality map or integrating it into your own; it's just being able to say, "hey, that rocks for you, and I'm happy for you" or "hey, that really sucks, I'm really sorry for you." It's about being moved to help each other given that person's reality map. 


Why altruism isn't real. Mirror-neurons fire, and we want the pain in our own heads to go away.

Being kicked in the balls, mirror-neurons fire. You feel their pain. You know what it is like. You have memories of it. It's why we feed hungry people. 



I see the elements of psychopathy and autism throughout our family tree. It's why we are all keenly aware of what real empathy feels like. Why we are so sensitive to it. Why we cry out against evil more loudly than others. Why we hate ourselves beyond reason. 



It's a fact that people do not have empathy for those with what are considered psychological disorders. Even people who understand those disorders, who have years of training in psychology, often fail to provide the same degree of empathy to those with atypical psychologies as they do for neurotypical. It's easy to see the pain of hunger or broken arm, but it is much harder to see psychic pain, particularly psychological pain one hasn't experienced or has little or not understanding of. It's hard to have a real theory of their minds. 


We have a tendency to otherise people we don't understand or agree with. They are different. They are a threat. However much we try to overcome this, however much we think we override our nature, we often fail. Vitally, I think that when we look at someone who violates our reality map, who does what we consider evil, we lose empathy for them. We no longer see them as human, as a person, as rational, as a being of dignity, as an end in themselves. We stop respecting them. They are an enemy of what we hold to be valuable, moral, and true. 


Self-control and delayed gratification boils down to identifying with your future yourself. it is seeing yourself as not just the being perceiving and existing right now, but also that being in the future. Identifying with, however, requires empathizing with. You can't say you are X unless you believe you have an understanding of what X is. Essentially, planning for out futures is a form of empathizing with our future selves. Empathy is the basis of our recognizing and acting as our persistent identity. This is why some psychopaths are well-known for having poor impulse control and executive functioning. 


--------------------------------

Rational Empathy is Wise.

My goal is to engage in tit-for-tat empathy. I'm willing to go first in many cases. This is game-theoretically the most rational method for generating trust. 

What's the difference between trust and empathy? Empathy is a kind of work (we are finite; it is impractical to be perfectly empathic). Trust is a willingness to take on risk. We need to be rational in how we extend trust. Being rational here, I suppose is deeply self-interested. It is in my self-interest to be empathic though. I have to be empathic in the right ways.

Unfortunately, being empathic is very difficult for someone with autism. 

Trust -> Amount of Effort -> Empathic Rewards

This formula doesn't function in a typical way for me. There are deep asymmetries in the empathy I provide toward the world. 

What does it mean to empathize with a psychopath? To take on their point of view, we lose empathy. People less empathic than us are more psychopathic than us. People more empathic than us are less psychopathic than us. How do we measure empathy? 

Is empathy a specific epistemic standard of having a theory of mind + firing our mirror neurons? 
Is empathy a certain kind of effort toward that?

Do we have an empathy limit each day? Are we only able to put out so much effort? (This line may vary). Are we "wasting" empathy on books, videos, fiction, or even true stories and narratives? But, aren't these enabling us to practice this empathy? Maybe it is an empathy muscle we must improve. 

I do exercise my empathy muscles, a lot. I've used them on the wrong things at times. I've not been wise in how I do my empathy weightlifting/training in some ways. 

We need practical and theoretical knowledge about the world to understand the consequences of actions. 
We need practical and theoretical knowledge about people in general to understand how the human mind works.

People who haven't received enough empathy tend to lack empathy for various reasons. People need empathy. I need empathy. How should I respond to not receiving empathy? What is the appropriate amount of empathy that I should receive? 

The problem is partly a divide. Having empathy for autistic people is hard, just as they find it hard to have empathy for neurotypical people. 

 It is very difficult to have a theory of my mind (I can barely make one for myself). 

What is owed to each of us? What is practically available to us? We could be morons and answer the prescriptive question with the description of the world (is-ought fallacy). But, now, we are set into how far each of us can imagine the world "could" be. Those who see far enough into the land of possibility-worlds will come up with very different prescriptions. 

Unfortunately, we can't just be simple as say: "be empathic." That isn't practical. That simple prescription lacks the details, depth, virtuous perception, etc. 


-----------------------

If one can completely explain the phenomena of choice, then we aren’t free. That’s basic incompatibilism. 

When we empathize deeply, where we try to understand someone else’s position, their background, and essentially why they do what we do, we often come to think that person is less responsible for their choices, and instead we think the person is a product of their environment. We should hope that environments can’t explain every aspect of the person’s choice because if there is a complete explanation, then choice is an illusion, and so is what we thought as the ability to be moral agents. 

There is a trade-off in empathy and accountability. The more you empathize, the less you can find someone responsible, and vice versa. I think these notions are in conflict. Empathy, essentially, is a device by which we seek to understand the explanation of the phenomena of choice. It is by putting ourselves in someone else’s shoes that we understand why a person does as they do, and we may become satisfied (perhaps unmerited, I don’t know) that this explanation is good enough to make someone less or not at all responsible via our incompatibilist intuition. 

The question is whether or not empathy reaches toward a complete explanation of why we do what we do. Maybe there is a gap between maximum empathy and the threshold of a complete explanation such that one can be maximally empathetic and still claim there is space in which the moral agent exists. It would be the space we cannot explain, and the space where we cannot empathize. It is the space where if we were in the the shoes of another, we think we really could do otherwise, with no environmental explanation.

I worry that gap doesn’t exist. 


----------------

How can I blame you for your lack of empathy toward me? In important ways, I can't. You aren't as smart I am (no offense). You haven't had a decate of philosophical training like I have. You've been busy with crucial practical problems for excellent theoretical reasons. You've had to take care of the world around you. Of course you will not have seen what I've seen or understand what I understand.

How can you possibly understand me? You can't. This is in part my fault. This is in part your fault, and this is in part no ones fault. 
We bootstrap ourselves into more accurate axioms over time. We eventually doubt the core, the bottom, the foundation. That which was axiomatic is no longer. This is what being redpilled (not the common parlance) is all about. There is a deep rationality to it. 
The [[Metamodern]] Virtuous Agent.
* [[2017.02.22 -- Existential Log]]
Here is the [[Family Log Template]]. Use and modify it wisely.

* [[2017.03.05 -- Family Log]]
* [[2017.03.12 -- Family Log]]
* [[2017.03.18 -- Family Log]]
* [[2017.03.26 -- Family Log]]
* [[2017.04.02 -- Family Log]]


```
* How has our health been this week?
** 1uxb0x
***
** j3d1h
***
** k0sh3k
***
** h0p3
***

* What happened last week? Have you been happy this past week? Why or why not?
** 1uxb0x
***
** j3d1h
***
** k0sh3k
***
** h0p3
***

* In what ways did we successfully empathize or fail to empathize with ourselves and others this week? 
** 1uxb0x
***
** j3d1h
***
** k0sh3k
***
** h0p3
***

* What will we do this week?
** 1uxb0x
***
** j3d1h
***
** k0sh3k
***
** h0p3
***
```
To be clear, there is a huge difference between merely open source software and FOSS. We should be supporting FOSS (and nothing less worthy). The question should be rephrased:

Why people should use (FOSS) free *and open source* software?

(1) The claim that "It doesn't cost anything" is not always true. I think anyone who has actually used a wide range of FOSS will tell you that while it is financially free, that doesn't mean there aren't costs involved in using it. Maybe you've heard the joke, "Linux is only free if your time has no value." Linux, of course, is only one example of FOSS, but the joke is a half-truth for FOSS in general. FOSS can be the wild west, and transitioning to it is sometimes not simple. Sometimes it takes valuable time and practice to implement and learn how to use FOSS, moreso, in some cases cases, than for proprietary counterparts. This barrier to entry varies though, and it isn't always a problem for FOSS. There are some kinds of software functions where the easiest to implement and use are FOSS. With that caveat in mind, I think the financial cost is also much lower than many people realize.

Yes, just from the get-go, FOSS is financially cheaper. Depending on your circumstances, you could save an incredible amount of money using FOSS instead of proprietary software. Using FOSS, it is perfectly reasonable that you could save $100-200 (or far more in some cases) on software per machine (OS, Office Suite, etc.). Upgrades are free as well. 

Free and open source software isn't just free, but in a many cases it can do the same job with much fewer resources. The software is often lightweight and computationally efficient. There is a reason the vast, vast majority of supercomputers and servers in the world run on FOSS foundations. That efficiency translates to everyday users as well. Instead of spending, say $500, for a machine designed for a specific task using proprietary software, you can often buy lower end hardware and get the same performance for $300-400 in some cases. 

In fact, FOSS can run so well on low end hardware, you might not even need to buy hardware at all. A number of FOSS ecosystems are designed to run on incredibly slow and/or old hardware. You can take machines that would be thrown away by other people and simply re-purpose them with FOSS. FOSS can be lightweight enough (depending on which pieces of software you choose) to breathe life into old machines that would otherwise go unused. You can't recycle or easily make use of donated machines with propietary software. FOSS can make it simple and cheap.

Lastly, FOSS pushes prices of propietary software down. It makes everything cheaper. Why would you pay $1,000-2,000 for a router with propietary firmware when you can use FOSS firmware that does the same thing with $50-100 hardware? A range of software products are cheaper because FOSS exists. In some cases, particularly newer computer markets, such as tablets and smart phones, FOSS warped the markets (favorably for consumers) from the beginning. Proprietary software has to be sold cheaper to compete. This is a good thing.


(2) FOSS is certainly a wonderful tool for education. First, FOSS often sees more use worldwide, with language compatibility baked right into many FOSS products on purpose. The target audience is everyone, not just those with money - and sharing the wonderful world computing with everyone is a primary goal of FOSS. Second, there are a wide range of FOSS products specifically designed for education, and the low or no cost for these products is a winning combination for students or schools on a budget. Third, learning to use FOSS can be useful occupational training (this isn't why one should be educated, but it is a reason to be educated). FOSS is often the industry standard for many production environments. There are certain industries where FOSS is the de fact standard - the best tool for the job. Becoming familiar with many FOSS products can make your life easier in those industries.

The Raspberry Pi is an examplar educational product of the FOSS community, imho. It is designed for compter literacy instruction, from basic computer science to programming and even automation/robotics. For some of us, it is a toy and a cheap way to do a fun project, but for some, it is an educational experience they couldn't have had otherwise. We are lucky to be part of that community.


(3-4) FOSS, not merely open source software, is adaptable. It is improvable. It is safer. It is something you can mold to your interests and needs. It is the work of many people freely sharing beautiful, useful, and interestings digital objects which make our lives better.

Importantly, I want to emphasize that FOSS is adaptable because it gives us the freedom to do so. As Stallman explains, the freedom supported and respected by FOSS is "the freedom to run it, to study and change it, and to redistribute copies with or without changes. This is a matter of freedom, not price, so think of “free speech,” not “free beer.” Let that sink in. The best reasons to use FOSS isn't because it is financially free, but because it concerned with respecting and promoting freedom.

FOSS is a moral issue, not simply a financial one (although, financial considerations are also moral ones). Adaptability is just another way of saying, "I can use it the way I want to use it." FOSS respects people as having the dignity and right to use their computers as they wish. 

Ultimately, FOSS is built upon principles of respect, sharing, and cooperation. FOSS is the product of whatever small bit of decency and moral virtue exists in human society. FOSS is ethical. Above all, that is the reason to use and support it. If you don't get it, then you really don't understand what FOSS is all about. 

Computer ethics is a difficult topic. These machines are special, and they enrich moral situations in complex ways. It isn't easy to understand: how things work, responsibility and causation, or the various effects computation has on the rest of our lives. Ethical computation requires having the right foundation, and FOSS hits the mark. It exists for the right reasons, and it is built and used in the right way. It makes moral life less complex (which is a good thing). Putting something as important as computation in the hands of instutitions who are simply interested in making money (and not much else) has some pretty terrible consequences which are, unfortunately, not so obvious to the ordinary person. 

Where possible, FOSS is the right choice.


Beliefs and the algorithms (stored as beliefs) for modifying beliefs are the basic epistemic building blocks to me. Our computers minds are at least partially reducible to that (although something beautiful emerges and supervenes). 
//See: [[Freewill]]//

A cornerstone question of my persistent identity has been: Am I free? 

This is the splinter in my mind. The apex, cosmic, fundamental existential problem rendered unto my naked self behind an autistic, human cage. I fear I cannot escape it.

Well? Am I free? Are we free? To what extent, degree, and of what kind? What does it mean to be free? 

I suspect that people who pass over this problem are fools. 

I want to understand freedom and agree to it. I want to know the how, what, where, why, when, and who of Freedom. I need to understand it. It is an obsession. It has taken me to a terrible place, and I can't unsee what I have seen. I have been reshaped by a pursuit of freedom, of the necessary conditions for love, empathy, and practical rationality. It rules my familial, religious, political, ethical, existential, epistemic, and technological views of the world. It is the centerpiece of my reality map. 

At that nexus, I am torn between two contradictory ideas, and everything is at stake. I'm being pulled apart. I'm experiencing reality map cataclysm with the problem of freedom at the epicenter. My reality map has been exploding and imploding, and I hope it gives birth to some cosmic liferaft I can hold onto. Like Neo and Agent Smith's real fundamental conflict over Freedom, the Matrix of my reality is being destroyed in an epic battle between different parts of my reality map (which just IS me).

I have studied this concept with knowledgeable people (on the shoulders of giants on the shoulders of cosmic world turtles, etc.). None of them can answer me. They all eventually point to faith. It is a question I must answer for and by myself. 

We are machines in a semi-deterministic world. We have to do what we do. We are slaves to something outside of us. I don't deserve to be enslaved. I don't want to be enslaved. I hate slavery. I don't know how I can live as a slave. 

Even if I wasn't a metaethical+metaphysical slave, I'm still one in practical, everyday life. Whether in a political, practical, moral, or metaethical sense, I feel enslaved. I think we are doomed. I think there is no meaning to this, or if there is, we are the sufferers.

I am enslaved by nurture, by nature, by my context and circumstances, by the concept of freedom itself, by bare and fundamental truth to some part of me. It is as if half of my reality map cries one thing, and the other cries the opposite. I am internally at war.

I must re-shape my personality to be stoic, to no longer care about what I can't control, but to give myself the illusion that there are actually things in my control. I have to lie to myself (and paradoxically, I hate lying, and I love myself) to make my life worth living. Maybe I shape my identity through time. But, even that shaper needs a shaper, ad infinitum. At some point, I can just assume some foundational shaper, but that is faith. 

I am very much against unjustified, unexplored, untested, blind faith. It has burned me too hard. I am skeptical because I know the real cost of having faith and being wrong about it. I am not free with respect to not having faith. It wasn't up to me. You can think of this as Pharoah hardening his heart (or God doing it), but that's the truth. As you have basically accepted: we are just reactions to our causes.

It was my purpose to be free and rational. I cannot have any of one without any of the other (Kant was right). Unfortunately, being free is not rational and being rational is not free. My purpose is neither rational nor free. I have no purpose.

I know I can't have certainty. I'm just looking for confidence, warrant, justification, sufficient reason to accept freedom. Epistemically, we might look at prudence as the answer here. It is pragmatic. But, it comes at the cost of truth. It is not-alethic. It is philosophical suicide. I am killing a part of myself to believe I am free.

Even if I have the faith of my metaethical+metaphysical freedom, I will still not be free. It is just the truth of it. Even if I can delude myself, to force myself through habituation to agree, I won't be actually free. It would still be a lie. Ah, but then I'm still not having faith? Lol. Fuck that.

Let's say we magically envisioned "true" faith here in freedom. I still would not be politically and socially free (there are number of varieties). 

I'm not free or I'm not free. I'm not free.
//See: [[Freedom]]//

"Doing the best you can with what you have" or "Doing your best" seems almost like a logical truth. It is obvious to me that when I go to analyze why this is true (why I'm in maximum empathy mode), I see why people have the reactions to their environments that they do. I see them as robots with no ability to do otherwise. I see us as no longer moral agents. 



I just wanted to point out, as a parent, that just because a child stops listening to me doesn't mean they are starting to become autonomous. They still might not be free, they may simply be conditioned, moved by, influenced by, enslaved by things besides their parents. A parent doesn't witness autonomy unfolding (that is our confabulation), they only witness their own loss of control over how the child thinks and "chooses."
As separate from the concept of [[Family]]

I think socialization is deeply invested in processes of approving and approval-seeking of different kinds and to various degrees. That I want to be accepted by you is not a bad thing. I think friendship is concerned with approving of each other in important ways.
* VPS and Dedi's can be had for very cheap (or even free). Seedbox providers which give root access can also provide absurd environments.
* Run a VM on someone else's computer, or run a phone, RPi, or cheap computer. Boom, instant server.
* HTPC/Router/Server/NAS combo
* Pirate
* Open source
* Chromebooks modded and reimaged
* Fire Tablets rooted and reimaged
* Building your own desktop
In those cases of fundamental disagreement, I assume we charitably think of each other as desperately wrong in brilliant ways. I take it to be the case that we both make good inferences based upon each of our [[foundational|Foundationalist Theory of Epistemic Justification]] assumptions, but that we have no further justifications or explanations we can give to convince the other of our epistemic starting positions. Inescapably, we all have private reasons or beliefs that by their very nature are prone to convince ourselves, but not others.<<ref "17">> 

<<footnotes "17" "Unfortunately, at the foundational level, complete resolution/agreement is the result of being convinced by someone who is merely pointing to some idea and saying, 'Hey, look at this, I'm convinced it's correct...' without any other further possible justification.">>
//Games I found addictively good, some more than others.//

Sublime:

* Pokemon
* Diablo 2
* Everquest
* Tribes 2
* Magic the Gathering
* World of Warcraft
* Tribes: Ascend
* League of Legends

Honorable Mentions:

* Rubik's Cube
* Minecraft
* Diablo 3
* Clicker Heroes
* Dungeons and Dragons
* Chess
* Cards Against Humanity

Mini-Games:

* N (sic)
* [[Hack, Slash, and Crawl]]
* Bloons (series)
* Gemcraft (series)
* The Company of Myself
* Sonny (series)
* Cursed Treasure (series)
* Desktop Tower Defense
* Kingdom Rush (series)
* Infectonator (series)
* Bubble Tanks (series)
* Continuity
* Lightbot (series)
* SHIFT (series)
Over the years, I have argued for the value of gaming. One recurring theme in my arguments is that games, especially MMORPG's, provide a digital playground and life-similar microcosm. There's work to be done, places, things to do, tools, objectives, economies, factions, guilds, social circles, groups, world-events, scripts, mechanics, metagaming, and so many other aspects which create little worlds for us to explore and interact with. We create narratives while we game, and these narratives can be of value to us IRL.

I have long found the Narrativist approach to gaming misguided. I was a pure Ludologist. But, I realize that ludology and narrative cannot be peeled apart. They are woven together. To be clear, I'm not talking about the pulpy storyline of the game itself (it does nothing for me, but that is fairly natural given my context). 

There is IRL value to be found in the digital personal narratives we generate inside the microcosms of games. It allows us to understand ourselves and others in weird ways. Game theory is all about the simplification. There is an unscientific kind of narrative to appreciate though. This is what I mean by useful digital personal narratives. We get to stand back as a 3rd party, as an outsider, as a partially detached agent controlling a character. This enables a special kind of dissociated feedback loop ripe for inspection and reflection.

We might ask ourselves something like: How does the way I play this game demonstrate who I really am? It is the thing which Westworld is talking about. It is the nature of Experience Machines, the Veils of Ignorance, and the Rings of Gyges that we come to know our authentic selves. Gaming microcosms are the existential mirrors we can gaze into.

So...let's do some analysis. I should walk through my games. I'll start with World of Warcraft:

I was the best rogue on two servers, and very respectable (from a ludological standpoint) on all classes. I was very wealthy; if it could be bought, I owned it. I botted my characters (so much fun) and gold, removing the grind, and spent my time thinking about the game and PvPing. I did not socialize in the way other people did (and even WoW players are generally considered to be poor socializers themselves IRL). I utterly failed to connect with most people. I was honestly world-class at the game, and I did it in unexpected ways. I had a very deep knowledge of its design, flaws, and the rich set of interactions in the game. I very rarely lost, and even the members of top guilds on my servers lost in combat to me, even though I had a quarter of the gear they had. I used to throw pure green items on my warlock and still destroy full raid gear players; sometimes I fought naked to show-off. I was a Gladiator. Seriously, I was amazing at the game.<<ref "1">>

I want to understand why I was amazing at the game, a game in which many people played 8-12 hours a day for years like a full-time job.

I'm a loner in games. I do not climb social ladders. I have very few (yet close) friends. I understand the world better

-----------------------

<<footnotes "1" "I think everyone thinks they are good at games. Let me be clear, I know when I am good and when I am not. I'm a plat-V League player, and I truly suck at that game. That was not the case with WoW.">>
I think it is crucial that I find a way to help my son become as happy as he can be given the circumstances he has. Right now, I'm helping him get on track. He's doing a good job. We've done well with what we have. I'm very proud of him. We still have a long way to go though. Maximizing our potential is hard, and we never give up on it. Getting him to do his work without needing to be told is hard, as it would be for any 9-year-old. We're pushing regimen as much as we can. We also keep moving the goalposts (encouragingly!). It is a climb for him. He's doing well. He's working hard. He's got a good attitude. He's doing his best.
* What do you want most in this world, and why?
* What do you fear most, and why?
* What or who do you love most, and why?
* What or who do you hate most, and why?
* Are you religious/spiritual, and to what extent does it influence your life?
* What's your purpose in life?
* If you are dictator of the world for a year, what changes would you make, and why?
* What do you like to read, watch, listen to?
* What do you create?
* [[Stationary Complete]]
Am I a different person when I wear glasses? What about when I wear different glasses? I do feel like I'm in different modes. Fundamentally, I'm not. But, there's a way in which the lens changes who I am, how I see, how subject and object interact. It feels like my interwebs handels.
Apps & Tools:

*Secure Shell


Automation:

*Remote Torrent Adder


Site Specific:

* Craig Buster - Craigslist Mass Autoreply
*feedly
*Hacker News Enhancement Suite
* Pandora Listener
* Reddit Enhancement Suite

Op Sec:

*HTTPS Everywhere
*Mailvelope
*Privacy Badger
*Stop Tracking Me on Reddit
*uBlock Origin
*uBlock Origin Web Socket



Usability and Appearance:

* Deluminate
*Lazarus: Form Recovery
* Stylish
* Lazarus
* Saga
* Who am I?
* Who do I want to be?
* How do I get there?
* Plant the seeds
* Cultivate them
* Rinse and repeat
//I dedicate this page to the following homo sapien philosophers, existentialists, and teachers of humanity: My Parents, Jesus Christ, St. Paul, Kant, Kierkegaard, Frankl, Plato, Aristotle, Hursthouse, Korsgaard, Frankfurt, Marx, Heidegger, Nietzsche, Dabrowski, and Laozi.<<ref "0">> I'd like to think I'm here because of them.//

//I think my mother would agree that I still keep coming back to play with my legos.//

Who was I?

Previously, [[gdoghomes]] and [[4eak]]. In this wiki, I am entering a new chapter of my life. Hence, my name change.

Who do I think I am and will be?<<ref "1">>

h0p3 is:

* the spouse of [[k0sh3k]], father of [[j3d1h]] and [[1uxb0x]]
* a pipefitter apprentice
* an analytic philosopher with an increasing appreciation for Continental and Eastern philosophy<<ref "2">>
* a grey hat computer zealot, freedom fighter, monkeywrencher, and guerilla librarian
* autistic, depressed, anxious, emotionally scarred, lonely, entangled in a volatile fight-or-flight response cycle toward the world
* a poor, broken man, and a box of contradictions, with few options and a bleak outlook
* a reality junkie, cynical skeptic, idealist, contemplative psychonaut, and introspectionist with a very sensitive moral compass
* lost in the desert, voraciously hungry for mythemal fruits from the Trees of Life and Knowledge, wrestling with himself and the transcendental<<ref "3">>
* seeking to be as excellent as practically possible, integrated, well-constituted, unified, empathic, authentic, knowledgeable, enlightened, justified, useful and productive, acceptable if not worthy, and happy
* finding himself; finding h0p3

At the very least, most of this is impolite to say about oneself. It comes off as arrogant, lacking in humility, deceptive virtue signalling, dark-triadic, or cryptically self-important. But, guess what? My life is important to me. I want it to mean something, even if it only means something to me. I might not be doing a good job of it, but I'm at least trying. I wandering, throwing off my dogmatic yokes, and doing my best to find the truth in the desert.

I believe most people would despise what I'm trying to do, what I aspire to be, what I think I'm engaging in, precisely because they are scared of it. I must move past their judgment. It's okay.

I want to know myself and my purpose. I will not take it lightly. I may never succeed, but I will not give up.

My goal is to become a [[eudaimonic lifehacker|Eudaimonic lifehacker]].

-----------------------------

Okay. Enough with the serious part. This page needs to be over the top about me, me, me, right? I'm going to bask in the Authentic Millennial<<ref "4">> Hipsterian Virtue Signaling Cringelight for a moment as I walk down nostalgia lane in defining myself. Let's see if I can spew this social media timeline thing right. Shibboleet:

* a/s/l = 30ish/m/MAGAkek
* Apparently, I shared an imaginary pseudo-friend named Jerry with my brother [[JRE]]; I forgot his name. Also, Heather was an evil bitch, but remember Jabba. Hope you are doing well Jeff and Caren.
* Charmander (because you aren't stupid)->Caterpie->Metapod->Butterfree->Abra->Kadabra->AllakaWin-the-game-with-a-single-Pokemon. Afterwards, my hand-raised full defense max-PP lvl100 Chansey vs your lottery-winning Army of Six MissingNo.-glitched and hacked lvl250-255 Mewtwos.
* Favorites of each D2 class: Hammerdin (with a hint of smite hybrid; dat CB), Enigma WW Kicker/Trapsin Hybrid, Javazon, Fishymancer (with a hint of PB hybrid, /yawn-till-you-win), Static-Orb Sorc somehow, my Classic duped (except the +2 Dual leech ammy we found in a Chaos run!) max STR (nobody saw it coming: IM was instant death) Lance-barb, and as usual: fuck druids
* Since this is a chronology of joy: I learned to touch my penis. What a day, what a day.
* I learned to cherish my Monsters (my computers), my first loves, my second wives, an autist's old friends. l0phtcrack, neworder, astalavista, angelfire, and altavista were just wonderful places for me. Napster, Scour Exchange, Gnutella, and Bittorrent, you opened the world for me. The Matrix is still my favorite movie, and RATM and Rachmaninoff started me on a musical journey.
* Evercrack -- Uberr Gooberr: Fungi, CoF, TS, etc. until I saw the sheer virtue in Psykotic the Iksar Necromancer of the Tribunal Server: Pre-nerf CoS, Z-heart, etc. I miss Vannja Mahn to this day. TRAAAAIIIINNNNN TO ZONE (or Druid)!
* WoW, and Glider, my friend. Wall-of-Text's summarized Vanilla suggestion against Shadowpriests: 1.) Sap/CS into 5 points; 2.) Sap/EA/restealth/Open; 3.) Premed-CS-CB-Eviscerate; 4.) Prevent kiting/healing and respond to fears quickly. /salute, Psykotic the Gladiator and my 19 UD Priest Twink, the best flagrunner I've ever played in any game (OP turtling trollsalt of hopelessness, "QQ moar"). I miss you Zombienoir; I hope you are still alive.
* I remember Roguespot, Hypercynic, and The Source (I'll miss you Nyles) fondly. They were interesting lifetools. I lost myself in those portals and emerged as someone different. Of course, [[> oldfag|https://www.youtube.com/watch?v=dQw4w9WgXcQ]] until years later Reddit became worthy. I'm lucky to live in such a fascinating world.
* Som Tam is amazing,  /salute to the origins of Tor, i2p, BTC, RSS, the Chrome Botnet, etc., Graduate School was transformative (I'll miss you Graham), and LSD is a helluva drug. 
* If I were a character on Game of Thrones, i.e. if I were to identify with or as a character on GoT, I think I would be a mix between Tyrion "The Imp" Lannister, Samwell Tarly, Sandor "The Hound" Clegane, Lord Varys, and Maester Aemon Targaryen. Also MFK: Ygritte or Brienne of Tarth, Lady Melisandre (the only physical 10/10 human specimen I have ever seen in my entire life, and it is only during her character on GoT so, that says something!), and just one isn't enough, so: Septa Unella, Joffrey, and Little Finger crafted into a Humancentipede in that order.
* Don't miss my [[Television Show Collection]]. I need to write a book collection.
* I'm...like...Korean Wood V in League, and Riven is very sexy cancer (+Morgana for rule34 rito please).

Countless things, events, people, and memories in between. I look back, and part of me is happy with it. I feel so lucky to have had these opportunities.


-----------------------------

<<footnotes "0" "Exactly who and what counts as Jesus and Laozi are serious issues. Regardless of their identities and authorship, I've learned from them.">>
<<footnotes "1" "Since I must identity with my persistent identity through time.">>
<<footnotes "2" "If I were less ignorant, and had less of an //Orientialist// handle on the landscape, I would use a more appropriate term.">>
<<footnotes "3" "Although, I'm still not convinced God exists. From the epistemic standard of certainty, I'm an agnostic; from the standard of confidence and justified belief, I am an atheist. I still take myself to be wrestling with the timeless questions that everyone does, call it God if you want. I think God is a tainted word with the wrong connotations and denotations (except in very select circles) for what I'm after though. No word is going to describe it well.">>
<<footnotes "4" "The 'M' word, but I have corrupted its pronunciation and therefore it's okay when I use it. 'Millenial' is word which also shares a semantic bifurcation between the 'uh'  and 'er' expressions. Only we are allowed to use that word.">>
* [[2017.03.24 -- h0p3's Log]]
* [[2017.03.26 -- h0p3's Log]]
* [[2017.03.28 -- h0p3's Log]]
* [[2017.04.01 -- h0p3's Log]]
* [[2017.04.02 -- h0p3's Log]]
You can find this game on [[Kongregate|http://www.kongregate.com/games/Void/hack-slash-crawl]]. It's a very simple RPG-style hack'n'slash dungeon-crawl overt-skinnerbox game. From just a few kinds of choices, a neat (although still compact) complexity and metagame arises. It gives you immediate pain and pleasure rewards that keep you interested and coming for more. There are clear winners and losers. You can test your way through all the possibilities. It is a metagamer's mini-game. This is a guide on how to play it perfectly:

Starting Out:

* Name: //Nom du jour//
* Role (fundamental metagame class):
** You are a scaling draintank who evolves into a Maximum Mobility Indestructible One-Shotting Machine. Few class combinations can actually escape the early game. This is the best at it, and it scales up the best. Technically, there are other, less efficient options. At an extremely theoretical level, there may be a better option than I've pointed out, but it is not obvious it exists (I talk about it towards the end of this article).
* Class: Vampire Reaper
** Vampire's lifeleech is a unique effect in the game. It costs you nothing other than swinging a sword (which just so happens to be the best form of offense). It's free, scaling survivability. Its profound scaling with physical melee damage cannot be replaced (note that +elemental skill damage on weapons isn't affected by lifeleech, although I believe Cursed is). It allows you to heal yourself permanently when you start getting enough damage. For the most part, spell-based healing becomes almost useless very quickly in the game. This is an extremely consistent source of healing at every stage of the game, and it costs you nothing except the opportunity cost of the other options. Also, it has a direct scaling synergy with Critical Strike. Your offense becomes your deepest source of defense. This is what allows you to be a scaling draintank. Only at the End game does it become irrelevant.
*** Werewolf could be quite effective in the End Game when you attempt to become a zone-wide-pull invincible tank relying upon Stamina-based life regen. I've never gotten a werewolf that far since I find vampire to be so effective.
*** Golem may theoretically be the best choice for a bot playing this game into eternity, but I have no proof of that.
** Reaper grants you innate Critical Strike skill. Spam that "1" key on your keyboard! It's the strongest damage multiplier in the game. Its profound scaling with your damage initially enables you to take out packs very quickly, giving you a high clear speed without a ton of risk. In the early and mid game, you ask yourself: Do I have mana? You can take a pack down no problem. Don't have mana? You need to be cautious (particularly in the early game). This skill allows you to become a One-Shotting monster earlier than you would just off Strength. It compresses that window of tanking to One-Shotting and allows you to grind so efficiently that you leap out of the Mid Game to Late Game faster and more consistently than any other option. This should not be downplayed. The best form of crowd control in this game is just killing stuff, period. You tank'n'spank to win, yes, but it is more of a spank'n'spank to win.<<ref "1">>
*** Technically, you can find items with Critical Strike. However, the guarantee of Reaper enables you to make better gear choices in the early and mid game (the hardest part). 
*** Cursed is the only other possible contender. Frankly, not having Critical Strike really sucks. The ability to rely upon Critical Strike from Reaper at all stages of the game allows you to be flexible with your gear and stat investment strategy while maintaining the ability to One-Shot. I consider Cursed to only theoretically be a better option when you are thousands of Floor levels into the game trying to break it in half (playing naked).
* Bonus 1: Marathoner, +10% run speed 
** Earned by travelling at least 10000 distance.
** There are no runspeed items in the game. This is a buff you can't acquire anywhere else. Cutting the travel time is huge. It's a raw increase to your Game-Progress-Per-Minute that scales up to a 10% increase or so.
* Bonus 2: Bonemaster, 20% Chance any skeleton that sees you will temporarily be charmed
** Earned by killing at least 50 skeletons.
** This is an absurdly powerful unique Bonus. Free Charms are hilarious and at times something you need to manage. It does impede your mana regen at times though (so not actually free) and makes you slow down your crawl. Crowd control is incredibly powerful at times (and other times useless; wide range on it). It's a kind of get out of death free card on certain pulls, and other times in the early game (the hardest part, arguably) it helps trivialize certain encounters. Stats from Bonuses and items just don't matter past Floor level 8ish. This ability scales. That said, it eventually becomes useless.
** If you feel confident, and assuming they stack (I have no idea how best to test this besides a literal frame-by-frame analysis which I'm not going to do), you can go for the +5% Run speed Bonus instead. Mid and late game, Charm is a useless skill (but fun in the End Game), and you stop seeing undead mobs anyways. Basically, this second slot doesn't really matter too much. I'd go with the easier Early Game if I were you. Min/Max purists should go for the run speed though.

General Axioms, Mechanics, and Strategies:

* Your Character Level scales up exponentially against the dungeon Floor Level. Stats start snowballing very hard after you begin the mid game. This is why it is so useful to kill everything, even in the late and end game. Kill everything, always. In the early game, you simply need the stats and higher drop rate necessary to develop basic resistances. Eventually, you're trying to complete a set of perfect resist gear, but invested stats always matter. You need to outscale the content to min/max, and that only be accomplished by squeezing every drop of experience (and gear, to a lesser extent) out of each Floor Level.
* With enough resistances, you will basically only have to worry about physical damage. Keep stacking Armor and Stamina, and eventually you won't care about physical damage either.
** In the early game, maximize Ice, then Fire, and then Electric resists. Ignore Poison entirely. Eventually, Ice and Fire will be all that matters. At some point in the end game, you don't even really care about resistances so much. Your stamina will be so high that you can technically tank packs naked (not for long; it's very unsafe even in the End Game).
** Ice is the first and most important resistance since the Ice Chargers are very dangerous, completely unkitable, and make splitting camps risky. Fire is next most important. Get Ice and Fire to 100 resist (beyond that has no effect). You can do just fine with Electric at 50ish, but eventually you drop it entirely (like Poison). 
* Invest +3 Strength and +1 Stamina every level until you have enough Strength to One-Shot everything. Afterwards, invest in a more balanced fashion in Strength and Stamina to maximize your survivability while still maintaining One-Shot power (Fishing and Charging are the only real complications, unless you don't mind spamming Critical Strike for every swing).
* Save your gear. You should be evaluating the best balance of stats. You will switch gear out from your banked items. Saving a full set of each resist-type gear is worthwhile. 
** What else are you going to do with your inventory space anyways?
** At the End Game, you'll only keep Fire and Ice Resist gear.
* Maximize white/physical/melee damage by maximizing base weapon damage. Ignore elemental damage on weapons. 
* After the beginning stages of the Early Game, abilities outside of Critical Strike, Charge, and Wild Charge are irrelevant until you hit the End Game, where you build whatever you want to build for aesthetic reasons. Value Resists and AC on your non-weapons until your level-based stats are the fundamental reason for your brokenness. 

Game Stages:

* Early Game
** Pull carefully, kite when necessary, and make sure you heal up before major encounters. By Floor level 6ish, you should start to slow down and be careful. Life doesn't become EZ-mode until around Floor level 15 (assuming you've had decent drops).
** Remember that you can't kite/escape from chargers. Kill them first. Be extra cautious on your pulls when you start seeing them. 
** Prioritize targets that deal the most damage, which is generally whatever your weakest resist stat is at the time.
** Electric Resist still matters here.

* Mid Game
** Starts around Floor Level 15.  Here is where the game becomes trivialized. You are perfectly safe playing even half asleep. Progress beyond here is due to your min/max interests and how you construct the value of gaming for yourself.
** You start leveling insanely hard and profoundly outscaling the content. You should be quite strong. You start by 3-shotting and tanking all day. You don't have be terribly careful when you pulling. Spam your Critical Strike. You will begin to one-shot with Critical strike very quickly. Ride that gravy train.
** You stop seeing skeletons, and your passive Bonus becomes useless.

* Late Game
** You get to a point where you weapon damage and Strength are high enough that you can One-Shot without Critical Strike, but you're still likely grinding Strength up. Here you need to eventually switch to having Charge, even if it costs you some white damage or perhaps defensive stats if you are not risk-averse (you may need to Crit strike, it depends on your Strength investment). Your mana regen should naturally be broken at this point.  In many cases, Charge with Crit is a faster clearing speed than One-Shot without both Crit and and Charge. You need to get lucky on item rolls too for a while.
*** One of the core itemization problems is that you really want Charge, often on your weapon, so that you can maximize your stats on your other gear without giving up a slot for Charge. But, you also fundamentally want the highest white damage you can find.
*** Remember to start investing in a balanced way between Strength and Stamina. With Charge on a non-weapon slot, you can use the highest damage weapons you find, and this means you can dump everything into Stamina.
** Armor is one of the few ways to maximize your survivability. It scales on items unlike resists, and that's because mob physical damage is the only major scaling offensive component of enemies at this stage. You will spend a lot of time hunting for gear with the right AC and Resists.
** Electric Resists stop mattering here (it may have stopped mattering in the Mid Game for you); it becomes much easier to just go Charge on an armor slot and take max white damage on your weapon at this point.
** You'll be able to safely multi-pull and tightly pool them together to make it easy.
** You should see that casters do no damage (may have started in the Mid Game as well), although you'll take non-scaling electric damage from the "Eye" mobs.

* End Game
** You get to a point where you can out-regen the unmitigated damage you are taking. Survivability scaling at that point is about how many simultaneous unmitigated mobs you can tank while maintaining max health.  It's just melee and possibly some Electric (depending on where your resists are at and how far in the End Game you are).
** End Game goal: to pull the entire zone and outregen their damage. Pure and total invincibility. 
*** In Practice, only so many mobs can surround you and hit you at once. Technically, you need to maximally surround yourself with physical damage dealers and outregen that. That's the maximize possible damage you can take at this stage of the game.
** Eventually you can basically pull most of a zone at once. Be careful though. This is unsafe and unnecessary when you first start the End game (you don't want to be surprised).
** Loot all weapons, even the white commons. You'll only want to loot Green (uncommon) and Blue (rare) non-weapon items though. You are looking for max damage on weapons, but you are seeking a very specific mix of stats on your other gear that require green/blue.
** The End Game Question is: What functional gains are available to me? There are several mechanical boundaries that I probably can't know without seeing the game's code.
*** Is there Charge + Resist gear? I've never seen it. 
*** What are the limits of AC's utility? Eventually, your itemization boils down to maximizing this stat and your weapon damage.
*** How do you maximize defense? Permatanking a zone seems to be it.
*** How do you maximize offense? One-Shot without Crit using a Fish, maintaining Charge on another item slot.
*** Is there a stat-gear point where clearing the level is irrelevant? Do mobs fail to scale beyond a certain point? Their HP scales, but it is unclear to me how their physical damage scales. I need to see the equations.
** Once you Achieve 200-250 Stamina, you can permanently tank multiple mobs (depending on their types and your gear). You need to push very hard in Stamina to be able to tank a zone though. At around 750 Stamina, I found it very difficult to find any zones which I couldn't permatank.
** Make sure you can One-Shot without Critical Strike to preserve economy of motion.
** Late and End Game Itemization is difficult. You are sifting through tons of gear, a large portion of which is newbie gear, trying to find even remotely viable pieces.
** As you noticed long ago, casting, for you, is irrelevant. It's for fun. It just doesn't scale like physical damage. It's about them style points.
** You'll find mob HP bars fill the entire screen. It annoyingly looks like your video card is tearing your screen when you kill them.
** Looting becomes a chore, especially since it gets in the way of targeting mobs.
** You become happy with the increasing aggro radius because your life just gets easier when they come to you.
** You get to a point where Fire Resist is not necessary for survival. It's mitigation qualities still maximize your survival for most packs though. Hence, you should still use it. What else are you going to do with those item slots?
** Fishing
*** Itemization is odd in this game. Drop rates do not make sense. My intuition feels like there is something odd in the programming here in multiple ways. e.g. I cleared 90 dungeon levels (char lvl 354) before I saw a single +50 fire resist ring, and that was only after shuffling my items around. I worry that item drops are literally based upon the items you are wearing. 
*** Maybe there is one perfect set of gear (instead of multiples, but this seems very unobvious to me). Technically, using the Fish might be the best way to find it.
*** It's a pain in the ass to raise your Strength high enough that you can One-Shot with a Fish-weapon without Critical Strike
** You will be grinding for perfect gear. In general, there is one exception, a single armor piece (Boots are often best) should be AC + Charge (although, at certain points in the game, Charge will be on your Weapon). Basically, you want to One-Shot without Critical Strike, with Charge, with 100 to both Fire and Ice resists, while maximizing your AC. You keep multiple sets of gear to make sure you can shuffle to maximize that AC.
*** Weapon: max white damage, charge is amazing; if you have charge elsewhere, and if you have the Strength, then go for a max-damage Fish. 
*** Head: AC, Fire or Ice Resist, and Spell (spells aren't generally useful; it's just style points)
*** Chest: AC, Fire or Ice Resist, and Spell  
*** Boots: AC, Fire or Ice Resist, and Spell 
*** Ring 1: Fire or Ice Resist, and Spell 
*** Ring 2: Fire or Ice Resist, and Spell 
** Style points
*** Beautiful gear
*** All the skills! Pet skelly is useless, but silly fun.

* Prestige -- Hyper-End Game (theoretical)
** Anyone who has read this far and played through to where I've been would realize I'm insane. I took this game to the max. I love the punishment of the grind, the skinnerbox addiction. There is a place I dare not go because I'm not sure if it exists in this game (effort-wise, it would be cheaper to reverse engineer the game and do the math to figure out if this is even possible than to actually attempt to practice it). I have two theoretical Hyper-End Game points.
** Theoretically, you may be able to get enough Stamina that you can permatank naked. At Floor 100, I could permatank with 100 to Fire and Ice resist, but I couldn't permatank at 50 to Fire and Ice resists (although, I could safely tank with vampire). Perhaps with enough investment you could get there. Technically, Golem Cursed at 40 innate resists or possibly Werewolf Cursed (depends on how regen scales at this stage of the game) could hit this point much earlier than others. 
** Theoretically, it may be possible to be a Hyper-End Game spellcaster! With Charge + ~AoE spellcasting, you could improve your clear speed considerably. Assuming one could ride their hyper-scaling white damage far enough (could be millions of levels for all I know), and assuming that intelligence could eventually scale up to One-Shot (that is not obvious at all, and if it did, it would be a monumental up-hill stat climb to scale up that hard), then investing hard in Intelligence while being invincible would allow you Charge->Instant-Wave-Clear from room to room. This is the fastest you could clear levels. At some point, perhaps after billions of levels, the theoretical Hyper-End Game spellcaster (perhaps the ultimate final form of the Vampire Reaper class) would push hardest and fastest into the presumed infinitude of levels of this game. The Reaper could allow Strength to be much lower and push Intelligence very hard and much earlier than others classes.
** Hence, my theory is that the absolute best Hyper-End Game nearly naked character (need a weapon for ~AoE damage and an item with Charge on it, preferably a Chest with max AC) is a Golem Cursed with ~+15% Bonus runspeed who Charges and  One-Shot ~AoEs (and One-Shot melee, of course). It is likely the case that only a sped up version of the game could achieve that in our lifetime. A bot, nonetheless, is the only thing which could achieve this.
** I'd like to point out how absurdly long these theories would take to accomplish in practice. 

* My Longest Game:
** Character Level: 425
** Floor Level: 100
** 17180 HP, 868 Stamina
** 1168 AC
** Full set of max (for my zone level) AC + Charge gear for all slots
** Full sets of max (for my zone level) AC + Resists for Fire and Ice with Skills
** 400 damage Fish, 850 damage standard weapon
** 82,087,300 Pearls

-----------------------------

<<footnotes "1" "Theoretically, you could eventually find itemization which made it so you had the perfect gear that just so happened to include Critical Strike. At that point, there are technically better options. In practice, however, you just want to wear the highest damage weapon you can find at all times.">>
Wikipedia says:

<<<
Happiness is a mental or emotional state of well-being defined by positive or pleasant emotions ranging from contentment to intense joy.[1] Happy mental states may also reflect judgements by a person about their overall well-being.[2] A variety of biological, psychological, economic, religious and philosophical approaches have striven to define happiness and identify its sources. Various research groups, including positive psychology and happiness economics are employing the scientific method to research questions about what "happiness" is, and how it might be attained.
<<<

That's a good starting place, but it lacks substance. It's really hard to define because happiness has subjective components to it. It makes sense why it is hard to give a universalized, objective account of this concept. Perhaps happiness boils down to experiencing what we want and need, or perhaps it is what we would want or need assuming we were in an epistemically ideal position to decide. Perhaps it is something else entirely. We may never actually know, but we all act on the assumption that we do know to some extent (else we couldn't act). 

Importantly, each of us spends time figuring out what we think happiness is (some more than others, some more consciously than others, etc.), giving substance to the concept. It is our pragmatic plight as humans that we put our tent-pegs down (and sometimes move them) on a usable definition of happiness. Humans innately come with genetically-founded categories in their minds to interpret the worlds around them (hence why empiricism is not a complete description of our knowledge), and some initial concept of happiness is no exception. 

I believe at least part of our concept of happiness is a construct in the algorithm that comprises the rewards center of our brains. Of course, there are other emotional and intellectual components to how we define and employ the concept of happiness. 

A pragmatic, intuitive definition of happiness is embedded in the faster-acting part of our minds. Our Kantian, deontic, and also virtue-theoretic reasons, beliefs, and inferences are part of that gutteral, intuitive, emotional parts of our brains. Unfortunately, it is the source of confabulation, but we cannot escape using this tool. As a practical matter, we simply must rely upon those judgments and decisions which occur in the blink of an eye. It is our goal to train our intuition, to shape it, to habituate it in the right direction. Some people have extremely accurate "gut feelings" because they reliably trained themselves. Similarly, our faster-acting 

Our slower-acting, more deliberate frontal lobes also give shape to how we understand happiness. This is where we engage in 


While I've studied the concept of happiness for a while now, I don't claim to have the answer. I can only give you my best approximation and set of concerns for it. I am hopelessly unable to transfer my body of thoughts on this topic to you. Here's a distilled, stilted, and oversimplified set of my thoughts on the concept of happiness:

Happiness is likely some form of classic //eudiamonia// theoretically definable in terms of utility. Happiness is not some nicely monolithic or easily measured kind of flourishing or well-being, but whatever the standard may be, there are objective measurements to it. I'm forced to ask certain initial questions:

* What does it mean to flourish as a human being? 
* Are there different kinds of human flourishing, just as there are different kinds of humans? 
* Pleasure is (or at least can be) a part of happiness, but what are the other parts?
* What parts are necessary for my flourishing, and what configurations of parts are sufficient for my flourishing?
* How do I know which instances of flourishing are better than others?


I see my flourishing as including basic necessities, but also a great deal of moral luck (technical term).
```
#!/bin/bash

# Headless Lubuntu Server
sudo apt-get install --no-install-recommends lubuntu-desktop -y
sudo apt-get install xserver-xorg-video-dummy -y

# Write the bogus config file
sudo cat <<EOT >> /usr/share/X11/xorg.conf.d/xorg.conf
Section "Device"
    Identifier  "Configured Video Device"
    Driver      "dummy"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
    HorizSync 31.5-48.5
    VertRefresh 50-70
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
    DefaultDepth 24
    SubSection "Display"
    Depth 24
    Modes "1024x800"
    EndSubSection
EndSection
EOT
```

//1.1 x 10^^77^^ key combinations and quantum computing only cuts this in half. Let's pray it isn't naturally weakened by the National Security Adversary.//

I literally wrote and compiled a book, <a href='h-book.7z'>Highdeas</a>, for a year or so. I think parts of it are excellent, and I think parts of it are terrible. I'm still thinking about what I will do with it. It is the direct predecessor to this wiki-journal. A lot of what I loved about writing while high was that I took having conversations with myself seriously. I was forced to empathize with myself. It was good for me, and it helped me find the will to overcome my existential crisis. Drugs aren't for everyone, but I'm convinced they saved my life multiple times.

In it, I've compiled trip-art, recorded conversations with myself, and engaged in some letter writing with family and friends. The goal was to write the book entirely while high. I had unique sections of writing while on different substances. There were two sections devoted to writing while sober, one a place where sober-me could have conversations with high-me, and the other was simply a place for sober-me to have a voice in the book. Much of it is silly, some of it is incredibly serious, and there were some interesting construction ideas used to make it. Ultimately, this wiki fulfills the functions I was trying to build into the construction of the book in a much better fashion. Hence, I've stopped writing the book. I leave it here only for posterity's sake.

You should also check out the [[Psychedelic Video Collection]] I compiled during that time period as well. 

iVBORw0KGgoAAAANSUhEUgAABDMAAADOCAYAAAAjdElvAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QMMFyACfllXlAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAACAASURBVHja7N1pcFvndTfwP/Z9B0hsJMF9ExeJ1L7bkpx4Uxwndhw7aaZTpx/SNpO2H9pkptN8SGeSTKczTcZt4iaxndWx40a2YqWSLMmSrCikKJHiKu4kCIIgQYDYt3uB94Pm3pcUSUmUKImUzm8mEw8FXIAPLnGfe57znCPI5XI5EEIIIYQQQgghhKwTQhoCQgghhBBCCCGErCcUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6IqYhIA+Lzs5OHD16FACwe/du7Nq1iwaFEEIIIY+0UCiEP/zhDxgbGwMA/PM//zMNCiHkoSDI5XI5Ggayni/Qr732Gn72s59hYGCA//l3vvMdfPOb36QBIoQQQsgj6fz58/jBD36A3/72twt+TlN/QsjDgjIzyLr12muv4V/+5V8wOzvL/6y5uRkGgwFFRUU0QIQQQgh55IyPj+PVV1/F8ePH+Z8ZjUY0NTXR4BBCHioUzCDr0l//9V/jxz/+MX+B/od/+Ae88sorKCwspMEhhBBCyCOps7MT+/fv5xd6Dh48iL/7u7/D008/TYNDCHnoUDCDrDvzAxmvvvoqvv/970On09HAEEIIIeSRNT+QYTQaceTIEaofRgh5qFHNDLKu/Nu//Ru+9a1vAQB++MMf4mtf+xoNCiGEEEIeaaFQCKWlpZidnUVzczN+97vfUbYqIeShR8EMsm6Mj4/ztTBeffVVPjuDEEIIIeRR9tWvfhWvv/46jEYjzpw5g7q6OhoUQshDj4IZZN1dqEtLSzE4OEgDQgghhJBH3vzFnl/84hd4+eWXaVAIIY8EIQ0BWQ9CoRBef/11AMC3v/1tGhBCCCGEEFzfdgsApaWlFMgghDxSKJhB1oWjR48CuN65hC7UhBBCCCHX/f73vwcAfOMb36DBIIQ8UiiYQdaFI0eOAACef/55GgxCCCGEEFzvYDIwMAAAeOaZZ2hACCGPFApmkHVhbm4OAOByuWgwCCGEEEJwfRsuh7qXEEIeNRTMIIQQQgghhBBCyLpCwQxCCCGEEEIIIYSsKxTMIIQQQgghhBBCyLpCwQxCCCGEEEIIIYSsK2IaAkKWl8vlkEwmEYlEEI/HEY/HwbIsFAoFNBoNlEol5HI5JBLJoueyLIvp6Wn09fVhbGwMRqMRDQ0NyM/Ph1wuv+v3lkql0Nraira2NuRyOWzZsgUbN26EQqGgD26NSiQSCIfDyGQyUKvV0Ov1K3p+OBzGu+++C5/PB51Oh8997nPIy8tDKpVCT08PBgYGMDU1hX379qGgoAAGg4EGnRBCyKpgWRahUAipVAoMwyz5GIFAAIlEApVKBbVaTYNGVv3cy+Vy0Ol0kMlkEIvpVvZemJycRG9vL7q7u6HX61FdXY2amhqoVCoKZhCyXr40U6kUotEopqen4fV6MTs7i9nZWTAMA6PRiPz8fBiNRphMJhgMBigUCkgkEgiF1xOeGIbB5OQkPvroI5w6dQqVlZXQ6XTQarWrEsxIJpP45JNP8KMf/Qgsy+LrX/86KisrKZixhgWDQfT39yMUCqGkpOSOghlvvPEG2traUFJSgr179yIvLw/JZBKXL1/G+++/j8uXL0Ov10OtVq/pYEYul0Mmk0E2m0Uul4NMJuP/dgghhKw9DMNgdHQUMzMziMViywYzFAoFzGYzrFYrpFIpFAoF5HI5xGIxBAIBDSS5q3OPZVnU1NTAYrFQMOMe8Xq9OHXqFN5++20UFxfjc5/7HIqKivhgBsuyyGQyYBgGSqXygc7f6AwgZIlAht/vR3t7O86cOYOWlhYEAgF+JYJlWUgkEkgkEmg0GhQUFGD79u3Ys2cPSktLodPp7sv7FAqFsFgsqKmpQTabhdlspi/1Na6npwc/+9nP0N/fjxdeeAF1dXUrer5EIkFpaSlYloXNZoNMJlu3Y5HJZDA8PIzZ2VlkMhk0NTVBo9HQSUIIIWtUNBrF+++/j5aWFoyOji4bzBAKhRCLxdBqtairq8O2bduwa9eudX/dImvj3IvH4/j617+OzZs3r8lMgYeBUqmE1WpFTU0NbDYbTCYTf4/BsiyCwSAGBwfhdrvx+OOPw2g0UjCDkLUgFouht7cXf/7zn9Ha2oqhoSHkcjmUlZVBq9VCpVJBIpEgkUjA5/NhYmICnZ2d8Hq98Hq9eOyxx7Bp06b78kctk8nQ3NwMnU6HXC6H6urqVcn4IPf2YjwxMYGBgQH4/f4VP1+tVuPzn/88gsEgVCoVTCbTuh2LZDKJS5cuYXR0FGKxGJWVlRTMIISQNYxhGExPT2N0dBSTk5M4ePDgovlONptFLBZDMBiE3+/H+fPn4Xa7MT4+jsOHD6OoqIi2n5C7OvcikQgikQjS6TQNzD1isViwY8cOOBwOqFQqFBUVQalULvgsWlpa0NbWhubmZgpmELJWviinpqZw/vx5vPfeexgZGUF+fj727NmD7du3w263w2QyQSqVIhwOo7+/HxcvXsSFCxdw9epVTE1NAQAMBgNUKhVEItGK30M2mwXLsgCuZ17c7BhSqRT19fWor69f0WvkcjmwLAuhULhsWlgulwPDMBAIBBCJRJQWukaoVCo8+eSTd/R5sywLkUh00899KSzL8nujRSLRHWf/cO9BIpFAIBAglUrhypUruHbtGoxGIxKJBH3AhBCyTmi1Wjz//PMoLS1d9F0fCATgdrvR3d2Njz76CBcuXMDg4CAKCwuhUChuGczgrjvcHORO5lP3ap7IbY28k+vp/ONw11SaX90f6XSazxi6m8fcbK6VzWaRzWaX3U7Fzcey2Sw/F3oQuL8vsVgMoVC45Pswm80wm81oampa8vlerxednZ3405/+tOyWMwpmEHKfL1ATExP4+OOPcerUKYyPj6O6uhrPPfccDh48CIPBwBcaEggEsNlsKCwsxIYNG1BfX48PPvgALS0tOH78OEwmEx/4WGkgIxwOIxgM8sWN9Hr9ql/E4/E4ZmZmoFKpYDQalzx+LBaDz+eDXC6HwWCAXC6negbrEFfANhAIIBAIwGAwQKfTrSgDIhAIwOPxAADy8vJgt9vv6L0EAgH4/X4UFxdDLpeDZVl4PB4EAoEHGtEnhBCyclKpFCUlJaipqVlyTpVKpbB3716UlJTg+PHjaGlpwR//+EeoVCqUlJTc8nrh9Xohk8lgMplgNpvXxDzR6/UiGo2CYZg7up7OP45YLIZOp6P51X0KZIyMjECj0Sw7h7mdx9xqrhUOh5FIJJbcTjV/PhYOh/m50IMQCAQwPT0Nq9UKtVq94q1fmUwGQ0ND/CLug0bBDEJwPco4Pj6Ojz/+GAMDA3A4HHjqqaewe/duuFyuJaO0CoUCSqWS72RisVggEolQUFAAmUx2y4hrLpdDKpXC2NgY3/Fkenqaj3AqFApYLBYUFhaiuroaRUVFUCgU/EVvuW4mEokEk5OTuHbtGsbHx2G32+FwOBAKhTAyMoLx8XEEAgHIZDLY7XaUlZVhw4YNkEqlGB4eRl9fH9xuNwKBACQSCaxWK0pLS9HY2AiHw7Fk5xZyfyzXzWSp82pgYADt7e38lpZoNAqVSgWr1YqSkhK+s878FTKuKOfY2Bi6urowNjYGn8+HQCAA4PpKnNVqhcvlQkVFBSoqKiCVShec65cuXcLp06dhsVhQUFAAi8WC1tZWjI2NIZVK8dtkTp06hc7OToRCISSTSfzXf/0XioqK+KKlkUgEDMPgySefhN1uX/aiH4lEcOTIEczOzsJoNOLTn/70mpj4EkLIw0woFEKpVN60ZoFOp8OhQ4fg9Xpx5swZ9PX1YXJyctH8KxQKYWBgAFevXsXc3BwCgQCCwSCkUil0Oh2sVivKy8tRXl6O4uJiAMDg4CDa2trg8XhQVVWF3bt3Q6lULligmd+RQaFQoLS0FM3NzdBqtUteR0KhECwWCw4cOACj0YhMJgOv14uBgQF0dXXB4/HwXe1UKhUMBgMcDgc2b94Mu92+oOj2/C5jMzMzOHz4MAKBAC5cuIDR0VHYbDY0NzejoaGBtt2sgvmftd1uR21tLTweDzweD8bHxzE9PQ21Wg2n08mfS3a7He3t7RgcHMTw8DCmp6chl8v5eU5NTQ2qq6v514jFYvj4448xPj7Oz08ikQja29vh8Xj4bnV5eXkoKytDbW0t7HY73G43Ll26BI/Hg2AwiHg8jry8PFRVVaGhoQEul2vBHGf+PKqurm7J7IhIJAKPx4MzZ85AqVQu6DYy/32yLIvDhw8jkUgsmNeFQiEYDAZYLBa4XC5s3759QV2M5bqZ9Pb28sXm+/v7EQgE8Prrr8NqtUKpVKK5uRmzs7MYHh5GQ0MDysrKUFBQsORnlkgkcOnSJQwPDyMcDuPgwYNwOp0r/nugYAZ55HE3f+Pj4+jo6EAkEsGuXbvw2GOPoays7KbpZnK5HMXFxRCLxSgoKIBAIIDT6Vx0oVxKOp2Gz+dDS0sLjh07hvb2dgSDQf71GIaBSqXChg0b8OSTT/KvwXUrSSQSOHPmDF577TUwDIN//Md/RGVlJVQqFcbGxnDs2DGcOXMGjY2N2Lx5M7xeL1paWjAwMIBUKoVEIsHviWNZFjqdDmfPnsVHH32E0dFRpNNpJBIJ6PV6bN68GUKhEFqtFnq9nlYRHpBQKIT//u//RmtrK8rLy7Fnz55FwYxsNotgMIhAIID29na0t7cjEokAuF6nwmQyobq6Gi+99BKamppQVla2YFI5MzODS5cu4Z133kFraysSiQR/zjEMA5FIhE2bNuHQoUPQaDSLViBaWlrwr//6r2hsbERzczNKSkrw9ttv8+2Jm5qa0NvbizfffBOzs7PIZrOYm5vD1NQUCgoKUFxcDIZhMDQ0hGAwyO/XXCqYwTAMfD4ffvKTn2BkZIQvNEfBDEIIefBkMhlqampQVFQEhmEwMzODaDS6YP6VTCZx7do1HD9+HO+99x6CwSC/FZZL3Ver1di3bx8+9alPwWw2Q6lUYnR0FO+++y7OnDmD5557DrW1tZBKpQuCGWNjYzhy5Aj+93//FwaDAYcOHUJ5efmCOVo2m4Xf78dPf/pTeDwebNq0CU1NTdBqtQiFQrh8+TJOnjyJEydOIBaLIZfLQSgUgmVZiMViWK1WfPnLX8bOnTuhVCr5AP/8LmNXr15FcXExRkdH8T//8z/w+XxobGyESqVCRUUFBTNWgcfjwfHjx/GrX/0KDQ0N+MxnPoPu7m709PSgp6eH3+Ihl8tx4MABPPHEE8jlcjh9+jTOnTuHjo4OCAQCfsvr9u3b8fnPfx4lJSX8ZxqNRnH06FGcOXMGsVgMVqsVMzMzOHLkCEZGRvjzI51OY/v27Th8+DCam5tx+fJl/PKXv8T4+DgfDJubm8OuXbvw8ssvw2AwQCqV8nPr+fOoL3/5y8sGM3p6evCf//mfsFgseOGFF1BYWAiVSrXgfSYSCRQXF/MFVC9fvoxwOMwHZ0wmEzZu3Ii8vDzI5XK+icH88SwpKeGP39XVhZ/85CcIh8N8m9zf/va3EIvFMJvNEIlE6OzsxHvvvYeXX34Zzz777LLBjFgshv/7v//DqVOn+Mxdo9FIwQxCViqdTmNychLj4+PIZDIoKiriWz7dTuqVWCyG3W7nb6CkUimkUuktCxNNT0/jww8/xAcffIDp6Wk0Njairq4OeXl5EAgE/H60gYEBvPPOO4hEInjmmWdQUVGxot/t6tWriMfjUCqV2LRpE5566imIxWK0trbiypUruHDhAmKxGCwWC/x+PxoaGvDcc89BJBLh0qVLuHz5Mjo6OmC326HT6dDY2HjfOraQlYtGozh79izEYjHS6TS+9KUv8edmV1cXOjo60NLSglQqhVQqtSCYEYlE8O677+LkyZNob29HSUkJGhsb+QspV/C2ra0NXq8XQ0ND+MY3voHCwsIl30t7eztaW1uRn5+PqqoqFBQUoLq6Gi6XC1qtFj/84Q8RDodRWVmJ5557jl+dmJycxMmTJ3Hq1CmcP38eer0e+fn5S/4NdXR0wO/3w2q1YseOHTQpJISQdSKRSGBoaAjf//730dXVBZFIhBdeeAFFRUXQaDRIJBK4evUqPvnkE5w4cQKhUAgMw+DAgQPIz89HY2MjWltbEQ6HMTExAZPJtGDe5vP5cPXqVX4bb39/P5LJ5IL3wD03GAzCZDLxQQauwOFrr72GyclJ5OfnY+fOnbDb7VCpVJibm0NLSwvOnj2LH/zgBxgdHcVf/uVfoqSkZFHwPRgM4mc/+xlYloVarcamTZuwYcMGVFRUUOH2e6CzsxOpVAp6vR5NTU146aWXkEgk8Kc//QnHjh3DsWPH4PV60dHRgatXr8LpdOKpp56CQqFAe3s7Tpw4gcuXL6OgoIBflLnxcwqFQvjNb34Di8WCDRs24DOf+QzEYjGmp6fx61//Gp2dnZidncWlS5eQzWZht9tx+PBhKBQK+Hw+/OpXv0JXVxd++tOfory8HEql8p4UQZ+bm8Mbb7wBtVoNiUSCr3zlK9Dr9WAYBufOnUNvby/a2tpw8uRJCAQCbN++/abH27ZtG/7pn/4JR44cQW9vL7LZLP72b/8WTqcTcrkc9fX1CIVCfHZIWVkZHnvssWXvUbq6uhAMBlFSUgKXy7Ugu4mCGYTcplQqBa/Xi4mJCeRyOeTn58Nms0Eul992cR6ZTLbiPWeJRALT09NIp9MoLy/HwYMH+faUAoEAoVAIdrsdsVgM165dQ3t7O3bs2LGi12BZFtPT0ygoKMCuXbuwceNGmM1m5HI5qNVqpFIpfPLJJ7hy5Qrq6uqwdetWNDU1weFw8LVBFAoFnx5aXV2N8vJyCmasYdw2kebmZuzevRuNjY3Q6/XI5XKoqamB0WjE7Owsent70dfXB7/fD71ej0wmA4/Hg7Nnz2JsbAwlJSV48cUX0dDQwEfV5+bmUFVVBbFYjL6+Ppw/fx779++HRCKBzWZb8B4mJib41OBDhw7BZrNBp9PB6XQCuL4a9uabbyKTySA/Px/btm1DcXExBAIBSktLMTExgY8++gjt7e2ora3F/v37F/2uPp8PHR0dfEBk69at1KaNEELW0PxqaGgIY2NjkEgkcDqd0Ov1/L+Pj4/jzJkz6OjogMFgwBNPPIFDhw7BarVCLpcjk8mgoqICBQUFePPNN9HZ2QmdToctW7bwWYZKpRKBQADDw8OorKyEWq3mt0z6/X643W7U1tYiGAzyQYtkMsnfnAaDQQwNDSEej8PlcqG+vh4KhQIdHR344IMPcO3aNVRVVeHw4cNobGzkAybc4202G44cOYLOzk5cuHABFotl0Y1vKpVCX18fmpqa8OlPfxoulwt5eXm3vWhGVj4PEggEeOyxx1BfXw+n04lMJgOVSoVgMIgLFy6gu7sbUqkUe/fuRU1NDUpLSyGVSmG1WiEQCPDuu+/C7Xajv7+fvyeYL5vNIpPJwOVyYdu2bbDb7RCLxZiamkJPTw/a2tpw7do1yOVybNmyBTt27EB5eTlkMhlmZmYwMzODc+fOYXh4GD09PbBYLPckmJFOp+HxeLB9+3bs2bMHLpcLarUaDMPAbrfjyJEj+N3vfoe2tjaUl5ffMpjhcDiwc+dOtLa2YnR0FCzLYvPmzaisrIRIJIJer0dxcTGqqqrg8/kwPj7OzzPnZ7rPzc1haGgIHo+HD/Dp9fo72spOwQzyyEun03xxQuB6XQCNRnPPt1JwxZ+qqqpQU1ODXbt2oby8fMFjpFIprl69iq6uLkxOTiIUCvFdKW5XNpuF0WjEzp07sXHjRv535rbWtLe3Y2pqCjKZDHv37sWmTZsgkUjAsiwMBgNisRj/GI/HQ10n1smFvLKyEi+++OKCOiulpaVIJpPo7u7GmTNnMDExAY/HA5VKhXA4zNdMEYlE2LZtG5599lk++AAAhYWFKC4uRiaTQTqdxpkzZ9De3s4HAOe//vj4OCoqKnDo0CE8+eSTi7Z+OBwOPiVYpVLBZrPxRbdsNhtKS0uh0WgwPDwMj8eDVCq1qD7HzMwMuru7kc1m4XQ6UVtby2+JIYQQcu9ks1k+w+9GXDAhEAjg7Nmz6Ovrg0KhQHl5+YJrxdjYGE6fPo1oNIo9e/bgxRdfRHl5+YLv8cLCQjidTn4rwKVLlzA3N4fi4mIUFhZCrVbzNcG4jNhsNotoNIrZ2VlEIhE0NzdjeHgYLS0tmJmZQSQS4W9O5+bmMDw8jFQqBYvFgoqKCkgkEgwPD+PUqVNgWRaNjY14/vnnYTQaF9xsFRUVweVy4erVq5iensbFixdx4MABWCyWRWPCMAyqq6vxxS9+ccF1maw+tVqN4uJiPnA0P6g0NTWFrq4uxGIxpFIpPP300wsynmUyGVKpFE6cOIFgMIiRkZElb/ClUikcDgcaGxuxd+9e/uc6nQ4bNmyA2+3GxMQEBAIBKisr8cwzz/CPsVgs2LNnD2ZmZuB2uzEyMoLq6uoVZV5znXSWWnQVCAR80wKhUAiVSoW6ujo8++yzC/5GnU4nxsbG8M4776C/v/+2CnpqNBo4HA6o1WpIpVIwDMM3RZj/N9vU1IQ//OEP8Hq9cLvdUCqVC4IZ09PTuHr1KoLBICorK9Hc3HzHi1EUzCDkAXE4HHjppZeQTCahUCiWzHYQi8XQarVQq9VIJpOYmJiA3++/7ZoAEokEZWVlqKurW7Aawn25abVaKBQKuFwuVFZWwmQy8RdqkUgEo9EIi8UCqVSKUCiEVCqFbDZLH94aJpPJUFdXh9LS0iUnTPNTc6empnD16lU4HA4+HTcWi2HDhg3Ytm3bkhcWhUKBnTt34tq1azhx4gQGBwfR0NCw5HspKSnBvn37bquGzI2cTie2b9/OZ4oMDQ0tSvX0+Xzo6elBWVkZqqqqYDQa77h1LCGEkNuXyWQwMjKyaHEll8shkUjA7XbzKfuTk5Mwm83Yt2/fgu4nHo8HFy5cgFQqRVFREb9yfeM8Rq/Xo6GhAX6/H36/H4ODgzCZTMjLy0NRURHGxsYWbCFhGAbDw8OYmpqCSqXC7t27odFocOXKFYyMjKCoqIgPOAQCAQwMDAC43o7SZrMhFothZmYGwWAQpaWlcDgcS15fFAoF/x6mpqZw5coVxOPxJa+bW7duRVVVFQUy7gObzYaGhgYolcoFP9dqtfx2CG7b9I3zHIVCwRfCnJmZWXJrEjfXqq2tXbTNViQSwWAwQKPRQKFQYMuWLQu283Jze67rIff3cqut6UudU/MLdt4YaCktLUVvby9mZmb47JMbAx5yuRxarRYGgwFTU1OYnZ1dtfsbbv7mdrtx8eJFOByOBZ+Hx+PBn/70J0QiERQUFNxVZi3N+sgjj+spPb/4zv266bRYLAgEApicnOQ7O6TTaT5gMD09jf7+fsTjcSgUCiSTyQX/fisikQgWi2XRlwj3byKRiA+YmM3mRWl03LgIBAK+f3Yul6OTZg0TiUQwmUzLZhep1Wo4HA5+9SEcDoNlWfj9fvT29vKtey9fvoxAILAo04ErbjUwMIBMJoPp6WmEQqEl34tGo0F+fv4dpQ0WFhZi7969uHTpEsbHx9HW1sYXqEqn0xgbG8Pg4CDC4TD2798Pl8tFnXYIIeQ+CYVCePvttxe11uayMmZnZ+H1esEwDJqbm7F161Zs3rwZVquVfyzXzrKsrAwGg2HJzDqBQACpVAqbzQaDwQCv14tgMIhEIgGDwYCSkhL4fD6MjIzwbVPT6TSGh4f57boOhwPBYBA2mw1utxtTU1PYsGEDH8wYHh5GQUEBHA4HxGIx5ubm+AWcdDqNnp4evPPOO8uOg9vtRigUQiKRWFTklJvvVVdXw+l0UiDjPjAajSguLl4UGBOJRPwWcrVaDbPZvCgYIJfL+SBBOp1GLBYDy7KLXkMikaCoqGjJxUWxWAyRSASJRMIHwm48p2UyGSQSCV/kdqULhfPfZygUgsfjQSaT4Y+vUCggk8kgEomQl5e35IIpt7BpMpkQDAb5598ts9mMDRs2ID8/HzMzM7h48SI+9alPLfh+4GqwFRQUoKKiAmaz+Y7ncBTMIBTMEAohl8v5G/n7dcOeTqcRDAbR19eH9vZ2vi1UMpnkv9SSySR8Ph/C4fCCzIqV/G5c1FUqld7091epVCvavkLW7vnMrQgsF0TTarWLPmuuCFo6nYbb7caJEyegVquXPSe8Xi8fELnxAigQCCCRSCCVSu94P7DNZkNTUxMMBgOmp6dx5coV7Nu3j//b6ezsxNDQEIRCIaqqqhZshyGEEHJvxWIxnD9/ftlsOG6hZOPGjXyHOC6Qzt3QZDIZfp5ys0KYQqEQarUaCoUCuVwO8Xic33pYUlLCd63g6mEwDIOxsTEkk0k4nU6oVCpYLBY+g2JmZgbA9QyOQCCAqakp7Nu3Dw6HA7lcDtFoFIlEAizLIhwO49KlSxgZGVnyvXF1qpLJJFQqFQKBACKRyIIFJLFYzAdjyL2nVCqXDFTcGNhYal4sk8mg0WhuOR/munfcLPOUm4/diyKvMpmMn7cHAgF+/naj+VtOlsK1P17NrFaNRoPCwkIUFhbyGcDBYJAP5oXDYXg8Hrjdbjz99NMoLS29q9oxFMwgjzypVAqTyQSLxQKBQIBIJIJIJHJPt1NkMhkMDg7iyJEj+Oijj+D3+6FWq+FyuVBeXs5HJwOBwJIpiyshkUggk8loNeARIZPJUFpaumT3j9VkMplgMplQWlq6aILGrViYTKY7Pr5CoYDVakV1dTU6OjrQ3t6OWCwG4Pq+156eHkxOTsJoNGLz5s0oLS2lD58QQu4Ts9nMdzFYChc8UCgUUKvV0Gq1bOtS6wAAIABJREFU/M1jJpPB8PAwfD7fil+XK2gYDAZRXl6O2tpadHR0oKOjA0NDQ3A4HNBoNBgaGkI6nUZNTQ3kcjm/Wn/+/Hn4fD4wDAOv1wufzweWZZfcMnBbN1JiMZxOJ2w2G4xGI3UneUQIhUIoFIplFwrvtUwmg0QisWa3fisUCuzevRuhUAidnZ3o7OyEXq+HzWZDb28vxsbGoFAosHnz5kXbcCiYQcgd3OxbrVZYrVawLAu32w2Px3Pb+9e4PulceiO3B205DMPwXRj+/Oc/w+fzoaysDJs3b0Z1dTWMRiMfER4fH0ckEsH4+PgdByNuViSIPHxYluXbYq10QsYFvUpKSvDEE0/wq2jL4SpXl5SULPr53a5GcOmPGzduhM/nw/DwMHp7e6FWq8GyLN9yuKGhAfn5+VT4kxBC7iO5XM53MViKRqNZNhNBKBRCr9ff0R55sVgMk8kElUoFsViMsrIyFBYWQigUYnJykt/aMjo6CrVazdfhMBqNKCkpwdGjR+Hz+fiuXm63GyKRCGVlZQuKk3KvZTabsW3btlt2eeBu4CoqKqDRaJbcmkAeLiKR6IHNrWOxGKanp1dta8i9+H7YsmUL+vv7cfHiRXR1dcHlcsFoNKKrqwtTU1OwWCyora3li79TMIOQuwhmGI1GWK1WSKVSTE9PY3R0FKFQCAaD4ZZ7uFiWxezsLL9f02azoaKiYtkUtWw2C5/Ph76+Pr4o1v79+/HUU08tWl3u7e3F5cuXIZFIKBhBbgvXSWS5Qk4syyKVSiGXy/H1Yrg0RG77idPpxOOPP476+nqo1eoVvweBQLAqATS5XI6Ghgb09fXx/eC1Wi30ej0GBgag0WiwZcsWasdKCCEPYO50YxeDlQQkrFYrTCYTRCIRMpnMLW/+GYYBy7KQSCR88UTuOFarFUqlElNTU5iYmEAul4PX60V1dTVfOFokEqGwsBDpdBqzs7OYnJxET08PfD4fNBoNnE4nX9tAIpHwdcWMRiOam5vx8ssvr+h3XK6WFFk/VmsucyevKxAIkEqlwDDMssGMqampNRvMkEqlqKys5OuZ9fX1ob6+HpWVlejr68Pc3BwKCgpQUFBw19uvKO+cEFyPrlqtVtTX10Oj0aCvrw/nzp2D2+2+6fOy2SwikQhaWlrwgx/8AN/97nfx3nvvwe12L5vZwVUuDoVCfEujsrKyRdkcmUwGoVAIU1NTCAQCFOUnt4VlWQSDwUUFyDiBQAD9/f1IJBILqmEbjUZUVFRAoVDw+xlXWl17/rnLpQHfDZlMhqamJlRVVUEoFKK7uxutra18VkZJSQn279+/ZGErQggha5tCoeA7KdzsesEwDCYnJ+H3+/nihvPT+7msC4/Hg+7ubr4DhclkQllZGR+s57IN/X4/enp60NXVhXQ6jaqqKuj1ekilUr6+hclk4herlruekoebVCqFUqm879u0xWIxJBIJBgcHl92KFY/HMTs7e8fztPsRkJHL5SgpKUFTUxO6u7vR2dkJr9eLK1euIJfLYceOHXe0YLZovOhUJeR6MMPlcmHfvn3w+/24du0a/vjHPyKbzUIgEMDhcCzaF5dOpzE1NYVLly7hgw8+QG9vLywWC5/+eLMvPy7quly0l2t51tbWxt9U3klR0lwuh0gkgrm5uTX7hUdWVyqVQn9/P8bGxvgiZCKRiC+4Nj4+jkuXLiESicBisfABjLy8PNTV1UGlUvGttDZt2gStVrugMFQqlcLQ0BCGh4fh9/uxefNm2O32BZF1hmEwNzeHRCJxV78LVzyrqKgIVVVVGBwcRCwWg91uh1QqRUFBAQoLC6mLCSGErEN5eXloaGhAW1sbhoeHcfXqVZSXly/YNphIJOD1etHV1YXp6Wk+k3b+AlBeXh6qq6tx9uxZANcXmpRKJfLy8qDX6/kMRLVaDafTiVwuxwcztFot6urqoFar+ZV4jUaDvLw82O12zM7OYnBwEH19fXC5XAu2T3KLB8eOHYNIJEJ5eTlqamooW/AhoVarl+3Ils1m+cyJ1W4Jr9PpUFRUxHdsW2ouNzIygvPnzyMcDj/Q8+1m4yAUClFQUIBt27ahs7MT7e3t0Ol0GB8f5zscrcZ7p2AGIbgeBXU4HNi2bRt6enrQ3d2NlpYWft9+U1MTdDodH3zgggRdXV344IMPcO7cOWg0GmzatAlNTU0L6l4sFciQy+V8teS5uTl+xUEikSCbzSIajaK9vR1tbW2IRqNQKBRgWRbRaJTvbHI7mRpc5kgwGKRgxhoTj8cxPT19y8eJRKIVVZpmGAZTU1MYHh7G4OAg7HY7Xz1+bm4O/f396OzshFAohN1u56tIG41GVFZWwmazYWBgABcvXsTBgwchlUqh0WggEAiQy+UQCoVw9uxZfPLJJxgbG4NWq+U75swPoiUSiVumPwqFQmSzWSQSCczNzWFubg4SiQQKhWJBMNDhcGDjxo34zW9+A4/HA6fTCbPZzBd6I4QQsv44HA5s2bIFfX19GBkZwenTpyGVSpGXlweRSASWZTE9PY3Ozk709vaCYRiUl5fDZrMtWNE1m80oLy/H+++/j1gsxhd2N5vNC+o+cQtXbrcb3d3dGBwcxJYtW1BdXc0HKbhWsHa7HRs2bMCFCxfQ3d2NTz75hG99zt1UxmIxDAwM4Ec/+hH0ej0++9nPwuVyUTDjIaFSqWA2m5ecz3P18jKZzKoHM4xGI8rLy+HxeBAIBBbM5ViWxdzcHK5du4bu7m7E4/H7fr5xHeu4v1Gfzwefzwe1Wg25XM63pgWA/Px8NDQ0QKfTob+/n+8U5HQ6UVtbuyr1ziiYQci8gIbT6cRzzz0HmUyGDz/8EBcvXkRPTw/sdjvy8/P5iyfLspiZmcHw8DBmZ2dhsViwf/9+PPPMM2hsbIRcLl/2Ro7b0lJWVgalUon29nakUikMDAzAbrcjHo9jYmICHo8HALBx40YYjUb09/fj5MmTyOVy2Llz5223osxkMkilUmu24vGj6pNPPsG3v/3tWz7ObDbjq1/9KhwOx20dV6lUYuvWrfB6vfjmN7+JHTt2wGw2I5fL4erVq3xXkN27d6O+vp4PHCgUChQVFeGVV17BH/7wB5w5cwbf+973UFNTg8rKSigUCiQSCUxOTuLEiROIxWIoKytDWVnZHXVO4VKFw+EwWltb8dZbb6G8vBwulws7d+5c0Iq4qKgI+/fvx7Fjx9Df3w+5XI5Dhw6htraWTiRCCFmnioqKcODAAbS2tuLatWt4/fXX0dvbi+LiYhiNRgSDQQwMDKC9vR3BYBD79+/HX/3VX8FisSx58yeXyzE0NIR4PI4dO3YsKugplUpRWlq6YFXbZDLxz52vvr4eX/nKV+DxeNDV1YX//M//xKVLl+ByuWA2m5FIJDAwMIC2tjaMjY2hqqoK9fX1FMh4RHDBjHQ6veoFyPPz89HY2IjW1lacPn0aMzMz2LFjB7RaLVKpFDo6OqDT6fDss8/izTfffCD3Sw6HA2azGRMTE3jjjTf4+VtTUxMKCwthNpv5v83Kyko4HA5MT09jaGgIlZWVqKqqgtFoXJVAEAUzCJlHpVKhuroaQqEQFosF3d3dGB0dRSQS4buVsCzL76Ezm83YsmUL6uvrUV9fj6qqKj7gwRVVNBgMsNvtsFgsfK9npVKJ+vp6PPnkkzAYDAgEAmhra8PAwABUKhWkUimqq6tRVlYGq9WK/v5+qFQqRKNRjI2NobCwEBaLBXq9Hi6XCwzDQKfT8ZWVZTIZTCYTCgoK4HK5YLfbF1youaiqVqvl94Yu11dbLpfDZrPxdRUopf/uzi+bzYZQKAShUIjBwcFbPicajfJZNdwFhCucxH0WXFpsfn4+KioqsGvXLjAMg4GBAQwNDaG7uxuxWAyxWAwGgwGHDx/GoUOH0NjYyGdAcMfYvXs3ZDIZdDodJiYmMDQ0hJmZmQUXcKfTiZKSEmzbtg1Op3PBFiytVovy8nL+InazsfjMZz6DvLw8DAwM4Nq1a/y2lObm5gWP1el0KCkpgcPhgM/ng0wmw8aNG+FyueikIoSQ+0QkEsFsNsPpdPLFOO+GWq1GWVkZvvjFL6K1tRVdXV3weDyYmJgAy7JQqVRIJpMwGo3Ys2cPdu7cifr6eiiVykXXk4KCAtTV1fGZFXV1dYsWAbi51cjICHp7e2G1WlFRUYGCgoJFW4m5wp+vvvoq2tra0N/fD7fbDbfbjWw2C4PBwK+Kv/DCC9i5cydcLhd/nPnX5aKiIqjVapo/rdK5F4/HF40nl2FaVFTEz7dv3O4tEomgVCr5Yq9c0fPlbtZv9h4ymQz0ev2ijm+3+7lz79flcsFkMi0IiNhsNuzbtw/T09Po6enB1NQUTp8+DZ1OB71eD4PBgIaGBpSVlaGlpQWJRAIWi2XJOeGtzr3589L5c7b542mz2RaMlUKhwPbt2xGLxRCPx+H1epFIJBCJRFBaWrogiCiRSKDX61FXVwefz4exsTFs3LgRZWVlq/b3QMEMQm74ojIajdi8eTNKSkrQ3d2NK1euYHR0FDMzM5idnUUmk4HJZILVakVJSQm2b9+ODRs2QK1WL/ji5LaoFBYWIhKJwGazQafT8QWFysvLIZFIkJeXh5aWFgwNDfFfSBUVFdiyZQufgmW32yGRSDA0NASxWIxcLsfX8ti0aROy2SzsdjvEYjGEQiG0Wi2KioqQSCRQUlKCkpKSBasF3MU+Pz8fdXV10Gq1sFgsS/bL1ul0qK2tRSgU4nvGkztjMBhQW1sLrVaLZDJ5W88xm8185FoikaCurg4ajQYWi4Wf0InFYuTl5aGqqgpyuRzNzc1QKpWorKzE6dOnMTAwgEAggIKCAmzYsAHbtm3D1q1bFxWdlUqlKC8v5wulnT59GmNjYwgGg4jH41AqlbBarWhoaMCWLVsWBR2A6ysK27ZtA4CbVrlXq9U4fPgwbDYbTp8+jdnZ2WXbCEulUqjVahgMBpjNZhiNRpSWliIvL49OKkIIuU+kUimKi4uRTCb5hZ27nXOZTCY888wzfMC6v78fQ0ND8Hq9qKysRFFREQoKCvDkk0/C5XItum5xN14WiwXbt2+HyWRCNptFQ0PDopaPEokEpaWl2LhxI2ZnZ6FUKlFbW8uvIt94TIfDgVdeeQW1tbU4deoU3G43RkdH4fV6oVQqYbfbl31vN16XuRtscvfnXjKZXDSearUahYWF2LRpE8rLyxfNybljGI1GNDY2QqPR8F0Mb8TNtVKp1IKb+BvP/7y8vEUZPbfzuQuFQiiVShQVFWHz5s1wuVwLCpmbzWaoVCpkMhkUFRWhtbUVbrcb8Xgcdrsd+/fvR319PQwGA7Zs2YJIJMIXul3puTd/Xjp/zjZ/PC0Wy4KxksvlaGpqAsMwiMfjcLvdfF0/bvvJjePucrlgtVoxMzOD+vp6FBUVrdq5IcjdSVVBQu6zQ4cO4cSJE/jOd76Db37zm/flNTOZDJLJJOLxOF/chmEYZLNZvtKwXC7n94gtFd1NpVKIx+NIJBIQi8XQarWQSqV8rYB0Oo1oNIpYLIZUKsVfQOVyOVQqFRQKBQQCAZLJJCKRCNLpNJ+er1arEY/HEYlEkMvloNfr+doG3HFTqRRf80AikSz4Yue+hKLRKB+t5goMzZdMJjE3NweGYaBUKvljkZWLx+N8Mdbb3fYjkUiQn58PqVQKhmHg8/mQSqUW/DybzfIR8lQqBYPBAJFIhHQ6jXA4jFQqxa+iceeOSqVatq4Ld+6Hw2Gk02n+vBcKhZBIJFAqlVCr1UtOZMPhMPx+Px8IM5lMS75GLpdDOp1GLBZDJBLhi0dx1e3nn2PxeBx9fX34m7/5G0SjUezduxd///d/D5fLRS2LCSGPtPPnz2P37t389+q9xBW8TCaTyOVy/DXobnG1k6LRKH+zyjAMZDIZJBIJpFIp321kuesWy7Lw+/1863G9Xr+o6wl33eHqj3GLPzdrDZnNZhGPx/nrITcfvNV7W+q6LJfLaf60CucelxkzfzxTqRQ/n5bJZPxnMn+OwLIskskkgsEghELhsnMhbq6Vy+Ugl8v5IrK3c/7fzuc+/zyMRqNQqVT8nH+p40SjUWQyGb7mnlar5efrPp8PLMtCLpfzc6eVnHvz56UajYafs80fT7FYvGisuNeY32BAIpEs+VozMzP43ve+h48//hipVAqvv/46GhoaVi24R8EMQsEMQsia1tPTgw8//BCvvfYaqqqq8JWvfAUHDhy46TYWQgihYAYhhDw4fr8fnZ2d+O53v4u5uTnU1dXhW9/61qpuE6ZtJoQQQtYUlmX57JBUKoUrV67g+PHjYBgGJSUlaG5upiJrhBBCCCFrTDqdRiKRAMMwuHbtGs6dO4fBwUGUlZVh9+7dCzoRrQYKZhBCCFkzuDTOwcFBtLW1obW1Fb29vfB6vdiyZQu2b98Oh8OxKqnNhBBCCCFk9QwODuLcuXPwer3o6upCe3s7ZDIZmpubsW/fviXr3twNCmYQQghZM7j9yb29vTh27BiCwSC0Wi3q6ur4DixURI0QQgghZO0ZHx/HyZMn+bodRUVFeOyxx7B7927k5+evet0YCmYQQghZU7LZLCKRyG11YCGEEEIIIWtDIpFAMBiEUqlEaWkpKisr8fzzz8PpdN6TxSgKZhBCCFkzxGIxbDYbXnzxRRw6dGhRBxZCCCGEELI27du3DzU1NRAKhQu61N2r7cEUzCCEkEdAZ2cnAKCurm5Nv0+BQACZTIb8/Hzk5+fTB0cIIYQQsk4YDIabtjtebUIackLurVAohFAoRANBHqif//zn+PnPf04DQQghhOZahJCHAgUzCLnHjh49iqNHj97246lPPFnJeREOh+HxeG75/Pfeew+///3vaSAJIYQ88nMtmm8R8nCgbSaE3GNHjhwBALz88ss3fdzIyAgkEgkMBgOCwSCkUiny8vJoAB9xuVwO2WwWuVwOLMsCAEQiEWKxGObm5pBMJqHX65FMJiGXy5c8RmdnJ4aGhgAAx48fx6FDh2hgCSGEPHJzLQAYHR2FSCSCyWRCNBoFy7Kw2Ww0iISsQxTMIOQeCoVCeOedd/j/1ul0yz62v78fkUgEarUaIpEIAoEATqcT+fn593XvGVkbcrkcH8jIZDKIx+NgGAbpdBrpdBrxeBwikQh2ux16vf6mx5q/veTdd9+lYAYhhJBHcq7FzbfC4TA0Gg3EYjEymQwCgQDy8/NhNptpQMk9tV5qmK0XtM2EkHtofsrjv//7v9/0sU888QSEQiHfkjIWi2FiYgL9/f24du0a/H4/DegjIJvNIpVKIZ1OI5VKIRKJIBgMIhAIIBAIYGZmBsFgEIlEAjU1NbcMZADXt5hwzp8/T4NMCCHkkZxrAcChQ4f4+Zbf70cikYDH48HAwAD6+vrg8/mQzWZpYMk9QTXMVhdlZhByD3FpjwDQ3t5+y8d/9rOfBQC8/fbbSKVSSKVSiMViCAaDmJiYgN1uR15eHkwmEw3uQyabzSKdTiOZTPLbShiGQSwWQzQaRSqVgkAgQCaTwfbt22/7uOPj4/wWEwDo7e3F+Pg4CgsLadAJIYQ8cnOtG+dbmUwGoVAI8XgcoVAIbrcbZrMZNpsNFosFIpGIBpkAuJ41KxAIFvyMZVlEIhFEo1E4nc5bHuO9996DUCjE9773PRpQCmYQsrZxaY8AcObMmdt+3osvvggA+M1vfoNEIoFUKgWpVAq3243p6Wk+FZLSIR+OIEYmk0EymUQ6nUYikQDLsgu2lySTSYhEImzdunXFx//ggw+W/NnXvvY1GnxCCCGP7FzrxvkWy7JIp9P81pNIJAKv14v8/HxYLBZIJBIa7Ed4rpbNZsGyLFiWhUAggFAoRDgcRjgcRi6Xu+X2JoBqmFEwg5B15Maq2pFIBEePHsXTTz9928f4whe+wF9kuVoJYrEYiUSCv8CazWYqFLoO5XI5JBIJMAyDTCbDBzJSqRSSySTi8TiEQiEEAgF27Nhxx6/zxhtvLPrZm2++ScEMQgghNNe6Yb719ttvI51OI5vNIplMIhwOIxgMLghqyGQyGvhHJIDB1S9jWRbxeBzpdBoMwyzYDqxUKuFwOKBUKm95TKphRsEMQtaN999/f8mfrfQCO/8i+6tf/QqZTAYsyyIWiyEej2NiYgJmsxl2ux1Wq5UGfh2YH7DgglRCoRCxWAypVAoMw0AgEKxoO8lSxsfHcenSpUU/b21tpa0mhBBCaK51g6UyNZLJJKLRKGZnZ6FWq5Gfnw+73Q6FQkEfwEOIW2TiAhlc0CIejyOVSvELUFyR9oaGhts+9vwaZufOnaPBpmAGIWvX7373uyW/xH784x/f8TG/+MUv8hdZ7qZXKpUiHo/D6/XCbrfDbrcjPz+fPoA1aP4FMZ1O89tLEokEXw+DYRjs3LlzVV5vqS0m8/+NsjMIIYTQXGuxGxeRkskkMpkMEokE/H4/PB4PHA4HbDbbba3Ik7Uvk8ksyJQVCq/3yYjH4/wCokgk4oNcu3btWtHxb6xh1tfXRwtLDyqYwaXd3AqXIr0acrkc4vE4stksxGIxZDIZf5IRstYcPXoUgUBg0c9nZ2fvKP1xuYvsr3/9azAMw0eHJyYm4Pf7YTQaYbfbqW/6GsGlI3L/C4VCSKVS/AWR23/JMAz27Nmzaq+71BYTDm01IeTO5iJcTZv58yCBQACRSLSq8x4CflVcJBJBIpFAKpXSoJD7NtcC/v8i0s9//nN+vpXL5RAIBBCNRjE1NQWLxQKbzQaNRkMfyjqdo924dSSVSvG1y7h/z+Vy2LJlyx2/DtUwWyPBDJZlMTs7i0QigUwms2wQQyKRQK1WQ6vVQiAQ8P+7U+FwGG+++Sbi8ThcLhcOHjxIHR3ImrVU2uP8f1uNCywAvPTSSwD+f00NLqIciUQwMTGB/Px8FBQUwOFw0IfygC6QiUQC8XgcuVwOkUiET1Hkghm5XA6pVGrV900ut8WEQ1tNCFlZEINblfX5fAgGgwiHw9cnUmIxFAoF8vPzodfrodVqKaixSlpbW3Hs2DFYrVY0NTXd9dY7QnOtO/WlL30JAPDb3/6Wv25zcy6/34+xsTE4HA7Y7fbbaplOHvx3ejqdRiwW47eUcPUwuIzZVCrFP/5uapdxqIbZGglmpNNp9PT0wOPxIBQKLRvMkMlkMBgMyMvLg1arhcFggNFovOOMimg0ig8++AB+vx/bt2/Hjh07KJhB1qyl0h45q5H+eCMuU+Ott97iVw0BIJlMYmZmBsFgEBaLBWazGSzLQiQSUauxeyidTvNdSLiLIve5RKNRMAzDBzIef/zxe/IebrbFZP5j6CJKyM2xLAu/3w+fz4eJiQkMDw9jamoKMzMzAACpVAq1Wo2ioiI4nU4UFBTA6XRCo9FQJsFd6ujowH/8x3+gsbEREomEghnkgc61AOCFF17g//sXv/gFv2KfSCQQCoUwPj6O4uJi2Gw2aLVaZDIZPmuLPHjZbHZBtixXw4xboOc6yzEMAwCrtu2XapitoWBGPB7HyZMn8ec//xljY2NQq9UQi5c/jFwuR2lpKZqamrBr1y6UlpZCpVKt+I9aKpWirq4OoVAI5eXlVEmYrFnLpT1yVjP98UZf/vKXAVxPh5wf1BgdHYXX64XZbIbJZILRaOQzqKjV2OrhMjG4FRuuNgb3/0KhkC8sdeDAgXv6Xm62xYRDKwKE3Fwmk0EgEMDx48dx8eJFdHR08OnH3DYTLgMjl8tBpVLB6XTiC1/4Aurr6+F0OiEWiylLg5CHaK7FeeWVV/igRiqVglAoRDabxdDQEKamppCXlwej0QidTgeBQACxWEwLSQ8Iy7J8Af1EIoFIJMJv8+WyMbjHsSy74noYt0I1zNZQMINhGAQCAXg8HszOzmLv3r2L2kJms1lEIhHMzs5iamoKV65cwcTEBMbHx/HCCy+grKxsxSlYGo0Gzz//PNLpNAwGA7Ra7W0/N5fL3XIicTuPuRfPJQ+fm6U9zn/MvbzAcumQb731Ft9ijGEYMAyD6elpWCwWGI1GaLVayGQyyGSymwYlya2DGFwWBsMwiEQiyOVyiMVi/M+4z+B+tOG61RYTTmtrK0Kh0G31RifkUeTxeHDx4kX8/ve/x/j4OIRCIbZt24bCwkI+O5RhGESjUXR1dWFoaAhXrlxBMpnE448/jqeffho2m+2WCzA3BkYehNWayzzoORHNyWiudb/mWjcGNd58880FW0kzmQympqZgMBhgNpuhVqshlUohlUppznWfcMVbua298XgcLMsiGo0u6kqSy+Wwd+/ee/I+qIbZGgpm3Bhg+PSnP42KiooFP2dZFqFQCF6vF/39/Th58iQGBgbgdrtRXFwMpVJ5y2AGt3opkUggFAohl8vvKNWHSyNSKpXLZoPczmOWwhWGSafT/M3gnaSRcX9IAoGAUlIfAjdLe+Tcq/THG3GZGm+99RYEAgGfHSAQCBCLxSCXy2E2m6HX6/ksDcp6un0Mw/AVrhmGQSKR4NNNuRZeQqEQLMves+0kS1lJu6+jR4/i5Zdfpg+TkCWMj4/j+PHjuHDhAvLy8vD444/j2WefRVVVFd8KO5PJYG5uDi0tLTh37hxOnjyJjz76CGKxGDU1NTCZTMt+r86fRwC44wLnXLD0TuYQ89/D3RRYn38cqVS6omsJwzBIp9P8Fsg7udG78fXv5jjcVkAqNk9zrZX4i7/4CwDXs2NTqRQfpIzFYojFYtBoNNDpdNDr9XxAg7Jj710Qg8uKTSQSfObF/G5yXAZzNpvFY489dk+vI1TDbI0GM6RSKQoLC1FWVrZsMGLz5s2w2+348MMPcebMGZw6dQpmsxk1NTUAwLcpZBgGcrkcSqUSsVgMMzMzmJubg9VqhU6ng1KpxNzcHLLZLKRSKVQqFUQiEV+Eh1v9VKlU/EmcSqXg9/sxOzuLwsJCqNVqyOVyyOVysCzLR+pmZmYWPEYmk0HO3hy0AAAgAElEQVShUCy6gHHFYbjq2olEAsFgEKFQCHl5edBoNFAoFFAqlRCLxQsuoje+T7VajWw2i3g8Dr/fDwBQKBRQKBR8sVSdTnfTLzmGYRAOh/kOLxqNhtLXHrDz58/fNO2RMzs7i87OTtTV1d2X98UFNX75y19CJBIhFAohHo9DKpUiEolAo9HAYDBAo9FALBZDqVRS//TbuEiKxWJEIhG+JkY8HkcikUA2m+WDRvv27bvv7+/IkSMreiwFMwhZms/nQ1tbG6LRKA4ePIgvfelLcLlcC7oWSCQSGAwG7Nq1i9/K984770AgEGBmZmZRsXSumGg8Hkc4HObnEQKBAAqFAna7nZ+LSKXSJbMMuGNwe76j0Sji8fiCwLRCoVhykYV7LlexPxqNIhQKIRQKQalUwmKxQK1WQ6lUQi6XL3p9LkWb6y4ikUgW/S56vR52ux1KpXLZ7Yzce0gmkwgGgwgEAlAoFHydNYVCwW+VXA7XEYprnRgMBhEMBvlCrFqtFnK5nF8Nv3EOxc3luN+TZVmEw2HEYjGk02lYrVb8P/beNDbO87zXv2bfZzjDfd9FSiJFiVqs1bISOV6i2E6dNouTtjhFUODEaNGiOR9yAhz04JwvDU6BExSnbVwEaW05iy1ZTmzZlhdJtiRbO0VKFPdN3Ibk7Pv+/+D/85QUSUu2tVDSewGEZc5w5p3lfZ/7+d33/bu1Wi3ZbBabzSYTbMuJIKFQiFQqhVqtxm63K9n3ByzWEojq2Jdffll+1+BT/7+5uTmcTidOpxOLxSKrY5VE0q1BtPsKjzJRmRGPx6V4MV/MuBPVsoqH2QoWMwApDiyH1Wplz549jIyM8NZbbzEwMMD09LS8vbe3l6NHjzI5OcmmTZt4+OGHeeutt+jp6SEYDLJjxw42bNhAaWkpv/zlLwmHw9TV1fHkk09SUFBAIpHgwoULdHV1ce3aNZn9FLN8Z2ZmCIfD5OXlUV1dTWtrK1u2bMHj8XD+/HmuXr2K2+0mEongcDioqKigubmZ3bt343Q6F7yWZDJJb28vPT09dHd3EwgECIfDxGIx7HY7VquVoqIitmzZQkNDA2VlZQtOLnGcExMTPPHEE0SjUTo7OxkeHqakpIT6+nquXbuG3+9Hp9Px/e9/n6qqqiWDANEu8OKLLxIOh6murubpp5+msLBQ+VbfRW6m7FHw4osv8g//8A939PjEpvU3v/mNrNQQwXAoFJITiISwJgJBhf8MvkUAHggE5FQnYSYllH/gjlZizCcQCPDKK6/c9P1feeUVpdVEQWEZkskk4XCYTCYjN/oWi2XRJlWr1eJwOGhqapJmoGazmbq6Osxm84L7hsNhxsfHef/99xkbG8Pn8xGLxVCpVBiNRoqLi2lsbKS1tZWmpiaZpJkvRsTjccbGxuju7qanp4fZ2Vm5KXc6nVRUVLBlyxbKy8sXxDLib4eHh7l06RLd3d34/X65qdfr9TgcDsrLy2lvb+ehhx5alNw5d+4cr7/+OmVlZTQ3N1NXV8cHH3zA2NiYnHZnMBgoKSlh165dNDc3U1NTs2jjPz4+zsWLF+no6GB2dpZ4PI5Wq6W4uJiGhgY2bdq0rNG8iIPm5ua4cuUKZ86cYW5ujmAwSCwWk4ml/Px8Vq9eTUtLC83NzVKYSafTTE9Pc+bMGc6ePUt7ezsajQa/309PTw8ATqeT/Px8Ges988wz1NXVLXutDIVC/Pa3v2V8fBy73c4PfvADiouLlZPoAYy1BGKs669//Wui0SgqlQqdTkcymcTv92Oz2WScZTabsVgsSiLpCyL8ysSPMPEUZuzCGwNgz549d/TYFA+zFS5m3AidTkddXR2lpaXSbyMajcrbh4aGOHjwIJcuXWJqagqbzcZbb73F4OAgBoOB8vJy6urqsNls/O53v2N2dpZdu3bJDEgikeDq1ascPnyYU6dOyUV0YmKC6elpYrEYsViMwcFBysrK2L59OyqVCrfbzfvvv8/ExIQ0gBkdHcXpdLJx40YqKytpbm6WQUQikWBqaor333+fTz75hO7ubiwWC3q9XpaRh0IhstksExMTcnSsyKrMP86zZ89it9vx+XwcP36ccDhMa2srJpOJs2fPcvnyZaLRKJs2bcLhcFBQULDofQ2HwwwMDPDyyy9LM8E7oS4qfDYHDx686fseOnTori2wYvrJr3/9a1lOK5TqVColxYx0Oi2Dwgc5azBf2RdBfzAYJB6Py7YStVpNLpfj0UcfvavH+sYbb3yhv1GqMxQUFmMymcjPz5dToYaHh6Xx+VIZ+ry8PPLy8li7du2i24SQ0N/fz7Fjx3j11VcJBAKyajSXy5FOpzl9+jTV1dVMTk5iNBqprq5eIGgkk0k6Ozs5d+4cn3zyCePj46RSKbRarcw8WiwWPB4PW7dupb29XQoSYiLdqVOneO+99+jr60Oj0cg4Q7TI6fV6JiYmMBgMtLW1YbVa5fN3dXXxz//8z6xdu5aHHnqI1atXc+zYMTwejzTPc7vdBAIB3G639A0R8VAmk2F2dpZz585x4MABzpw5g1qtprS0FI1Gw9TUFNPT04TDYfr6+pb8XDKZDH6/n1OnTnH06FGOHz8uW1tEAigYDBKNRlm3bh3hcJiioiLy8vLQaDTyGE6ePMmvfvUrvvnNbwIwNTXF+Pg4+fn51NfX43a7uXLlClevXqW0tBSTybSkmCG8EQ4cOMDIyAhNTU08/fTTipjxgMdagu9+97sA/Pa3v5U+ZmLTLdpPzGYz4XAYh8OByWRSEkk3gah6j0Qi0qMkHo9LYVKIGJlMBuC2tpIsh+Jhdh+IGSLQTyQSMuuwXOuE8Ncwm81s376d6upq1qxZc9OLQTQa5fjx49TW1lJfX89jjz2G0WhkenqaX//614yMjHDkyBEikQgGgwGNRsO3vvUtKYr84Q9/oLu7m9OnT7N9+3YsFgvNzc0A+Hw+Ll++zOHDh/H5fKxatYqvfOUrFBcXo9VqSSQSfPLJJ7z99tscOnQIjUbDmjVrKCsrW1TaGI/HOX/+PGq1GqfTya5du2hqaqKyshKr1Uoul+Ojjz6is7OT4uLiJcUMYawai8VYtWoVu3fvXlD2qnDn6erqYnBw8Kbv39/ff1fKH5daYH/zm9/IC342myUejxMMBgkGg7K/U1RhPUgLrFD1xThVUcotgldhqqpSqW77dJKbZXR0dElB5d133wWgubmZysrKRX+joKCwmJKSEjZv3szk5CQ9PT0cPHgQtVpNTU0NVqsVnU4nvRlu1OaZSqUYGRnhvffeY//+/QBs2rSJ3bt3Sx8xj8fDRx99xMDAAK+++io2m43du3fLdSKZTDI5OclLL71ER0cH8XicPXv20NDQQFFREYlEgrNnz/L++++zf/9+ZmdnycvLo6GhAb1ej8fj4ZVXXuH06dO43W5aW1tpa2uTjz83N0dfXx/vvPMOx48fJxgM8nd/93fU19cviGWy2SyRSISuri5mZmbkdaWwsJBEIsHHH3/MG2+8wZEjR7Db7axfv17GQ7FYjJMnT3L48GFOnjxJfX097e3tbNmyBaPRSDAYZHx8nJMnT3L58uVl473R0VFeeeUV+vr6sNls7Nu3j+rqaim8dHZ28v7773PmzBlMJhO1tbVs3LhxUayUTCYZGxtDpVKRSqV4+OGHqampobS0FKPRuEA8Eomu6/F6vQwMDOB2uyksLGTHjh1KTKbEWov49re/LUWN+YmkbDYrK6NEtbfZbH7gE0nLIeJUUX0RDAZlDDv/3+LnbogYAsXD7B4QM3K5nDS4mf+7+UJGZ2cnQ0ND0mPD5XIt+ViBQACfz8cTTzxBRUWFzHCIKoabPZaGhgaeeuopKioq0Ol0eDweZmZm+OCDDzh37hzd3d3s2rWLr33ta6xatQqbzUY8HiebzZLJZDh27Bj9/f2sWrVKLlqhUAi3241er2fNmjU8/PDDbNu2TY64zGQymEwmwuEwb775Jn19fXR1dUmTn/kkEgkGBwfZtm0bzz77LJWVlbhcLsxmMyUlJYyOjsrxtzU1NWzatGnRa7127RonT54kmUxSVVXFunXrFpWyKtxZXnzxxS/0N3c7YwD/Walx8OBB2Xqi0+lkP7Xf78fhcGCz2TAYDFgslvv6+yZ6qcVPOByWfdnZbFZmF4EVI2IIfvKTn/CTn/xk0e9FefXzzz+vlDIqKNwklZWV7Nq1i7NnzzI1NcXx48eJRqM0NjZSV1dHSUkJLpdrgeeQWq1Go9Es8poQiYxz587h8Xj44z/+Y3bt2kV7e7sUiSORCJWVlbz99tu88cYbvPfeezidTlpaWmRV6ZkzZzhz5gzZbJbNmzfz+OOPy018JpPB4XCQyWRky25HRwdlZWXE43GGhoY4e/YsXq+XlpYW/uRP/oTm5mbZoioSJIFAgAsXLnD27Fk6OjowmUwLWkVEm0ZpaSnr1q3j4Ycfll4fIh6KRCK8+eabDA4OLoiHhJjR0dFBLpfjm9/8Jps3b6a6uhqtVkssFmNycpJIJML4+PiyYsbs7CyZTIba2lpaW1vZu3cvpaWlMmFWWFiIXq/nn//5nxkeHqarq4vVq1cvEhkSiQS9vb3s2rWLHTt20NLSQn5+PiaTCZ1Ox9jYGCaTiUuXLrFu3TrpiTSfyclJTp8+jd/vZ/Xq1ezcuXNBNYuCEmstJ2qIPYbw2gsGg/j9fnlNMRqNCzz1HmSEUXAul8Pn8xEOh6UHhmj1TaVSqFQq1Gr1XfEsux7Fw2yFixlCAfP7/YtEBWGGNzk5yZEjR+ju7sZms9HS0rIoKyjQ6/UUFhayfft2KioqFtx2M2KGXq+nvLycdevWsW3bNvl7m83G5s2bGRkZkRUR9fX17N27F4PBIL0DHnroIXp6enjvvfdk7+f8x3a5XDzyyCOUl5ezefNmqqqqFiima9euZXp6muPHjzMzM8PVq1fZvHnzsu+d8P4QxwDgcrmoqanB6XTS09PD8PAwiURigQlYIpFgYmKCrq4ubDYbVVVVVFZWKpNQ7jI/+MEPeOqppxb9fteuXQD8zd/8DX/0R3+04LaVVk4mju/QoUOy8kC0VUSjUQKBACaTCavVisPhuO/6OzOZDJFIRIoXiURCZkxEhYY45+90z6WCgsKdp7CwkA0bNrBz5046OjqYnJzk2LFjXLlyhZqaGqqrqykqKqKoqEiOu3a5XLIlYX4lajwe58yZM/T392Oz2dizZw8PPfTQourTiooKgsEgFy9epKuri3Xr1hGNRjGZTExMTPDxxx8zMTHB+vXr2bt3Lxs2bFjgi6HRaNDpdHJilcDv99PX18f4+DgFBQVs27aNXbt2LXr+/Px8RkZGmJ2d5cMPP6Szs5PKyspFYobX66WoqIi9e/fS0tKyoBVmfjw0NzfHwMAAW7ZsIZfLEY1GuXr1KjMzM5SXl/Pwww/T0tKy4L0qLCxkZmaGsbExLly4sORnY7FY2LZtGzabjdbWVtasWbPgGITg/vLLL+P1ehkZGZFTY+aTzWYJBALU1dVJ77H5x1JTU0NlZSWDg4PS40S0qwgmJiakwFRRUcHq1auVNgEl1rppUUPEXJlMBrVaTSqVIhwOL/AxMxqN2O12LBbLAydqzPfCEBUZoVBIjllNpVILzILvlmfZ9SgeZveAmJFIJLh06dIigybRwzQ+Ps7Vq1c5c+YMkUiEVatWsWvXrkWjXAVlZWW0t7d/4YyvXq9n9erVi4QQrVZLYWGhzAqIlo75IoIwnXI6naRSKWZmZha8rtLSUvbs2cOWLVtksOD3+xdcUMLh8IJ/T01NLXIxF8e51DGI22pra9m6dSsffvgh4+PjTE1NyfLMdDrN7OwsExMTeL1e9uzZQ2Nj46LHUbjz3KiEsb6+np07d94Tr+WZZ54BPq3UEH3eQv0OhUJyEcnLy8PhcMgJKPeyiBEOh6VwI5zsxUKZyWTI5XJotVpFxFBQeIAwGAxUVlbyF3/xF3R2dnL27Fn6+/vx+/309vbS398v76vT6SgtLWX16tU88sgjNDQ0UFpailarld5Zly9fZnp6murqamw2G5lMhpmZmUUxlMlkor6+nqGhIdxuN9PT01RUVDAzM0NnZyeRSITS0lI2bNiw6Nqbn5/P5s2bqaysRKvVyuv08PAwfX19xGIxioqKWL169ZJitF6vlybmojXm+mMUbcMVFRW0trYu2rgbjUby8vLQarVyapvIqgaDQbxeL0ajkVWrVmG32xe1H+t0OpqbmxfFc/Nf44YNG2hoaJAbwHA4TCQSWSBSiKlS8Xgcv98vK+quf73V1dWyTeb6YykvL2fbtm2MjY0xOjrKpUuX2LRpE3a7XU65m5qaoq+vj7KyMqqqqnA4HMp0OSXW+twx16FDh6SfhvhuCVHSbDbLSR1i4tz9PjZYvF4Rk8XjcXmOixHKwsZApVKtGBFDoHiY3QNiRiAQ4PXXX8duty+6LZ1OEwqF8Pv9mM1m2tra2L59O+vXr18wcUOUAqlUKmw2GyUlJV945rJOp6OiooL8/PwlbxPzy/Py8hYpm2q1Wo5IEheQ+UKEGHMWiUQYGxtjeHgYr9e7YGEMBAKMjIwQCoWwWCyEQqElF05xDFardZEAoVKpKC8vZ8uWLZw+fZrx8XEuXbokhZhUKsXAwADXrl1Dq9Xy0EMP0djYqAgZCrcFkd04ePCg7FE0GAwyaBQZKr1ej9FoJD8//57qExZ936FQiEgkIs2jxKhVUZmh0WhWXDuJgoLC7UeMS62vr8fhcFBfXy+nZgQCATwej0wwjI+P09/fz+joKENDQzzyyCM8/vjjFBUVoVariUajhEIhwuEwoVCId999l46OjiWf99q1a4yNjRGNRmW7Xzabxefz0dvbSzQaXTZm0mq1sudepVLJTbXP52NgYIBYLPaZ8ZZKpZJxkpgYEgwGF8VUlZWVlJSULClkq1QqOfElFovh9XpJp9NEIhFmZmbkMVRWVi5ZwaDVaikvL1/SM0zEUQaDgVgsxszMDIODg0xPTy9KIImRryLbvdSoV71eT01NDUVFRUu+H2VlZWzZsoXDhw8zMTHBuXPnWL16NXa7nVQqxfDwMGNjY8Tjcdrb21m1apUiZCh8KVFDJJKEJ4Q4d4LBoGzBt1gsaDSa+3IEcDQalaOnxch7EZvNb/NdCabrn4XiYXYPiBnZbBav10sikVjydpPJRFNTE6tWraKtrY0tW7YsUr2NRqNUsIVg8EWVRrVajcPhuGFpnxA2llo8l1uAotEoU1NTnD17lqtXrzIwMEAikUCtVsvXE4vF8Hg8xONxaRq11MKpVqsxmUzLtoUUFRWxbt06XC6XnHG/adMm8vLyZGZnYmKCvLy8z2zbUVC41aLGa6+9JvsRM5mMVMyNRiNWq1WOd3W5XCu6TC6bzRKNRolEIrL6QrwWUeopzt8nnnhC+QIoKDzggoaoQhCVAsIceGZmhunpaUZHR+nr66O/v5+enh7effddkskkZWVl7NixA61Wi9/vl6Z/fr+fEydOLNumF4vF8Pl8mM1mOekEPjWrDAQCZDIZGTMtG+Bdt8GJRCLMzs6SSqWwWCwUFRUtuQkSsZTFYpHXyuvjPK1WS0FBwaKxsUshpg1kMhni8TiBQIB0Oo3T6aSgoGDZY7DZbMu+vng8zuzsLBcvXqSnp4f+/n5ZTTs/xhTX+c8S2UVl7lKJOfi0CqSpqYmysjImJye5cOECzzzzDMXFxaRSKXp6ehgbG0Ov19Pe3k5tba1y0ijckpjr4MGDsjpUpVLJlte5uTl5fohWFLvdfk+3m4uEWSQSIRKJyIpglUpFNBqVI1bF9eJeqJJVPMzuATHD6XTyX/7Lf6G6unrZBaC8vFwuuGazedGi5XA4qKmpuamxNXeTkZER3nnnHQ4cOEA8HqesrIzGxkYKCgqkyZOozBgYGLhhYCSqQJbC4XBQV1dHY2Mj3d3dnD17lm9/+9sUFhYSjUa5cOECs7Oz1NfXU1FRsewCrKBwqxHj60TWQK1Wy9Jhv9+PRqORFVl5eXkrTtQQpsRCuBBqv9iYBAIBtFot6XSaffv2KR+4goLCshtgMVK1rKyMlpYW9u7dy8jICKdOneJf/uVf6Orq4vXXX2ft2rVYrVbpsq/VarFYLJSVlS27yRaG5NlslpaWFux2u0yEFBUVMT09/aWO32AwYLfbl0zgiGzvrWod1Ov1SyaqRGXuZ12vrzeYF4yPj/PBBx+wf/9+QqEQpaWlNDU1UVhYuMB40+fzLVv9cv37sVxVsMFgoKioiM2bN3P8+HGuXLkizU9TqRRdXV243W7Ky8tZs2YN5eXlygmicEtFjUOHDpHL5VCpVGSzWVKpFKlUCoPBQCQSwePxyMlzDofjnpqAMt+rLJVKEYvFZHtNJpMhnU6TSqWkqbLS6qtwS8UMg8FAa2srTU1NS95uNptvqNqLUsGV3CaRy+Xo7+/njTfeYHR0lO3bt/Od73yHkpISLBaLVELdbjc2m41jx44tWZFxfaCwXAWJuH3Tpk14vV6uXbvGxMQEDocDj8fD8PAwRqORrVu34nQ6lXJGhbu2wP7+978nlUpJkXJ+f6fIIIhWFDF68G4hSrsTiQTpdFoenzCVSqfTADz++OPKB6ygoLBAUBATSuZvvtVqNXq9Hr1eLzf+4r+//e1vGRgY4PLly8RiMYqLi2Ubg9VqpaamhmeeeYaysrIbHkdhYaGsajWbzRQWFjI3NyePcTlBQHj9iFaT+VNWwuEwbrebioqKRRufdDotfcOE4PBlevPtdjsVFRXSyFz8hMNhZmdn5bX3+rhLTCZYisHBQd588016enrYsGEDzz77rPTfEDFZLpdjcnKSAwcOEAqFPvMYP+v1iQTUhg0bGB4e5sSJE/T29lJcXIzNZuPq1avEYjHWrl1LUVHRfWWKrbAyEO0nBw4cQKVSSaFPjCVVq9XE43F8Ph8Oh0MmklayqCGEC+FXJmKxWCwmPdpEpbtKpbqr41UV7mMxQ3g/zPfAuB+DmWAwyMjICB0dHTgcDtra2vj617++YMKIEHf6+/vRarVLOmYvFWQsh8lkYsOGDfT29tLZ2cnVq1dlqdXMzAxr1qxh+/btN1XiqaBwuxCO4gcOHECr1ZLNZsnlcjJzkEgkMBqNBINBQqEQdrv9jldqhMNh2XPp8/mIxWJoNBpZlSFQ2kkUFBTmr9Fzc3NMT0/j8XgoLS2lqKhoSU+u+dhsNioqKrBarbIVIp1OS08hMV5Rp9PR1tZGU1PT5xIKrFYr5eXlDA0NEYvFCAQCS1ZYpNNpxsfHSafTUgCZb8oZCoWYmpqiuLh40YYnm80yPT0tvSZEf/4XxWw243K50Gg0aLVabDYbGo2GcDjMzMzMkoJFJpPB4/Es8uoQTE9Pc/78eQBaWlr4+te/Tn5+/oLqilAoRCAQuCUJH4PBQEtLC52dnZw4cYJLly6Rn59PTU0NY2NjWK1WNm/ejMPhuO9NGRXuHs8++6z898GDBzGZTFJ0jUaj6PV6ksmk9KlxOp3k5eWtKFFDiBiidSSZTKJSqaSxvHg9YpiEEpsp3FYx435lvqeFCGg8Hg+pVIr8/HwcDsciISOVSjE1NUV3dzfRaPQzzXhSqRSzs7OfmSnQarU0NDRQXV2NWq3mk08+YWZmBqPRiFqtprq6mrVr1yoZAIUVtcCK9pN0Oo1er5c9jsK4KRwOS+O32y3ECbMs0VYi+tRFFYZok9FqtXzta19TPkQFBYUFYsDw8DAffPABJ06cYOvWrezYsYPt27djMBiW3bDGYjFmZ2dJJpOLfMA0Gg0FBQUMDw8zPDzM5OQkpaWli6rWcrmc3IgLc3QhAhcUFLB69WrOnz+P2+2mu7ubtra2Ba0VyWSSubk53nnnHdLpNDU1NezcuZPCwkLWrl3L+fPnCQQCjI2N0dzcvMgQPZ1O43a78fv9GAwGVq1adVMVJDcrxpSUlGC1WvH5fLjdbmKxGOl0ekHcFI/H6e7uZmxsbMnHSSQShEIhCgsLKSgowOl0Lvj7dDrN6OgoJ0+elF4an5VAuhE6nY7a2loaGxspLCyko6MDrVaLx+PB7/fT3Nwsx8QqKNwJ5vtqiPYTUbERjUYxm81EIhE56vNuixrxeFyKF6ICY/50EtGGJ9qXlxq/q6CgiBmfY9EqKyvD6XQuMqESRjzCBFEsmrOzs/T393PlyhWi0Sh2u12ODbp+okkul5P9bsuh0WgoLCyktraW2tpa+vv7cbvd5OfnU11dTWNj46LFW0FhpSyur776KrFYTIoFwp9CGGyKiT/CuOpWixjiJxaLSfM5IaiIc1aj0Si+GAoKCksiJnqk02m6urpkoO1yuaitrV3kASE2Eb29vbzzzjvMzs5it9upr6+XbQ96vZ6NGzfKdtGLFy/icDhYt26dbL0QJnjnz5/n2LFjWCwWtmzZwiOPPAJ82nIiPDQmJyc5deoUlZWVCxIsU1NTXLhwgcOHD2Oz2dDpdCSTSUpKStiwYQOvv/46U1NTnD59mra2tgWG5LlcjnA4TF9fH9PT01gsFpqbm2+ZmKHT6XA4HJSVlTE1NSWntrhcLlwu14KY6tSpU/T09CwdvGq16HQ6gsEgwWCQeDy+4D30+/1cuXKFjz76iFAohMlkkr346XT6M1uBl0OM6W1tbeXjjz/m/PnzssS/rKyM6urqe9qAUeHej7vE91rEWaIqVZid22w26fVzpxAJJb/fTzwelwkv0eabTCbl9VOJyRQUMeMWoVarcTqdWK1W2UpTVFREQUEBoVCIoaEhOjo6sFgsZDIZAoEAAwMDjI6O4nK5MBqNZDIZfD4fIyMj8nE+T1ZApVJhMBioqqqitbWVt99+m8nJSUpKSti9eze1tbWKkKGwYvnWt74FwCuvvLIgaBQiQigUQqPR4HA4CIfD2Gy2L53RCofDso1EZADmTykRrtjZbFYu/goKCgrLbZZLS0upr6+ntrZWep1kbpcAACAASURBVCVotVrWrl0rjSbFei+mdJw7d4533nmHaDRKY2MjO3fulNc2s9nMtm3bcLvdjI2NceLECTl+UUx1S6VSXLt2jaNHj3LkyBFaWlqoq6uTx+V0Olm1ahUNDQ2MjY3x4YcfUlFRQX19PTabjUQiQXd3N0ePHuXy5cusW7dOTgyx2+2sXr2ahoYGenp6OH36NE1NTczMzFBYWCiF59HRUc6ePYvf76exsZGmpiaKiopuWXxlNptpbW1lamqK/v5+PvzwQyKRCLW1tWg0GoLBIMPDw/T39+Pz+ZZ8HKfTSV1dHb29vfT39/PJJ59QWlqKWq0mHA4zOjrKlStXyGQyWK1W6QMyMDAgPU6uTzTdDGVlZWzcuJETJ07IMbdCyFCqMhRWQtz16quvypYuYaAZCATk6PlAICATSberultUl8XjccLhMLlcDo/HQzQalbFgMplErVajUql47LHHlA9Q4c6JGWKTbTKZSKfTX7o3UKPRoNfr5XQPYU613AJoNpsXlHiK3lOj0YjFYkGr1S55TPOfR6/XL9tDKQy2xMkIn2ZTamtr2blzJxcvXuTSpUtks1mKiopIJpN4vV7cbjdtbW0899xzRCIRhoaGmJyc5NixYySTSRobG+V4txsdw/UL55YtWzh27BjT09PYbDaam5upqqpSvr0KK54//uM/BuDXv/41uVwOk8lEKBRCpVLJuenhcBi73Y7BYJBO3J/HEFj0XQYCAbxe7wJHbFFFJcYxP/3008qHoqCgcFObbpvNxqZNm4jH4xw6dIipqSlef/11PvzwQwoLCyktLcVms0kTvomJCdlC2tLSwp49e/j6178u20j0ej1tbW3MzMwwPDzM+Pg4R44coa+vj/LyckwmE6lUisuXLzM5OYnNZmPLli3U19fL4zKbzVRVVfG1r32Njz76iCtXrvDyyy9TVVVFWVkZkUiEwcFBent7qayslK0xVqsVrVZLUVERjz76KEajkc7OTg4ePEhlZSVVVVUYjUY8Hg9DQ0OMjIxQVVXF7t27qaurW7BR1+l0WCwWjEbjshNAhNmoyWSS9xPXdbPZzCOPPEIoFMLtdvP222/T3d1NbW0tNptNxlSVlZXU1dXh9XoxmUwLnqumpoYnnniCVCrF8PAw//7v/059fb0UQ8bHx6mqquIb3/gGDoeD3t5e3G437777Lh6Ph1WrVsnPRMRkNxPPFhcXs2HDBvLz83G73czOzvLkk0/S3NysnDQKK07UEOecVquVFUzJZBKn0ynHudpstls2uUh4d0SjUfx+v0woCR8PUYkhRIwnn3xS+cAU7ryYIVowGhsbyWQyX7r/ymQyUVxcTFNTE5WVlZhMpiU3+Vqtlrq6Olwul3TFFiJFXl4eVVVVxONx8vLyFpX5CRGhpKSENWvWUFZWtmy/vsvloqmpacHrUqlUrF69mu9+97u4XC4mJiYYHh5mbGxMGmrt2rWL9vZ2GhoaCAaDnDlzhu7ubjmJpLq6GofDQVVVFcFg8DOPYT5FRUW0tLRIA66CggJaWlrkrHsFhXuB7373uwC8/PLLZDIZGZSKKopAIIDJZCIYDErDKqvV+pmihqi4EKNgvV4vmUyGcDgssxE6nQ6dTqdUYigoKHwhQaOqqoq9e/dSWFhIT08PV69eZXZ2lqmpKennoNVqMRgMGAwGGhoaqK2tZePGjdL3an684nK52LZtG2azmfPnzzMxMcHMzIyMJywWC2q1mo0bN9LU1MSuXbsWrPfCkPOxxx6juLiYsrIyRkZGGBoaYnBwELvdjlarZcuWLezevZu2tjZZmQGfThZ57LHHqKiooKGhgYGBATweDzMzMzKbazQa2bNnD+vXr2fr1q0UFhYuiMtcLhetra3U1dXhdDqXDi61WhwOh2yJnW/OqdfraWlpIZPJSFHF6/Xi8/mkQLRq1Sr27t3LlStXyOVylJeXL3iuuro6nn76abLZLENDQ/j9fk6fPi2NVtvb22lra6OxsZGSkhLOnTvH+fPnmZubY3x8nKKiIgoLC28qLpyPxWKhvLycmpoapqen0el0bNq0iYaGBuWEUViRosbLL79MLpcjGAxKL0DRfhsOh+XkSYfD8YWri5LJ5AKPslgsRiqVIpPJyN+LytxMJqMklhTurphhNBppb2+nsLCQbDb7pScTuFwu1q1bh16vp7y8XDpeX4/ZbGbv3r1Eo1HKy8vloiNEjmw2S2NjIzU1NYsWJCF4tLW1odfraW5upri4eMnjqa+v56mnnqKwsHDBfYqKiti6dSs6nY7R0VHcbjeJRAKr1UppaSmbNm2Si+HDDz9MUVERtbW1AFRUVGC326mrq5PH+1nHcL0QI7IFBQUFNDc3U15evsDs60HgwoULAKxbt045a+9hvve97wHw0ksvodPpZDWWGOkqeigjkQgWi0VmDuaLGtFolGAwKEeter1eotGo9KARfjYGg0ERMRQUFL4UJpOJqqoqnE6nbLmYnJzE4/Hg9XpJJBIYDAYcDgf5+fmUlZVRV1dHU1PTkiXcGo2GyspKXC4XZWVljI6OMjo6ytzcnBQA8vPzqaqqoqGhgdLS0kVJI51OR11dnUxw9PT0MDMzQygUkmaYIi7Jz89f0JIq/tZut1NSUiIrFkQ7h91uX+DXVV1dvWSc9Mwzz1BYWLigauT6962srIzHH38ck8lEfX297NPXaDTk5+ezbt06OaZ2enpaHn9RURFVVVVs3LiRgoICDAYDNpttwXPl5eWxdu1aYrEYY2NjTE5OMjc3h9FolK+9urpaZqDz8/MpLy8nkUhQUlIiJ9PMjwsLCgpu+H0Qgo9Wq8XpdFJcXExtbe0Np9zcTi5dugTApk2blBNWYdm469VXX5VVEel0mlAoJP1kzGazTCbZ7fabNmhPJBJEo1EikQgej0f6osXjcVmlIUZDK9WxCitKzHjooYdob28nl8t9aTEjLy9PKvwiIyDKkERFhZjx/cQTT5DNZhfMdNfr9TQ2NlJVVUUqlZKllNcvPi6Xi82bN9Pa2orBYFjWpKm5uZmKigp5LPKN+v+DjG3bttHe3i7noos2F7PZjFarRaPRUFJSgtPppKWlBbfbLS8atbW1NDQ0kEqlPvMYBNlslsnJSS5cuIDf76e8vJxt27Y9kONYPR6P/L4o3Pt8//vfB2D//v0YjUb0ej16vZ5sNovH4yEej+P3+/H5fNhsNpxOJ3q9XooXfr9fihmiCiOTycjzcP74MgUFBYUvg0qlwmq1UldXR3l5OalUSl5zcrncgmBdiLSfVbWq1WqxWq20trbS1NREIpGQ3kLCNFlcE+e3VojnFF4PRqORpqYmamtrUalUss1WHIe4Hi6F0+nEYrHQ0NCwwKhcPL/BYFi2hWS5OGk+ZrOZ6upqCgsLZSx3/XvidDppbW2lvr5eVoek02kpZpjNZhobGyktLUWj0Sx6LoPBQHt7O2vXriWVSklfJK1Wi9lslu28LpeL9vZ2Vq9eTS6Xk69PGK2LuPBmKo39fj9DQ0OMj4/jcDjYvn07LpfrrnqYiWkty1XJKCjAf1Zq7N+/H51OJ1s9RFuImD4XCARkpcZyBu1iCkk0GsXn8y2oykin08TjcbknUqlUPPPMM8oHoLByxAyxqN8qhHIXCARIJpOLFqq6ujo5jnSpC7XIwN5oERJK+o2EAKPRuOzirNFosFqtN3z9orQ9k8nIdpNMJsOPf/zjG3pdZLNZOWM5Fotx5coV3nvvPVKplCxdfdDEjPmj2RSvkPuL5557DvjUU2N+X3UoFJLjXU0mE263W24cxOIpAuRkMkk2m0WtViuVGAoKCrcFtVp90xvem0H4SdysAZ8YLR0IBAgGg4tuLy4upqSk5LY9/83GSZ8nNpt/DIODgxw5coSxsTG++tWvsmbNGhkHLvcYKpVKeqndTPy31P2EZ8Zy5HI5GZNls1muXr3K4cOHmZqaoq2tjU2bNt31StmRkRHgUx8RBYWbjbt+85vfSNFUq9XKkc5msxm/34/f78dut5OXlycrZEOhEOFwWIoeYtx9LBYjl8uRSCRQqVTyMRURQ2FFihm3Gp/PR1dXF11dXYRCoQW3OZ1Ovve9793REUK3kng8TkdHB8eOHSOdTvOXf/mXNxQyRDZ6dnaWyclJjh8/TkdHBzU1NbS1tVFXV3dX50TfDf7whz8An5a2KmLG/Ynw1HjxxReloW8ul5NeGFqtVo7zyuVyUu1PJBILFmcFBQWF+5F0Os3IyAg9PT309fUtun379u23bHzq3UDEO5cuXbqpFtw7gdic+Xw+pqenmZub4+TJkxw9ehSj0UhjYyNr16696zHqwYMHAdi9e7dyoijcNN/5zneAT6fOCZN0Yc6eTCalYXs0GmVqagr4z5Gvwq9MVMam02lsNhtarVZWgCgoPDBiRigUYnh4mDNnzuDxeMhkMszNzRGNRikrK+OJJ55YMQvb7UaMZOvs7OTChQsMDQ0xNzdHYWEhX//619m6dasc8/og8X//7/8FULLuDwA/+MEPSCaTvPTSSwCyGkOUcmcyGVQqlSwl/ta3vqWMw1NQULjvyWQyTE9P093dzSeffCLjJ5/PRzKZRK/X8/jjjytv1C0km80SCATo7Ozko48+Ynh4mKmpKXK5HLt27WLr1q2UlZUt245zJ9i/f79sw923b5/yoSl8bsTUuf/4j//AYDDIavhYLEY0GmVmZkbGX+l0mlQqJS0ARNubWq1WqjAUHlwxw+l0sm7dOoxGo3TWPXz4sKxOEN4UdwIxivWzJiiIjRXwpcfSLrdwDg8P09HRgV6vZ82aNaxfv549e/ZQUVHxwAkZ+/fvp7+/H4Dnn39eOWPvY4QbdiQSYdOmTQQCAc6dO4darZbnmmjDqqmpoaioiKmpKWKxGBaLRU4BUFBQULjvgjWtltraWnK5nKzA6Ozs5IMPPsDj8SyqbL0TG/0bXW+z2Sy5XE725t+LYkYikWB0dJTTp09jMBiorKykvr6er371qzQ0NNzQ++x28/d///cA/PCHP/zSHnYKDzZ/+qd/CnxaISu+/4JMJiOtAMREEq1Wi0qlkh5oCgoPrJiRl5dHc3MzlZWVpNNpPB4PV65cYXJy8o4eRy6XIxQKyT78pZR2cR9R2u50Om+p6ZMwoxImVS6Xi5qaGpqamqiurn7g2ku6urr467/+a7lQKy0m9yepVAqfz0cgECAcDstsQDqdprGxkVQqxfDwMLlcjoqKCunEPTs7SyAQwOVykZeXh9PpxGQyYbVaFVFDQUHhvkKn01FVVUV+fj5r166Vv+vo6GBmZuaOHouYYDDf+Hyp+4TDYdLpNGaz+Z6soFOr1ZhMJqqrq9m5cycul4vS0lJqampYs2bNDb06bjd/+Zd/KZM9P/3pT5WTROFLn9ehUIjt27cTDAb58MMPFySTRKUsfJp82rNnD06nUxqG3k0TXAVFzLir6PV6aS6Ty+UwGAxYLBZpoHk9brebiYkJTCYT+fn5FBUVLbqPGPM4MTEhx2e5XC50Oh2pVIqJiQnC4TDZbJbKykpisRgTExO43W4KCgpoaGggLy9Pjoz0eDwEg0H8fj+zs7NEo1HgP0eu2u12iouLMRgMXyr7IEamlZWV8fDDDy9wNL/b6v+dZmxsjL/4i7/A4/FQX1/Pz372M+Vsvc8QU37C4TA+nw+/308wGJT+GMlkUs5D/9u//Vvg00odYcSXzWalEVU4HCYYDGK1WjGZTLhcLmw2myJqKCgo3BeIqW4mk0lmTAsKCmRJ+FJx0MDAAOl0GqvVSnl5+aKESC6XIxaL4fF4mJubIz8/X8Zj8KmnmdvtJhaLkZeXR35+PhMTE8zMzBAOh1mzZg2FhYVYrVay2SzBYFBWifh8PjweD8lkEofDQWlpKRaLBZfLhcvluieqTMUklB07drB+/XppJKrX6++6T8b/+3//j1/84hcA/NM//ZOS7FH4wkSjUemDEY1GCQaD+Hw+aSg7NDS04P4VFRXo9XoGBwfl+Wyz2bBarXKKkILCAyVmzB9pBsjRYkIUEGWK4v/PnTvHr371K2pqavjKV77CE088segxQ6EQPT09vPTSSzgcDnbu3MnOnTvJy8sjEonw5ptvcvnyZeLxOH/+53/O+Pg4hw8fJhgMsn37dvLy8rDZbGQyGWZmZvjggw+4cuUKw8PDJBIJqU6azWaKi4tpamri8ccfp6Ki4ksp9fPdvx/kcsETJ07wzDPP4PF4cLlcvPbaa0r55H1EJpMhFAoRCATknPNAILBgNKGozhDGoAJh9PnSSy9JwVNUSsViMcLhMCaTiWQyKdtPzGbzA9eepaCgcP8xP0sqNtsiNhJTN8TtgUCAf/u3fyMYDLJmzRqee+65Rf5j6XSaqakpjh49ytGjR3n44Yd56KGHWL9+PQA9PT28/vrrjIyMsGXLFnbt2sUrr7zC8PAwer2eP/uzP8NkMmE2mwmFQly5coWPPvqI3t5eOaEuk8mg1+ux2WzU1NTw0EMPsXPnTux2+z0jaNzMFLs7RSAQ4L/9t/8mhYwf/vCH/OhHP1JODoUvJGKIiSSRSESOVp3vU5ZIJCgsLCQej2M0GuV+TbRgTU9P4/f7ZYWsTqfD4XDgcDgUUUPhwREzbmbTE4/H5fiw0dFRDh8+zPr162loaFjy7xKJBG63m+PHj1NYWEhlZSWbN2+Wt125coXjx4/j8/mor69nZmaGrq4urFar3BjlcjkmJyc5deoUb7zxhnTyLSoqwmKxkMlk8Hg8TE5O0tfXh0ajYefOnbS1tSnfqi/Im2++yc9//nOOHDkCgMvl4tixY7S2tipvzn0iYoTDYSKRCMFgkLm5OSKRiJxQIu4TDAZv6IYtejT3798vA/pYLEYqlSIej8s55yLQdjgciqeGgoLCfUs8HicYDGKz2dBoNMTjcU6cOMHs7CzJZHJJcz5RTXH16lXeeecdCgoKqK+vl7e73W4+/vhjLl26RCgUQqPRcO7cOQKBAFVVVfLanUgk6Ojo4OjRo3zwwQckk0nsdjv5+fkAhMNhRkdH6evrw+v1otFo2LFjh5Kk+ByMjY2xf/9+/s//+T/S8POHP/yhFDUUFG4WUREbiUQIBAIysSQqt5LJJKlUilQqJSeeXM/vfvc7mUzKZrOk02k5yjUWixGPx7FarVgsFkXUUFDEjJmZGYLB4BeahX4jYrEYFy9epKCggK9+9atUVFSwdu1anE4nGo2GkZER3n77bfr6+qirq+ORRx6hvr4ei8VCMpnk2rVrnDx5kuPHj/Paa69hMBhoaWlRssCfg8ceewyA8+fPywUa4NFHH+WVV15Rgp37AGFs6/f7icfjxONxWcoogmHhkv0nf/Inn+uxRaXGwYMHUalUJJNJkskk8XicZDJJQUGBFDhsNpss01bOUQUFhfuJSCTCzMzMbbu+TUxMcPnyZZqbmykoKKC2tpba2losFgvRaJQPP/yQTz75hGAwyGOPPcaaNWtk64PX66Wvr48DBw7w8ccfk0gkaGpqwm6335PGoHeK/fv38x//8R/4fD7Onj0rf+9yufj5z3+ujCRX+FxxmBinGgwGZVtJOByWFfKiEiMSiSyqir0eEavt379fTjQRXmcizrPZbJjNZoxGIw6H44Hz/VNQxAx58gmF73Y9fiKRoLm5mT179mCxWLDb7eTl5aHVakkmkyQSCaqqqti+fTv79u3D4XDIEqvVq1eTTqfp6uqir6+PkZERmQ1WMsA3h6jCmM///t//m5/85CfKm3OPk8vlpBeGyAJEIhGSySQ6nU5WQcXj8RsunDdCjO09cOAAuVyOVCqF1+uV5nNGo1FWfVgsFilsKOepgoLC/UAqlSISiSyYQHArSafT6PV6nnrqKSoqKrDZbDidToxGozT7NJlMtLa28uSTT8rED3ya6a2qqqKzs5NLly7R2dkpR8oqG5zlGR0dXRQjNTY28t577ykeGQo3fV0QFe7RaJRwOMz09DSpVGpBO38qlSIWi8kxrTeLENQOHDggx7bOTyil02mi0SiJREJ6aijnvMIDJWbkcjnS6fSSRqC3Ar1eT01NDS0tLbJHdD7V1dXs27cPvV5Pc3PzgvJLgPz8fFatWkVjYyNjY2PMzMwwNzdHSUmJcrLeJI8++ijwaWWG1+sF4L//9//O8ePHeeGFF5QF+x7F6/USDAYJBoNyQolY2GKxGFqtlkwm87kXzhvx7LPPAnDo0CHS6TThcJhoNIrFYiEej6NSqbDZbKTTaRKJBEajUanUUFBQuOcR1W23S8xwuVw0Nzezfv36Rd4bZrOZHTt20NraisPhoK2tjby8vIXBplbLmjVruHbtmjQRnV/arsCSMeijjz6Kz+fj3LlzAPT399Pe3s7//J//k//6X/+r8iYpLEkikZBeGMFgULbfplIp0uk0gPS0SafTXzqhJGIvIWqEQiHp4zM/ORwMBjGbzdjtduXcV3gwxIylFutbuVAbjUba2tqW3TDX1dVRVFQky+H7+vpIpVKyvx9genpazlqOxWJ4vV4KCwuVb9ZNMj/r8MYbb/Dzn/+cd999lyNHjtDe3s7Ro0cVz4x7CL/fj8/nw+fzyaqqZDJJNptdEGyLSorbxfz+8EOHDklvDmEurFaricfj6PV66auhGIUqKCjcD4jWvVtJaWkp7e3tstpiPiaTiT179hAOhwmHw8zOzjI9PS03TQDBYJBUKoVarSaTyciNVkFBgfKBLcNzzz0nM99jY2O89NJL0jPjRz/6EZcuXeJf//VflTdKQSImk/h8PsLhMIlEQsZi84UF4Xch/MduFULUeO2116ShqNlsltVbwlA3mUzKtl9F1FB4YMQMYTKVSqVu2WPq9Xpqa2sXZRkEKpWKXC7H6Ogo165dY2pqSm6KBFNTUwwODhKLxaQJznyxQ+Hm2bdvH/v27ePEiRM8/fTTeDwe9uzZowga9wCBQECWL4pFK5lMyvMolUrJ82M5Q6nbLWy89tpr8pxOpVKYTCaMRqMsvxRjoa1WqyJqKCgo3LOIkvFbmfzJz8+nrq5u2Y2HVqslEAjQ3d3NxMQEwWBQjrGHTzPFPT09uN3u2151ez9SVVXFT37yE370ox/x4x//mBdeeEGafyqChkIkEpGJJCFgRKNR6WeRyWSIxWJoNBpyuRzf/va3b+vxfPOb3wQ+TSYJLzNRBZvJZFCr1SSTScLhMGazGZPJdFu8ERUUMWNFkclk8Hq9hEKhW/fitVqcTueSI7dSqRT9/f2cOnWKixcv4vV6SaVS0jND4PP5iEajt62080Fk586dXLx4kWeffZZz587x7LPPcvbsWcUMdAUiyganpqakcVQ0GiWVSskRxkLMuN2L580urm+88QbRaFSWPRqNRux2uzz+eDyuGIUqKCjcs8RiMebm5m5p8sdsNuNyudBqF4aNwuD55MmTdHZ2cuXKFVn1Nj+2SiaThEIh6ZWk8MVwOBz84he/oK2tjeeff55f/OIXrFu3ThnP+oASCoXwer1SxIhEIvIcy2azMnlzK1pJvggimXTo0CE5+USMfjUajRiNRmKxmKySFb4aCgr3jZihVqulWUwul5Ml6zfi85RY6vX6RYtzOp1mbm6OU6dO8e///u8EAgEqKipoaWmhrq5ugXrY19eHz+dDp9Mp36ZbSFVVFb/85S955JFH6O/v58c//rEygmwFIaoZEokEc3Nz+P1+YrGYNNQUCxZw21tKPi/79u0D4J133pHll4lEAq1Wi9FoJJvNEo1GMRqN2Gw2RdRQUFBY8ej1eiwWixzLGo/Hb6pK9GbbdzUaDXq9ftH0kUgkwtDQEL/73e+4evUqmUyGDRs2UFdXR3l5ubyfqNabm5sjGAwqH9iXRLSZvPDCCzz//PN84xvfUDzGHhByuRzRaFR6kwlz9fk+FWq1Wrb33mjU/Z0WNcToVyFmaDQaXC6XrNQQJu2KqKGwIsWMXC4nSx/VajVGo3HJaQJiAdZqteTn52O321Gr1eTl5S1ZRXE9n8fVe6mxYOl0mqGhIbq7u+nv72f16tXs2rWLffv2yRnu8g3Uajl//rwyXuw20Nrays9//nO+//3v88ILL/DTn/5UWaxXgIghyocjkQh+v5/Z2Vm0Wq1cPEWrleidXKmIscBvvfUWfr8frVaL1WolHo+j0+mwWCwLjEINBsMi4VNBQUHhdiBKswF0Ot2y7R3ZbBaVSoXFYqGgoACtVovJZMLpdN7wepXNZqWYezMsFed4vV66u7u5fPky8XicDRs28K1vfYva2toFmxGfz0dPT49yDb2F/OIXv+CDDz5gcHCQ//W//peS8LnPEa0i4sftdsukkkggZbNZ+bMSYzAharz11lvSpF34Dmq1WjQajZyIIoQNs9ms7LEUVo6YEY1Geffdd/H7/eTl5fHII48scrwW9xP9VXl5eTIzarfbb6qnKhwOy7L3L0I6nWZycpLp6Wmy2SwbN25k27ZtrFu3btF9zWYzgUBggY+Gwq3jueee43/8j//B4OAg//RP/8Q//MM/KG/KXQqsRQuJyAaEw2FZASWM3eLx+F1vJ/m8PPHEE3JxFZNW0um0zB4IcVSn02G322UmQUFBQeF2MTAwwCeffIJOp2PNmjVs3Lhx0X3EtUmtVmO1WmUbrMFgWNQSu9zmaHp6Gp/P94WPMxgMcu3aNXw+HzU1NezevZtNmzYtMkI3GAxyZKPCrePv//7vZcLnZz/7mdKOex8ixquKOCwYDMoWd41Gg0ajkca6wIpPJM2Pu95++21ZDa/RaDCbzbLy12QyEYlEcLlc6HS6ZRPgCgp3VMyIRCK8/fbb9PT04HK5qKioYPXq1dIdOx6PMzs7i9vtBqC8vByz2SyVfNFTZTAYCIVC0txGLNi5XI5kMsm1a9e4ePEikUjkCx1nNpuVvfPLmYQKwWNkZAS3262IGbeRv/mbv+H555/n0KFDiphxF0QMMVZ1/rhVMdVHlCivBE+MgGUXTQAAIABJREFUW7W4Hj58WIozItuhVqsxGAyk02k5+cRgMKzIhbWrq+szy7iHhoY4efLkgt/Z7XbFZFdBYQXR29vLSy+9RCqV4qmnnqK2tlYKFMKnwu124/P5KCoqoqCgQFZvaDQajEYjZrNZ3ldMlRLXrEwmQzAYpLOzk9HR0S+1RghhOz8/n/r6+kVVJH6/n4GBASl6KNMLbh3PPfccf/VXf4XX6+WNN96Q008U7g8RIxaLEYlECAQChEIhGX8lEokFMVgul1txLb03w+OPPw7A73//e+BTvx9hWJpIJNDr9eRyOfR6vayQtVgsiqihcPfEDJVKhV6vJxAIMDU1RUdHB0ajkdraWgAmJibo7Oxkenoam81GS0vLop4ps9mM0+lkenqa8fFx5ubmsNlsqNVqUqkUXq+XgYEBuru7Fzhpf97jFGpnLpeTFxCRUchmswSDQT766CMuX74sjQ7T6bQs2TQajcq36xbxjW98g+eff57+/n7GxsZWbKvJe++9x9DQ0LK3nzx5cpG3Sl1dHXv37l1xryWRSBCPx4nFYgSDQQKBAMFgUAbEqVRKlgPeiwvoZ/Hkk08Cn3pqiNnsOp0OnU5HKBSSGVCTySTLv1dSpcaLL77Iz372s2Vv/8d//Ef+8R//ccHvfvzjHytCoYLCCkKj0aBSqRgaGuLSpUt0dXXR3NwsW+F6enoYGBggGo3S1ta2wJ8CPm2BdblcDA8PMzIywszMDMXFxZhMJhnXjIyMcOXKFcbHx7/wcarVapkZTiQSBAIBotEoer0e+DTx09vby7Fjx/B6vdL8T8RKqVRKaT35kjz77LO88MILHD9+/IEQM+6nWOuz4q94PC73H6ICXCRORRXGvdDSezM89dRTAPzhD38gk8nIdmWz2YxarcZkMkmjUFG5r1RqKNwVMcNoNLJ161ampqZ49913ef311xkdHaWpqQn4dI72hQsX8Hg8bN68md27d2Oz2RY8RmFhIWvXrpVTRn73u9+xatUqtFotfr+f/v5+hoaGKCgoYGJi4gsdp06nk+ZVmUyG06dPo1KpZKm53+9ndHSUS5cuEYlE2LBhAydPnmR8fJxTp04B0NjYqPR43SLmixcrWcwQfavL8fbbb/PRRx8t+N1Pf/rTFbXAijLGcDhMNBolHA4TCARIpVKy/Uso5aL38X5FeGq8//77slLDbDYTDAYX+GiIcuqlzITvBj/4wQ8+U8xY7m8UFBRW1rq3c+dOBgcH6ejoYP/+/WzYsAGbzUYsFqOjo4OOjg7MZjM7d+6kubl5URzT3NzMtWvXGB0d5fe//z3Xrl2jsrKScDjM5OQkfX195HI5bDbbF07+uFwuGhsbsdvtjI+P895775HJZCgoKABgfHyc/v5+ent7qa2tJZPJMDIywvnz5zGZTKhUKpnQUvhi1NTUADAyMvJAvN77IdZaCmFIHovFCIVCC+IvUQ0rpsPdb0kkwTe+8Q0paggz40gkgtPpRKVSYTQaicfjWK1WLBYLRqMRnU6ntP4qYsadFzNEv9e1a9fw+/10d3cDEAgE8Pv9rFu3jt27d7Nx48ZFlRnV1dU8+uij+P1+vF4vr7/+Oo2NjZhMJlKpFIFAAKfTyc6dO/F6vTgcjgXqnegtdTqdy2YEdDodDQ0NbNy4kb6+PmZmZjh58iRTU1OYzWai0SihUAibzUZzczMOh0M6CZ85c0Y69NbU1NzwuRRuPmDyer34/f4Ve4w7d+78zAyXmAF+/d+sBDKZDPF4XC6eYgGJRCILFlKdTidHnD4ofPWrX5WihjA4zWQyRCIRWS4t2lBMJhNms/muLqytra3U19czODh4U/evr69XWkwUFFagmPG1r32Na9eu0dvby5kzZ5icnJTtblNTUxiNRr7yla+wfft2uaEVmEwmduzYQTgcJhKJcOLECUZHR6msrCSXyxGJREgmk7S1tWEwGLhw4QIWi0VWVADSe8Plcsl24OvJz8+nra2NHTt20NvbS2dnJ/F4HKfTiU6nk73wdXV1NDU1cfnyZY4cOUJ/f79shSkuLr6p51JYGuGTsZLjIyXWWhoxGCEcDhMKhaQ/hmgnicVipNNpGVPcryLGcqLG+/8fe+cVG1d63v0/p/feWIbDNuwiVShKIkVJq5W0Wa1kebvXNhwYBpwAyUWAJAjiXCRI4AsnF4ETBPmcZBEbThwbu/HaK2/TciXtSpTEJpGU2MlhnV45feZM+S70nfcjxa4lVVbvD+ANZ86Z09/nPO/z/P+ffQYul4tYLEZaT/h8PhKJBFKpFMRiMXg8HuRy+ROZ1HA6nRvqBPn9fszMzKx6Vy4sLKQPtic1mcHj8VBcXIyTJ09Cq9Xi0qVLRI0XuN+3bbVaceLECTQ1NUGv168qFTObzTh9+jQCgQBGR0fh8XgwNjYGlUqF0tJStLW1obCwEFwuF/Pz89BqtdDpdGQ9fD4fxcXFqK6uRjabXbN3k7UJOnToEDgcDr744gt4PB5MTk5CKpVCq9WipqYGLS0tKC4uBpfLRSgUwsTEBKLRKEKhEKni2Oy3KFvjwIED+PTTTzE0NESsNZ80rFYrDh06hO7u7i19/9ChQ7BarY89iZHJZJBIJLC0tIRAIIBYLEZaplg1/Vwu98wMopslNb744gsAIC03Pp+POJ+wKtyP2/3klVde2XJ1xrN+XimUJxGFQoH6+np897vfxa1bt3Djxg2k02ki+ldVVYXGxkZSlaFQKFYFxIcOHSLPd4fDQWy0i4uLUVFRgerqauj1esjlcqTTaRQVFa1IJCgUClRWVqKgoAAmk2nN7RSLxSgrK8Nrr72G3t5e9PX1weVywe/3Qy6Xo7i4GHV1dWhuboZer4fRaEQmk4HL5UImk4Hf70cmk9nSb1HWprm5GQDQ29v7TOzv0xhrPQjbrstWwsZiMaKPsdxhiNW5eVbHaTbuAu63F2UyGdLSFggEUFBQQFpRstksRCIRaQF+Evj444/R2dm57ucXL17E+Pj4iv+dOnUK3/3ud+mD7UlNZhQUFEAoFKKsrAwqlQpqtRp+vx+JRALAfT0MnU6Huro6aDSaFTMELFKpFOXl5Th79iz27t1LXr6kUimMRiOqqqogl8uRyWSIRofFYiEuKGKxGG1tbaiqqkIul4NGo1lzW/l8PiwWC5k18Hq9iEaj4PP5UKvVKCkpWfFbZ86cQVNTE8LhMFQqFYqLi7f8W5SvBgKBAF//+te3PMB+/etfX/Maf1QDKassH4/H4ff7EQgEkEqlVvQxZ7PZZ64SYzOOHTtGBlY2+GAYBjKZjMyiJBIJiMViiMXix9J+8rWvfW3LyQzaYkKhPIHBGY8HlUqFAwcOEGHNeDyOTCYDHo8HpVKJ0tJSVFZWkmB+OVwuF3q9Hi0tLZBKpSSGSafTMBgMKCkpgcViAY/Hg1qtRllZGUpLS1dob1gsFpw9exZLS0uorKxcczu5XC7kcjn2798PnU4Hq9WKUCiEfD4PsViMoqIimM1mlJaWQiAQgMvlQiqVkooNvV4PiUSypd+iUJ62WOtB2AkkVjg3FAohFAohnU6T2KGgoIAIe34V9DB2CrZN6PPPPyc6hdlsllQOCwQCojXypCQ11Go1fvGLX6z7eV9fH/r6+lb87/XXX6cne7v5hXw+n9/oC6xqLis2s16SgvU236pORDabRTqdJuKZ7Hq4XC4EAgE4HM6662JdSzKZDPFTZkWo+Hw+OBwO+Q67bTweD+l0GqFQCGNjY+BwONDr9SgvL1+3YoJVCmazp8FgEDMzMxCJRGSAFgqF5LeWb8vy32SPHRWreXjOnDmDTz/9FD/84Q/xgx/84IndzuHhYTQ2Nm7pu/fu3UNDQ8Mj3b58Pk+qByKRCAKBAHw+H5LJJPk/e0++8cYb9MLbAp2dnSgoKCAzBAqFgvShL28/EYlEjzSpodVqEQgENvxOZWUlpqam6EmkUL4EuxUnLX9mswE72zfPxjwCgWDD9bEVY8tdD9hYiRUZZYUF2QR2NBqFzWZDQUEBVCoV9Ho9pFLphtWlrAuc1+vF1NQU+Hw+TCYTioqKIJFIyEsFG1Oxx4rH40EgEJD/53I58Hg8Wsm6Da5fv46Ojg5yvTwLPOmx1lrvPOxzIhqNIhwOw+/3E7FPhmFW3PN0Emlzrl69Sio1+Hw+ib94PB4RZ2fb/h9XUiMYDKK+vh4ul2tL3zeZTBgZGYFaraYneBtsGlmHw2EsLi4iFoshl8utvRIej1QwsBcNn88Hj8dbd5DlcrmkWmLbGZj/V+Gx2WD34ItDJBLB2NgY3n77bSiVSpw8eZL0ai5/4LCD+vKkRCwWg8PhwH/913+RZbVaLYRCIdmetaAD8rOF1WpFRUXFhkrbwH1dg0dd9shmspeWluDxeBAOhxGPxxGPx0lPH01ibB92tqCzs5O4n/B4PGQyGaK8nUwmIRQKIZPJHpn7CatwvxEnT56kJ5BC+ZLsVpzExjsCgeChZ5bZGGYjuFwuiVV8Ph9GR0dXxEknTpzYME5ikyupVAoLCwsr4iSTybTiRYJ1inuY7aRQnoZYazmszhar6RcKheDz+ZBIJEiSkk00FhQU0Fn5bXDixIkVsRebMBIIBERHMZ1OI5FIkKTGo67QUavVOH78OH71q19t6fvHjx+niYzdSGbMzMzgww8/xMLCwroiJuxAqFQqYTQaUV5ejj179sBkMq1yI3mc5HI5JJNJ+Hw+ZLNZxOPxVYGH0+nE3NwcKioqoFaricXqVpalUAQCAS5cuIB//Md/3PB7Z8+efeQP1Xg8DrvdDq/Xi1AoRKqj2Nk+msTYmaTGjRs3SIKITbry+XxIpVIyyyoSicDlcnc1eP/a1762aTKDtUOjUCgPD42TaJxEobHWWmSzWfh8PrjdbiLwGY/HSSKjoKAAuVwO3/jGN+hJ/ZKx16VLl4iYPZvIYNt8H0xqPMqJ5gsXLmw5mUGvg11KZrjdbty6dQvDw8OQyWRr2mKyL0WsdkVhYSEcDgdaWlrQ1NS07bLK3YJViH3uuecgkUhQVlZGLmhW3fvevXu4fv06zp07B4FAQAbpjZalUB58GG02wD5KMadYLAa32w2Xy0UUstkKAgB466236EnbQdra2gAAV65cIRoaPB4PXC4XiUQCEokEEomEzNSys7M7zblz54gL0FpoNJonVkyXQnmaoHESjZMoNNZaTj6fh8fjgcvlIq28rKgna/X+5ptv0pO4g5w5cwbAfQcUNnnB5/MhFouJjiKbzGCrZB9F+8nJkychk8kQjUY3/J7JZMLx48fpidyNZAarF7G0tIQ9e/asOXubSCQQCAQwNzcHm82G/v5+zM3Nwe/3E2GpzQY0tk+f1c14mAdHLpfbcFmJRIKKigq8/vrrRLSKbXVhGAaLi4vo7+/Hp59+in379qG4uBharXbTZXdzv5avB8CGWiLrwZavPQmB0rPAnj17UF1djYmJiTU/r66ufiRWmIlEAvPz85ifn0csFiPaLuw1QZMYu8tzzz0H4H4JZC6XQzQaJb3p8XiclEGyLXe7oamxUasJFRajUHYGGifROIny7MZay0mn07Db7XC5XMTink1ksroY3/zmN+nJ20VYB5TPP/+c6JQkEgnS9svqLbKTSqy+xm5hNBrR3t6OTz75ZMPvHTx4kLaY7FYyYzkWi4WU8zx488ZiMQQCAdy+fRuXL19GX18fbty4gZKSEmg0Guj1+g0HII/Hg2w2C4FAAI1Gs+2gnvVp3mhZHo8HmUwGmUy25jYsLi5idnYWDoeDOBRsZdnd3K/l6wEAmUwGqVS6ZSHRXC6HYDAIgUDwRJWyfpURi8V4+eWX8aMf/WjNz19++eWH1ovZCqlUCg6HA/Pz8wgEAqQ6gA3SqHvFo4V9Zl69epXckzwej4jdsZZi2WwWfD5/R91PNmo1oS0mFMrOQ+MkGidRno1Y68F7y263w+l0wuPxIJPJkOQhe419+9vfpiftEcJWOXz22Wck3mIn9NgJJbZSg9UxYqvMdpoLFy5smsx48cUX6Ul7FMkMqVQKg8Gw6v/sDZvL5aDVasHn8zE6Ooq5uTn09/evGtgZhkE0GsXi4iIikQii0SjsdjsymQwkEglMJhO0Wi10Oh0MBsOqfrdsNgu3200sjRiGQSgUQiQSgV6vJ4NpcXExFAoFWT6VSmFpaQk2mw18Ph9GoxEGgwEejwdDQ0Po6+vDzMwMUqkURkdHwePx4Ha70dTUBB6Pt+ayy7ctlUqtEAJjNQqW75fBYIDJZIJarV4xYIfDYXg8HrjdbqhUKphMJoTDYYRCIXi9XtjtdhQUFECpVBJbtZKSklWzGMlkEqFQCA6Hg/Tte71eCIVCaLVaiEQiqFQqGAwGKBSKRyJE+CzyyiuvrDvA7lbZI5vEcDqdiEQixLecbSf5zne+Q0/MY4QVq/rss8+IgN5ykdB8Pk/cT9hB9cven+u1mtAWEwpld6BxEo2TKF/tWGs5kUiEtPEGAgEkk0kkEgkAIMk0OoH0eGErNS5dugSBQIBoNEr0y9ikhkQiIVWyYrF4U5eoh7lO/+Iv/gKRSGTNz+Vy+WNriXrmkhmstdhGVFZWIpvN4u2338bCwgLm5uZIJozNTvr9fgwPD+P999/H3NwcwuEwsTZlg/mqqiocPnwYZ86cgV6vJ4NhJpNBMBjE1atXMTg4iMnJScTjcaRSKdKbLpPJYDabcf78eTQ0NKCkpAQcDgdLS0u4e/cu/uVf/gUqlQovvPACTp8+jb6+Pvz4xz+G2+2Gz+dDNBrFxYsXcf36dZSVleFv//ZvIZVK11xWo9GQ7XK73bhz5w7ef/99OBwOpFKpVfvV1NSEkydP4vDhw9BoNGSQXFhYQGdnJz766CPs2bMHL774IsbGxjA6OoqRkRGyf1wuF0ajEWfOnMFrr70GlUpFzkkmk1lRAup0OokQDvv7KpUKjY2NaGtrw759+6BSqahd7C6wXvnjbpQ9ZjIZOBwOLCwsIBgMkpdkdsaMy+XSGYEncGC9evUq4vE4qZpZWloCj8dDKpUiVoVCofBLD6prtZrQFhMKZXegcRKNkyhfzVhrOcFgEA6HA263G8lkEul0ekUrST6fp0mMJwxWU+Py5csoKChANpsFl8slbSdcLndFBQfrIrUTSQ2j0Yjjx4/jd7/73ZqfHz9+HEajkZ6kR5HM2ArsQMBeIMlkckWZVTQaxc2bN/Hf//3fmJiYgE6nQ01NDRQKBfL5PMLhMO7cuYOenh4sLi6Cy+WitbUVtbW1AACPx4Pe3l6899578Hg8kMlkqK2thUQiIf7oCwsL6OnpwdLSEl544QVcuHABcrmc2FKOjY1Br9fD5/OBYRgYDAY0NTWhq6sL+XweAoEA5eXlMJvNqKiogEQiWXdZdnB0uVy4evUq3n33XYyPj8NoNKKhoWHVft24cQNut5sM2CaTCcD9kieHw4Hh4WGEw2FwOBx4PB5wuVw0NzdDIBDA7XZjcnISt2/fBo/Hg16vx8mTJ6FWq8k2XL9+He+88w68Xi+MRiNZlj32Y2NjuHz5Mmw2G4RCIWpra6HT6eidsMOsV/64k2WP7Myb0+mE1+tFKpUiD2K2R/P3f//36cl4QmErNbq6uhCLxcDhcEiLCSsGyFoesn8PM6iu1WpCW0wolMcHjZNonER5emKt5fj9fng8HiwuLpLKV7bSktV+oXHXkw1rSd/Z2Qkul0vsc/l8PrLZLIm1BAIBmVASCoVfOqlx4cKFdZMZFy5coCfmSUpmRCIRLC4uIp1OQyKRrCgTZBgGExMTuHnzJrq6ulBfX4+2tjYcO3aM9CmGQiEYjUbcunULQ0NDUKvVZCAG7luC9fT0YHBwEBaLBWfOnEFzczNkMhkZpO/evYsbN27A7/fD5XIhEols+FCrqqrCSy+9BIfDQTQGWlpasHfvXlRUVECpVK7rCADc74UdHBzEtWvX0Nvbiz179uDIkSM4evToqv1i991isUAkEpFBejlOpxMjIyNoaGhATU0NrFYrBAIBXC4XBgYG8Mtf/hLj4+Po7OwkgjGZTAazs7O4c+cOBgYGcPToURw5cgQtLS1kkA6FQtBqtRgZGYHD4YDH44HZbKaD9C6xVvnjTpSR5XI5eL1euN1ueL1exGKxFcKeVNzz6aK9vZ0kNdgqjVQqRSzbWCtXdoZgu0mNB9tJ5HI5bTGhUB4jNE6icRLlyY+1luPxeODz+UjMxTAMSWDQmOvphG3tu3z5MjKZDEQiETgcDkls8Pl8pFIpiEQi5PN58Pl8cLnch05qnD9/HnK5fFWriVwux/nz5+kJeVTJDDZ79SBsL2gmk8Hk5CS6uroQiUSg0+lQXV1NBFUSiQS6urowODgIHo+Hc+fOob29HbW1taSMkGEYlJeXQyAQ4N69e+jp6UFjYyMpjWT7MUOhEI4fP45z585Bp9MRe51MJgOTyYTCwkLMzMzAbDaDYRjk8/l190uj0aC6uhpqtRpCoRAMw6C4uBhWqxUVFRWbqtwmEglcv34dQ0NDEAqFeOWVV3DkyBGUl5ev2i8A6O3txaeffori4mIcPXp0VfkiO0tz9uxZ1NTUECErq9UKs9mMW7du4e7du+jr60MkEkE+nyelk06nE8B9e8ijR4+iuroaXC4X+XweqVQKhYWFGBwcxPj4OKRSKVXu3kWam5tRV1eH0dFRAPeF4Zqbm7/UOl0uF7xeL3w+HxKJBJLJJJLJJFGCpyrZT39S48aNG0ilUggEAqR3UywWQygUQiqVQiQSbfu+ff311/HOO+8AAFpaWujBplB2CRon0TiJ8vTHWux94vP54PP54Pf7EY/HkUgkkEgkwOVyweFw1nQuojxdsJUa165dQywWA5fLBY/HA4/HI/EWh8MhFWnshNJ2nwvrtZrQFpNHnMwIh8OYm5tb84aPx+OYmZlBf38/rl69img0in379qGtrY0oWyeTSdy4cQPT09MwGo04ePAg6uvrVylfy2Qy1NXVwWq1YmRkBPPz87Db7SgsLASHwwGfzyc95g6HA0ajERKJhCxfUVEBtVqNxsZGiEQiaDSaDb2E2bJuHo9HLk7WO30ryrapVAr37t2Dx+NBaWkp9u/fj+rq6lWzHDKZDFarFYWFhVhYWMD8/Dwikcgq9WydTof6+npUVFSsuMAlEgnS6TSMRiPGxsYQCAQQCoXIy2wulyMDttvtRiQSWdHzJZVKySxQY2Mj9Ho9tQHaRYRCIY4ePUoG2Kampoe2f/L7/aQ/k73fWM9yDoeDb3zjG/SAf0Voa2sDANy8eRPpdHrFvcu6nmxHqR+4X8LIJjOOHj1KDzKFskvQOInGSZSnN9YC7lcReb1eOBwOhMNhIhTJVsDm83kac30F6ejoIEkNtlV7eSsRwzAQCoUQCoXg8XgkobUd1mo1oS0mjziZYbPZ1uz3yWaziEQimJ6exsLCApaWlrBv3z60t7eTgZIdzO12O+LxOKqrq6HT6SCVStccNLVaLcrKyjAxMUEUrNlBpbKyEnK5HDabDb/97W8RCARQVFQEpVIJiUQCiUQCrVYLrVYLDofzUBfcdh567Pbl83kUFhZCrVavObjzeDwolUoUFxfD7XZjaWkJwWBw1WBuMpmwZ8+edUs+2eAhkUggFAohFosRVfKioiLweDz09fWBz+cjk8lAq9VCJpNBLpcTpXWj0Qgul0tVuneZN954g+gVvP7669te3uv1wu/3IxgMIhwOE89ytp3kW9/6Fj3IX1GOHDkCAOju7gbDMEQAMJ/PQywWb+uZtryt5E//9E/pwaVQdgkaJ9E4ifL0xVrAfU0Wv9+PUChEYq50Ok1sVrPZLI25nqGkxo0bN5DP50kii62SFYlEEAqFkMlk29bSeLCdRCKR0BaTR53MGB4eXrcnki2f1Ov1OHr0KE6dOoXGxkYUFxeDx+MRG5x0Og0+nw+1Wr2hSqxYLIZWqwWXy0UikUA4HCalka2trbh58yZmZ2fx0UcfYWBgABaLBZWVlSgsLERZWRnp4RSLxRvONnxZYrEYXC4XkskkJBIJDAbDhhe3VCqFXq8Hl8tFPB5HMBhcZeOm0WhQWVm5bmaZXXc2m8XS0hJisRg0Gg3q6+sxMzODO3fuYG5uDn6/nxwbs9mMsrIyWCwWmEwmUnJKyyd3/4W0pKRk1QvlZiSTSczOzmJhYQH5fJ60lAB0VuBZ49ChQwDuV2pks1mkUimkUimoVCqoVKotrUOpVJIAT6lU0oNKoewSNE6icRLl6Ym1gPvtTQ6HA3Nzc8hkMkilUiucxrLZLNXEeAZhq2SB+5pmqVSKJEXFYjHy+Tzy+fy2Wn+NRiM6Ojpw7do1AEBNTQ1tMXnUyYzKykqcPn16zc/4fD5KSkqI77nFYoFSqSQDZDQahcfjIfZXm2W6l9ubRaNRuFwuMAwDtVqNvXv34o/+6I8wMjKC4eFh2O123L17F3fu3IFMJoNKpUJhYSEOHjxIBKp2C3bGIZvNQi6Xo7i4eJXf+1rBB5/PJ4HNg32qPB5vS3ZAbKkkq76rVqvR1tYGoVCI3t5e2O12+P1+3Lp1C319fZBIJFCpVKirq8Phw4dx9OhR+mKzy0ilUnLPbLVUlT2vPp8P4XCYlMXSJAYN1gCgp6eHVOlEIhEolUrI5fJNnxe0lJFC2X1onETjJMrTEWux10c2myVaZGzVKxt30SQGBfj/mma9vb3EhpetlBUIBNuq3nr11VdJMoOtAqE84mTGepZ+fD4fRUVFRA2Wx+OtKFl8GLEUluX9nwKBAHq9Hh0dHSgvL4fVasXs7CycTifcbjdCoRCx7nI6nWAYBkajcdeUqJcPtGxPFWuxtt73NxPa2s5xYQUC2cHdYrFAoVDAZDIRoSuHw0HcL+7duwen04lAIAC1Wo2amhpotVp6J+wi2xXldLvdmJiYgMPhIKJDb775Jj2QFABAa2srAGBpaQnJZBIejwcKhWLT5aiDCYXyaJIZNE6icRJ7jgMhAAAgAElEQVTlyY+1gPsuJVNTU1hYWKDxFmVTDh48COB+CwpbKZtIJKBSqbac9Dx//jz+5E/+BADw/e9/nx7UR53M0Gq1xPrrQdgBdLNySHZAyWazG/4Wm00HQPon2XJCtqdSLBajpKQEqVQKDMMQf/Br167h0qVL6Ovrg1wuR2VlJQ4fPrwrB3B5ABEKhTA3N0dEgtaCLbdkGAZcLhd8Pv+h+1S5XC6USuWKflqhUAi9Xg+ZTIbm5mYwDINUKoXFxUUMDQ2hs7MTExMT6OzsJKWtdJDeXdgZ9a3icrkQCoUgEAh23F6M8tVBqVSSv61+n0Kh7C40TqJxEuXpiLUAwOFwwO/303iLsi3YFpSenh5Eo1FSKatQKDatlC0tLSUOKjU1NfRgPupkBmtT87CDmVgshlqthtvthtvtBsMwGw5mbrcb6XQaIpEIKpVqRRlPQUEBUZVlyeVy0Gg0UKlUEIvF+PnPfw6PxwOHw7HhwPllXyjMZjMEAgH8fv+W9svn84FhGCIyxZaJbvvk8XhQq9WrxMG4XO4q5XOtVguTyYSioiK89957eO+999Df34+qqioy00vZHdYSb9uIvXv37mrJL+WrxcM+kykUyi4EVTROonES5amItYD7TnHrVVJRKJvBPhfC4TASicSWKmV5PB655h72uUb5EsmMnRjkKyoqSKnj3NwcdDrdiow3qxzrdDoxNTUFDocDpVIJtVoNDocDm82GkZERqNVqmM1mlJaWrggEtFotLBYLsfxiGAaJRGLDkkZ20Ofz+dtWrRYKhdDpdCgtLUUoFILH44Hdboder18hzsful9/vh9frhUajgclkglqt/lIXs0gkgkAgILZn4XAYfD4fjY2NUCgUZDZDIpGguLgY+XwefX19yGaziEajRFSSQqFQKBTK40+G0DiJxkmUR8OpU6foQaB8aRQKBRQKxbZaTShPaTJDKBRi//79cDgcuH37Nrq6uiAQCLB//34yOCaTSSwuLmJ4eJj4rJeWlkKv14PH46G/vx///M//jPLycpw+fRpnz56FQCAgvW4ASLlPLpcDj8eDUCjctESRw+FAJpNBJBIhn88jFoshFoshkUiAx+OtO8gXFBRALBbjwIEDCAaDmJ2dRXd3NwQCARobG1ft1/T0NILBIFpbW1FZWbktFdz1fh+4L/7129/+FsPDwxAIBPjjP/5jVFVVrZh5SKVSWFpaQjweh0AgIFZkFAqFQqFQHj80TqJxEoVCeTrZalXe8gQz5SlLZkgkEnR0dMDv92NsbAzvv/8+bDYbhoaGYDQaiaLwwMAAhoeHIZfL8dZbb6Gjo4OofbMK3P39/VhcXMTdu3fR2NhIysuSySTGxsbQ1dWFWCyG0tJS7N27FxKJZMMSSj6fj7KyMphMJkxNTaGzsxPBYBDNzc2orKzccMZCKpXizJkzCIVCGB4exq9+9SuMjo5i//79a+6XSqXC+fPn0dLSsmOWX3w+H2azGffu3cMXX3wBAGhoaEBFRQWEQiFyuRyCwSB6enowNDREFL1pvxaFQqFQKE8GNE6icRKFQvmKv3zT9pJHm8wQi8Wk1E8ul3/pk2c2m9Ha2koUoz0eD27evEkEnrLZLCk/bG9vx8mTJ1FZWUnWUVFRgXPnzkEikcDpdOLOnTvwer3gcrlgGAZ8Ph+hUAgAcPz4cRw9ehQWi4VY57DCTxqNBlKplMwIiEQiNDY2Yn5+HjabDXa7nayTtT5cb1mBQACr1UoCEHb5VCpF9iuXy8HtdsNkMuHo0aM4dOgQiouLyX4JBALI5XIYDAaoVCoyi/IgrJiVXq9HJpMhN4RQKERLSwvi8TjS6TQCgQD6+/sxNTWFfD4PLpeLXC6HhYUFcmwPHjyIwsJCehdQKBQKhfKQ0DiJxkkUCoVCeUKTGSqVCvX19ZBKpTCbzV/qx5aXGhoMBnzxxReYnp7GwsICxsfHIZPJYDabUV9fj6amJnR0dMBsNkMikZB1lJaWQqlUoqysDAMDA+jv74fX60UoFEI8HkdhYSEKCwuxf/9+tLW1oaqqivSR8vl8aDQaNDU1QaFQwGg0kpkMgUCAffv2IRqNwufzwe12AwCCwSDy+TyEQuG6y3I4HKhUKhw/fhzl5eXo7OzE7OwsPB4P2S+LxYLm5mY0NDSgtbUVFosFYrGY7Bd7fPft24eqqipIpdI1B2l2ZiQajSKbzZJ1CAQC1NfXk2M4MDCA2dlZLCwsIBgMQi6Xw2QyoaamBnv37l3z2FIoFAqFQtkeNE6icRKFQqFQHg8F+U2MvAOBABwOB+LxOIxGIywWy5f+0Xw+j3Q6DZfLhaWlJUQiEUQiEfD5fEilUgiFQmi1WhiNxjVtzHK5HKLRKBGJSiQSSKVSyGQykEqlkEgkUCqVMJlMEIvFZDBlGAbhcBgLCwvg8Xhk9oD9HAC8Xi8WFxcRj8cB3J+JMJvNEIlEYBhmw2Xz+TySySQcDgcikQjpSeXz+ZDJZJBKpVCr1dDpdKv2i1Xv9vl8kMvlKC4uhlgsXjVQs9sQDoeRz+dRW1u7YrBn+z39fj+WlpYQi8XIzIdEIoFEItnw2D6pnDlzBp9++il++MMf4gc/+MEj+c1sNotYLIZ4PI5MJrPC876goIDMYLHXLOXZI5FIIBwOk9lO9h7bSCAvn8+DYRhybUkkEojF4ifKlSSbzSKdTiMUCpH+cYlEAoFAALFYDJ1Ot+LZ9yDhcBjvvvsu4vE4SkpKcPz4cajV6h3ZtkgkArvdjqtXr0IikaCuro68SFIojwMaJ9E46XFy/fp1dHR0kOO7W2OcTCZbIdi6FdixwO12Q6lU4rXXXoPBYHiixoK+vj5cuXIFer0ee/bswYEDBwDct20dHR3F8PAwzGYzDh06RK7L3RzjKF+N+Gp5HMVaaK8FW0kmFApp+8lDsqXKDLlcTkrwdiSD8v/swkpKSlBUVIR8Pk8ewAUFBSgoKACHw1n39zgcDuRyOaRSKVGefnD97PLLByE+nw+1Wk1sc7hc7qpBUKvVQqVSrVgnj8dDQUEB8vn8hssWFBRAJBLBYrGQfdrqfkkkEpSUlKCwsHDNbV++DxaLhfSmPnjhs6rhGo0GuVxu1Qv4ZseW8v9Jp9NwOByYn59HPB5f1Q/M5/NJKatKpSIiakKhkJTN7hb5fB6ZTAbZbJYozO/m71HWJhgMYmJiAktLS5BKpTCZTKisrFwROK917uLxOObn5zE/P0+eg09CMiOTySAWiyEcDsPv98Nut8PpdMLv90Oj0UAmk0GhUMBqtUKpVEIsFpPgYvnzamlpCf/n//wfeL1edHR0oKmpaccCvWg0itHRUfzkJz+BTqfDa6+9BovFQpMZlMcGjZNonPQsjHEVFRUPlcz46U9/iv7+flRUVOD48eM7mswYGRnBP/3TP0Gv1+ONN95AaWnptseC/v5+/OhHP8KePXvw7W9/myQz7HY7Ll26hF/84hc4duwYSkpKoFQqSTLjpz/9KbxeL9rb27F3794VY1w6nQbDMKR1i8Znz158xTAM/H4/RkZGEI1G1/0en89HcXExFAoFZDIZhEIhJBIJnSTdyWQGh8PZtZuQy+U+9GDBzoxvd/nN9mejz9kBbrPtepjM2nb2Z7Pv7eY5e5YIhUK4evUqLl68CIfDgVQqtSrg4XK5EIlEMBqNsFqtqKurQ3NzM6qqqqBQKHYtGIrH47Db7XC73RCJRKRMmPJoGRkZwX/+539iYmICEokEzc3N+LM/+7MNlaozmQycTic++ugj/OY3v8G5c+dw8uRJGI3Gx7ovDMPA5/Ph4sWLuHXrFgYGBkhAlk6niSUjW4ZeXV2Nw4cP49SpUzAajY9s4OXxeFAqlaiuroZKpYJWq6WzGZTHCo2TaJz0LIxxb7zxBvbs2bOt5fl8PiorK5HNZlFYWPhEvqBptVrs2bMHlZWVW46j2P3SarUwm80QCAQrPp+bm8Po6Cjq6+thNBq/tJYOja+evvhqaWkJw8PD+PGPf4zZ2dkNn0UCgQBKpRJFRUVobW3F4cOHcejQIXoR7FQyg0J5VslkMsRGLhqNor6+fsVDNJvNIh6PIxgMIhAIoKenB2NjY+jr68OePXtw6NAh1NbWQiKR7HjQxP7exMQESkpKoNPpaDLjMRCNRrG4uIjJyUlS1n348GEcPnwYFRUVay7Dlll7vV5MTU3B6/WScu3HQTabxdLSEgYHB3H58mV0d3cjFApBKpWisbERKpUKQqGQlG0uLS3BZrOht7cXi4uLcLvdaG9vx6FDhx5JSbZMJkNlZSW+9a1vQSgUwmKx0J52CoVC2eUxzufzPdTz+vXXX0cwGIRUKoVWq33i9rGxsRF/8Ad/AJVKte64vd5+pVIpGAwGUo3EMj4+jl//+tcQi8WQSqU0mfEMxldsq/rs7CxCoRAqKytRXl6+qrIkk8nA4/HA6/Xizp07cDgccDqdiMfjaGlpodcOTWZQKDuDXq/HCy+8gPb2dvI/hmEQCoUwOzuL4eFhjI2NYXJyEj09Pejv70cymYRMJkNZWRmEQuGOvuSFQiHcvn0bQ0ND2LdvH9ra2uhJekyw5eCRSAQOhwNXrlyBXC6HxWLZ0cqcXC5HtFu4XO6OVSOk02lMTU3ho48+wttvvw0ej4empiacOHEChw8fRnFxMaRSKQKBAILBIOx2Ozo7OzE0NIRbt25hdnYWDMOguroaWq12Qy2NzfaNnbHd6F4Ri8WwWCzb1iVYXtK+3nnJZrPkO5ttB4VCoVA2RiqV4uzZs9sek4AvV5XEriefz4PD4Wz4PK+trUVtbe2O7Ber2TA9PY3PPvtsldMQ5dmKr1hMJhPa2trw/PPPr5p4TKfTmJycxODgILq7uzE4OAifz4dkMkkmazba12w2i1wuh1wuBx6PBw6H80TELsuPKdsO/zDblcvlkM1mN2z9o8kMCmULiMVioiC/nEwmg5aWFpw7dw5OpxO9vb34+OOPMTQ0hF/+8pdIp9N47bXXUFpauqPllclkEh6PB8FgcJWWB+XRwufzUV1dTQT2bt68ieLiYhw+fBhqtXrHBsVwOAyPx4NUKgWtVouioqIvvU6GYeByufDTn/4UX3zxBXg8Hr75zW/ixIkTaG1thVQqJfaHOp0OmUwGDQ0N2LdvH65cuYJ3330XY2Nj6O3tRXV1NU6fPr3tmTdWrMvpdEIsFsNgMEAkEu1oNRM7W5NMJpHJZNY8L9lsFsFgEIlE4okuiaZQKJSvKul0GjMzMygoKIBarX7oMZRdTzabhUQieWTPc4ZhYLPZiNMP5dmNr5bDXoPV1dXQ6/Wr4pOamhp0dHTghRdewI9+9CNMTk7i888/x+/93u9BoVBAp9Otm8gIBoNYWlpCMpmEyWQiuhuPk+VxXSqVglAoRHl5+ba1SxiGIRXwMpls3eNAkxkUyhbgcDjEuWQ99Ho9KQfL5/Ow2Wzo7u4mZWUlJSUIhUIYHR3F+Pg4AKChoQFWqxVyuXxFxpGdLR8aGkIwGER9fT1qa2vhdrtx7949dHd3Y2hoCD6fDz09PSgoKMCBAwegVCoRCoXg8/mg0WjQ0tKC8vLyNcv/M5kMZmZmcOPGDYTDYVitVrS0tKz7sKCsDWulaLVaYTAY8O6776K3txeffPIJXnzxxYcqq83lcojH45iensbg4CC8Xi+CwSBR9lapVCgpKYHVaoXVakV5eflDbbvX6yXWjYlEAi0tLThz5gz27t2LwsLCNZeRyWRQKpVgGAb5fB49PT0oLS2FwWDYclVGKBTCwsICBgYG4Ha7EQqFEAqFIBAIoFKpoFQqUVlZiYaGBhQVFa0YmDdSsF+uMF9UVITm5ma4XC7cvn0boVAIyWQSAGAwGIi1JQDMzs5iYGAAdrsdsViMfKepqQkHDx4kAr8UCoVC2d5L4kZuJolEAh6PB319fXA4HAiFQvB4PCgoKCDuKSUlJaiurkZ9ff2GLYXpdBoDAwOIRqOYnp6G3W5HJpOBWCxGcXExrFbrmmPKem4mW9mv5W4mbrcbN27cwPDwMHp6ehCJRHDx4kXcvXsXJSUlaGlpgd/vx9jYGJRKJfbu3buuLgLDMHA6nbh37x7GxsZQVVWF2tpaVFdX0/jqKYmvlsPqjbFtR2vFVWq1GiKRCAcPHkQ4HIbb7cbCwgIqKipWxOWpVAqjo6OYmJjA5OQkaQFOp9NQq9XQ6/UoLS1Fc3MzjEYjJBIJ4vE4BgYG0N3djbKyMhI3PUhfXx8+/fRTAEBzczM6OjpWVYa43W5MTk7izp07KCwsxIEDB1BUVAQej4doNIrBwUFMTk5iZmYGoVAIDMOAx+PBYDCgqKgIlZWVaGpqWhVXsfcUj8dDZWUlpFIpbDYb7ty5g1gsho6ODrz88ss0mUGh7CZisRhVVVXIZrPEDWJychL9/f2orq4myYzu7m68++67yOfzeOutt6DX61c9LBiGwfDwMH7+859jenoab775JjQaDcbHx/Hee++hu7sbXq8X2WwW0WiUuE4UFxfDZrNhYGCAVIMYDAbweLwV68/n80gkErh79y7+4z/+Ax6PB+fPn0d5eTlNZjwk1dXVaGtrw7Vr1zA1NYWLFy9i//79UCgU22q9yOfzSKVSmJ2dJdUPCwsLYBgGXC6XKO/L5XIcO3YML7zwAnQ63aaliGvhcrnQ398Pp9MJo9GItra2DRMZbHAhEAhQVVUFuVyOkpISqNXqVfaH65HJZLC4uIjLly/jvffew/z8PNLpNHFCYNd/5MgRXLhwAceOHVsh8rmRgj3rouLxeNDS0kKSgr/+9a8RDAaRTqeRy+UgFApx9uxZCIVCZLNZ9PT04He/+x2cTicSiQQYhkE2m8X58+ehVCrR1NQEmUxGL3IKhULZBuwzube3F1arFceOHSPJjHw+D6/Xi97eXvzsZz/D5OQkwuHwinEsm82ivr4ep06dgk6nQ3Fx8ZrjKTtD/fnnn2NqagqDg4OkEi+Xy0EkEqG9vR2vvPIK5HL5Cge4np4e/M3f/A327t2L73znO1tKZqzl2DU7O4v3338ft2/fhs/nA8MwuHz5MoRCIYxGI7hcLkZHR/E///M/MJlM+N73voeWlpY1x22GYYjuxm9+8xu89dZbEIvFz1wy42mOrx4m4SGTyVBTU4Px8XE4HA4EAgFEIpEViQy23aazsxNdXV2QSqXgcDjEzluj0aCmpgZvvvkmDhw4gIqKCsTjcXR1deHv//7vcfToUXzjG99Ykcxg26O6urrwV3/1V+BwOPje976Huro6FBUVrdh3h8OBS5cu4Wc/+xmOHDmCoqIi6PV6JBIJTE5O4v3338etW7cwMjJCrLPZdw6LxYK2tjYIhULU1NSseN9g7yk+n4/Tp09DpVKhv78fH374IQoKCqBQKGgyg0J5FLCWcC0tLbh16xYmJiYwMTGBUChEPmftl9gZ4K0il8vR1NQEhmGg0Whw5coVRKNRNDU14eTJk9i3bx+4XC4mJiaQSCQQDAYxOTlJZq2XP4zYF0qbzYZkMklmPR4UsaJsHYVCgaqqKpw6dQpXr17F0NAQ+vv7IRKJtiwqBtyfqbLZbPiHf/gHDA4OIp1O46WXXiLK6eznAwMDuHr1KvEwP3XqFDQazba22e12Y2BgALFYDKWlpTh8+PCWbe3Y2S621FMkEm1avcAqjX/66af4t3/7N4hEInR0dODQoUMQi8XIZrPEUaWnpwfz8/MQCARoaWlBcXHxlvcrk8nA5XLh7bffRklJCV577TXo9XoyG8MOtrFYDIFAACqVCidOnIDZbEYikcD09DR+85vf4Pr16wCAv/7rv6bJDAqFQtkh2Na/a9eu4cc//jE8Hg8aGxtx4sQJqNVq8Pl8LC0t4eLFi5ifn8c777wDs9mMI0eOrDme+nw+DAwMYHFxEVVVVfjDP/xDKBQKRKNR2Gw2dHZ24tatWwiFQigsLERjY+OOCyvW19fjO9/5DkwmE3p6ejA3N4dXX30VNTU1MJvNaGpqglwux8jICMbGxrC4uIhAILBmu0QqlcLIyAjm5uYglUpx7NixNWfSaXz15MZXu8HQ0BD+93//F5988gny+Tyef/55HDt2DGq1GqlUCtPT07hz5w5u3LiBxcVFfPvb38b3v/99KJVK6PV6KBQKzM7OrmqDWt4exeFwIBaLEQ6HMTU1Ba1Wu6KSKRAIYHx8HIlEAiaTCU1NTZBIJOjs7MRPfvITDA4OQqFQ4Ny5czh48CCUSiXi8Th6e3sxNjaGDz74AIFAAK+++ipeffXVVfvocDhw7do1hMNhaDQafP3rX4dYLEZzc/O6x4UmMyiUHaSgoID4YRuNRvB4PITDYWLrygocPkyGVygUQq1Wo66uDg6HA/39/chkMigpKcH+/fvR1NSEXC4HqVSK4eFh3Lx5E6Ojo9i3bx8RIWXJZrOYn5/H1NQU0uk0rFYr6uvrqWryl4DL5UKtVuPUqVMIh8P49a9/jQ8++IB4iG/V6WN+fh5XrlxBX18fJBIJnn/+eZw5cwZmsxlSqRQMw8Dj8aC6uhr/+q//inv37kEoFKKpqQkKhWJb7RB+vx/Dw8OIx+MwGAyoq6vbck8j23q1nd7MTCYDh8MBv99PEhlHjhxBS0sLBAIBcrkcAoEAmdEaGxvD2NgYSkpKtpXMCIfD8Hq92L9/P/bv34/29naoVCqk02nYbDb09PRgcXER/f39qKioQENDA44fPw69Xo9MJoO5uTnMzMxgZGQEg4ODsNvtMBgMW070UCgUCmXjscDr9cLn8yGbzaK5uRnHjx/HCy+8QGbB4/E4pFIpPvjgA1y9ehXXrl2DVqtd8+XV4/FAJBIRS8vW1lZIJBKkUinY7Xbkcjl0d3djdHQUIyMj0Gq1Ox7vsG0qMzMzsNlscLlcqKurQ2trK8rKyqBSqRAMBtHa2oqpqSnMzs6ir68PbW1tUCqVK+KzSCSC3t5eeDweVFRUoKKi4ol0gqHx1c7Bup+Mj49jcXERXC4XGo0GcrmctMaMjo6is7MTyWQSR44cwcsvvwyr1QqJRIJMJoOmpiYYjUbSijI4OIiRkRHU19dDo9GgrKwM09PT8Pv9SKVS5Lil02mMjY3B7/eTalsAmJiYIPu+PJlhs9lQWFhIbImnp6fR19eH/v5+aDQadHR04KWXXoLFYoFYLCbvGV1dXbh06RIGBwdhtVpx/PjxVe0mfr8fXC4XtbW1OHz4MI4cOQKBQLBhDEiTGRTKLjx0xWIxNBoNZDIZMpnMinJHhmGQyWQear2stRlrl8nn8yGXy2EymWAwGJDNZlFQUACz2Yzu7m7MzMxgcXERyWQSEomEPOwzmQzsdjsWFhbA4XBQVlaG8vJyanH5JRGJRDhw4ABmZ2fxxRdf4IsvvkBhYSGOHTsGnU63yot+LRYWFvD555/D4/Hg+eefx6uvvrqqzaGqqgoVFRW4fPkyrl+/jq6uLni9XpjN5m0NtuFwmPifKxSKHRe9ehC21FCj0aC9vR0vvvgiGhsbYTabyXcKCwuRTqfh8XgwNDSEmZkZeL3ebf1OJBKBXC7H4cOH8dxzz6GxsZF8plQqUVJSgrm5OXg8Hrz00ktoa2vDkSNHyHd0Oh2am5vhdrvJXzQapckMCoVC2QFYq02pVIqWlhY0NzejtbUVDQ0NK17utFot3G43Pv74Y9y9exf79u1b95kfj8dx7tw5tLa2rtDlMJvNiMViWFpawkcffYTR0VFUVlbueMsGK2CtUqkgFovB5XKh1WpRWFhIXsTMZjP279+PDz74AIuLi+ju7kZzc/OKZEYqlYLX68Xw8DCSySRqa2uh0+m2LZ5I46vHG189eL1nMhmk02kyuflgci8SiWB6ehoDAwNwOp3QaDQoKiqCSqVCNpsldrPj4+M4dOgQjh07hvPnz69YT0VFBUQiEYnt5ufnMTAwgLKyMpIIHBsbQygUQiQSIYkEhmEwOTmJSCSCiooKGAwGCAQCzMzMEHchdjsDgQBcLhdaWlpQVFSEdDqN4eFhjIyMIBwO49ixYzh58iTOnDmzYtuqqqogk8kQDAbxzjvvYGZmBna7HVKpdMVxjUQikEqlaG9vx+nTp9HS0rLp8eXQRyqFsvOws9YikQiJRAJ2ux1er5f4ZrtcLjAMsyuJFKlUivLycpSWliIajZKSMvYBmsvlEIvFYLPZ4PP5YLVaUVFRQfruKA9PQUEBRCIR9u7dizfeeAMSiQR3797Fhx9+iKWlpS2tY70SvgcRCARobGxEWVkZGIaBw+FAMBh8oo+PUCjEgQMH8K1vfQt//ud/jra2NhiNxlXXcFFREbRaLdG8cLlcDxX4tLS0rLLF43A40Gg0UCgUEAqFaGhoWJFMAQAej4eioiLodDqSgNmN+5VCoVCeRQQCASoqKnDhwgX85V/+JV577bVVbRTsbPxWWvxUKhUqKipQVla2yvpSIBCgvr4epaWlSCaTuHv3Lubn5x/LfhsMBuzduxdmsxnRaJS0eS7H7XZjaGgI8XgcpaWlOHLkCE2kP+XxVTweJ8KZo6OjK/6Ghobw2Wef4d///d/xd3/3dxgcHIRGo8GxY8dgtVpJC0l/fz8mJychFovR2tqKqqqqNX+LdXuRy+VwOp0YHBwk1bfNzc2QSCTw+XyYmpoi7wXpdBrT09NIp9NobGxEY2Mj+Hw+JiYmiHA62ybsdruRTqdRXl4Ok8lEWlRcLhfEYjEOHjy47rYZjUY0NzdDKpXC5XJhaGhozZZ7iUSCjo6OLbdW0coMCmWXHrqs1zOPx4NcLodYLEYwGEQymSRWRbsBn89HVVUVmpqasLCwAJvNhvHxcZLZj8fjWFhYgN1uh0AgQENDA0pLS7clokTZOJFlNpvR0dGBmzdvwm634+OPP0ZdXR14PN6m1S/RaBRutxsGgwGFhYXrBnLsS7lcLgfDMJidnUVVVRUMBgPm5uYQDofJILQcrVaL4uJiUsrLlgA+qmMjl8shEHZ6HE4AAB0pSURBVAgQiUQwNTVFLIZZ2GTb2NgYcrkcsWTbDnK5HIWFhdBqtWuKkrKtXqzGzYNWaay3PZ/PRz6fJx7uFAqFQtm5F1M2VnI4HMRZ4kFu37696frEYjGUSiXEYvGqWIbL5cJkMkGj0ZCKkEQi8diSOBqNBk1NTWT2fGFhATqdjiRh2GQGwzAoLy9Ha2sr1Wx6CuOr5TidTly7dg2Li4urYpJsNktcfHw+H+rr63Ho0CGcOXMGJpMJfD4f8XgcS0tLiMfjpLVmPQ0PuVxO2j/8fj/sdjsYhoFWq0VdXR0kEgkxKKiqqiLvBaw+S0NDA/R6Pfx+P27fvk3eW/L5PGZnZ+FyucDn81FXV4fi4mJkMhm43W4Eg0GkUilMTU2hoKAAg4ODayaTpqamiF6ZzWZbFX+q1WqUlZURcwSazKBQHhPL20lEIhF0Oh1UKtVDzTA/TDLDbDajvr4eXV1dcDgcmJqaQlNTEwwGA6LRKCndVygUqK2tJfoelJ1BpVKhtrYWra2t+OSTT9Dd3Y07d+5ApVKtm7FmSaVSiMVisFqtUKlUGwaDAoEAfD5/xcxBOp3G3bt3MT09DZ/Pt2q5pqYmSKVSCIVCCAQCyOVyBINB5HI5ZLPZXVXsZpXEPR4Ppqam0Nvbi6mpKTidzlVuO2z7y8Mgl8uJi8+GAyCPB61WSwNFCoVCecRkMhn4/X5MTU1hYGAAExMTmJ2dXTUGbWUsEIlEUCgUa45fHA4HMpnsiWnTYKsLZmZmcOPGDUxMTKCoqAhqtRr5fB4ejwcjIyMQCASwWCyora2lF8tTGF8tJxgMYnh4GDabbVUFdEFBAbhcLrGkb2trw7Fjx9De3r4q6ZHL5cik0HrXs1AohFwuB5fLJWYAmUwGCoUCZrMZCoUC4XCYtJCk02mEQiG43W5UV1cTl5GhoSGEQiF4vV5EIhEIhULMzc3B6/VCIpGgqqoKJpMJiUQCkUgEiUQCiUQCfX19GBsbW3Pb0uk0SQQxDEO2bTlKpXJd1yKazKBQHiGsfZLH40FJScmuWzo9OHCrVCqYzWYUFxdjYGAANpuN2DuFQiEMDw8jEAigpqYGFRUV0Gg0j3QbnwWkUim+9rWvIRaLYXJyEhcvXoRMJtt0sP2yJJNJ9Pb24ubNm5ienl71eTQaRWNjI3Q6HZRKJSwWCxmE1lNW38n7or+/Hx9//DEuXryITCYDo9GI8vJyaDQa8Pl8Uo3B9o8+DHw+HxKJhLZNUSgUyhOayHA6nfjggw/w85//HD6fD0ajEdXV1WQsWD5uTE1Nbbg+nU6Hmpqap0JXgm23vHfvHj777DP09vbCbDajpqYGyWQSCwsLGB4eRnNzM0pLS+nF8pTGV8uxWCxobW0l7h7LYdupNBoNmVx5UJyWtR5ebtO6FaLRKBHZZd0UrVYrbDYbaSEJBAKYnJxEMpkk1RsymQwGgwF8Ph8zMzOwWCwoLCzE9PQ0lpaWYDQaodfrIZVKt1XlxOPxiKaMwWCAVqvdkXiTJjMolB0kl8shGAxienoaXq8XMpkMJSUlD6WanU6nEYvFHqpXn8fjEa/p6elpOJ1O2Gw2GI1GuFwu2Gw2iEQiVFZWrgocKDsDn89HWVkZDhw4gOHhYYyPj6O7u3tXBtvlswhisRgdHR2wWCxr9njW1tZCr9eDy+VCp9OhsbERCwsL8Pl8mJiYQHNz85YrFRiGwdzcHEQiEfR6/aaK4rFYDJ988gmuXLkCj8eDF198EU1NTbBarcQ+mJ0FWWvWYzvHgyYyKBQK5ckkHo/j888/x5UrVzA1NYUTJ07gwIEDaGxsXGUlz1q4bra+QCDwUOLqjxpWk6myshJmsxnj4+OYnZ1FOp3GzMwM5ufnwTAMDh06tOMipTS+enTx1XKUSiWqq6vR3t6+KtHB4XAgkUggkUjWTcaxbVlbETldjlgshkqlApfLJetoaGiAz+fDzMwMotEoQqEQbDYbJBIJEbAVCATQ6XQoLCzEwsICXC4X9Ho9pqenwTAMamtrIZPJVu2nRCJBW1sbKisrN33vYX9vuVMKTWZQKE8A6XQaCwsLuHfvHoLBIIxG44pyNg6HQ/r1N3rpYy2awuHwQ+sZKBQKVFdXE3uviYkJ6PV68mDSarVEXZiy87ClrfX19XjuuecwPj6Ou3fv4vLly9i3b9+6GgxcLhcCgQCpVAoMwyCfz697rSwvO5TJZBAKhZBKpTh79uyWtlGv16OhoQFXr16F0+nEwMAAqqqqIJVKN7U5S6fTCAQC6O7uhkqlwt69e0lCYz0SiQS6urowMTEBs9mMV199FS0tLSuU51OpFO7evYu+vr6HPvb5fB75fJ5ehBQKhfIEkkgkcPXqVdy5cwdCoRAvv/wy2tvbV4gx5/N5MAyD/v7+TdcXDAYxNze3ZrzErodhGFLS/zgrUdnxurS0FDU1Nejt7YXdbsfS0hJGR0fhdDqhVCqxf/9+lJeX04vlKY2vliMSiaBWq1FcXLxK9HwrcLlcqFQqIgTLMAyy2eya383lckin08jn81AoFDCZTKT6QSAQwGq1YnBwEKOjo1haWiItJ1qtFjqdjrTIqNVqWCwWuFwuuFwulJeXEwfE+vp6ov1RUFAAPp8PLpcLiUSCgwcPoq2tDSUlJY/ueqC3BIWyM6RSKTidTnR1deGjjz7C/Pw8SktLV5ScCYVC6PX6DUurcrkckskklpaWiKDOw6BSqdDQ0ICysjLE43GMjIygt7cXY2NjSCQSsFqtqKur25GsKGV9ysrKcPr0adTV1SEUCuHSpUuYnZ1dt1yQHXzm5uawuLiIRCKx5sC8vOyQz+ejsLBwlYr7ZhgMBtLjOTo6it/97ndwuVxbSqDNzc3h/fffx7/927/hJz/5Cd59991N1b5ZZxCxWLyu8vzDllMuJ5PJrHvcKBQKhfJ4YRgG09PTWFxcJM4mD77ksS4Jbrd70/XF43H4/f41KzOWr4etWn0SJnFYZ4eCggJMT0/j2rVruHXrFoLB4LrjI+Xpia92ErYVRS6XI51Ob+iuEg6HYbfbkU6nIZFIVrxv8Pl8VFZWorCwkFTBjo6OYmRkBEVFRSgsLCTr0Wg0KC8vh91ux/DwMCYmJhAIBCCXy2G1WknSg8fjobi4GDqd7rE569FkBoXyJWAFDRcWFnDt2jW8++67+PDDD2G321FcXIyDBw+itraWJAz4fD5UKhV5IPl8PoRCoRUP01AohMHBQYyMjCASiaz4jHVH4fP5m5bRs2ViVVVV0Ov1mP+/7d1JbFvX1QfwP2dxpqiZFEVNVGjKlCXZmqzIiZXBRZwBCJAgQYJsmiaLFsmim8IoCmRhIEBXHVwUDdCuihQo3AAN0gyua1uRVcc2rXmIPMmSJUvUZEqcx2/x4V2YkeSpdlpa/x9gwCBs8fGK7537zrv3nOlp9PX14eLFizCZTKipqUFpaek9L1uje5OXlwe73Y6DBw+irq4Ok5OTOH78OEZGRrac4DQ3N0Mmk4m9s9/dkxiJRDA/P4/x8XEsLS2J3/OtKxzuhsFgQHV1NTo7O1FaWorR0VEcPXoUJ06cwNzc3KZJjXg8jrGxMRw7dgxHjx7F5OQkNBoN6urq7mq/cjKZFMVxpaWbt36u69ev49y5c/ddL0MK5vPz8zmx5JiIaLuRy+XQarUiZigUiqw5jdTh4V//+hdGRkagUqmwvLyMYDC46c8LhUK4ceOG2OJ7q1gshvPnz2NychIqlQoulyvrpu1hSafTWF9f37TrBQCUlZWhtbUVFosFs7OzOHXqFP79738jnU6jo6ODW4BzfH71ICmVStTW1sLhcCCTycDn82FychKxWGzDKlTpfiQQCKC4uBhut1usopASD3a7HXl5eRgbG8Pw8DAWFhZQUVGRlVC0Wq2orq7GzZs3MTY2hv7+fkSjUdhsNtTX14ufqdFoRBtbqQDoVsc2NzeHEydO4E9/+hNOnDiB9fX1LVeY3NP48FQgurNkMolAIAC/35+VyEgkElhbW8PExAR6enrQ29uLqakplJaWYs+ePWhtbYXD4RAnvVqtRn5+PiwWC65fv46pqSlcvXoVhYWFMBgMSKVSmJqawtmzZ3Hx4kVkMpmsFRzS3j2dTgelUimeQEtLxVQqFdRqtdjGotVqUVVVBafTib6+PkxPT8Nms6Gurg5Op1NUPKaHS6fT4amnnsL8/DxOnjyJnp4exGKxTduG2mw2tLS0wOfz4caNG+jr6xPdORQKBTKZDBYWFjA8PIyxsTHE43G43W5UVFTc85MDjUaD4uJidHd3IxwO44svvsDRo0fh9/uRTCZFIShpGWYmk0EgEMCpU6fw1Vdf4fTp07Db7Whubsa+ffs2/Ty3kslk0Ov1SKVSWFpagt/vFwVHk8kkFhcXMTY2hvHxcfj9fshkMlF9PBAIQKvV3tVqi/X1dfEZiIjoPxcOh7PmQFuROjPcrrCfQqFAeXk5ioqKxKrW0tJSMQ+SWkVKWzD0er2IGYFAABqNJuv6nslkEAwGMTg4KOY1CoUC6XQaCwsLOHPmDC5dugSj0YgdO3bAZrM91CSNWq1GIpHA7Owsbty4gfLycvEgSkpQFBYWwuPxwGaz4dq1a/jmm28wPj6Op556Cu3t7WJLAeXm/OpBUqvVqKysRFVVFfLz8zE0NITa2lq0t7fDbDaL75S0TffUqVNIJpNwOBzYuXOnGAuFQgGr1YqSkhIYjUYMDw9jZmYG4XBYnI8Si8WCiooKxONxXLp0CUqlEnK5HDabLWv7k1qthsfjQW1tLVQqFfr7+1FZWYldu3aJY5PJZIjH4xgaGsI//vEP9Pf34+mnn4bH40FeXt5/fB/CZAbRXbh+/To+/vhj9PX1icApdX+Q/gQCAUSjUVRVVeHAgQP4wQ9+gIaGhqwLqtFohMfjgdvtxoULF3Dq1Cmsrq5ieHgY+fn5WFlZwdTUFG7evIm8vDw4HI6sJxFSp5LS0lIYjUasrKzg7NmzMBqNmJychNPphNfrFRckpVKJyspK7NixA+fPn8f8/DysVitcLpcIrvTwKZVKlJWVobm5Gc888wx6enqwtra2abC12+3o7OzEyZMnMTExgY8++gjj4+OoqqpCYWEhIpEIJiYmcPbsWczNzWHv3r148803NxSVupeJwNNPPw2VSoV4PI6+vj78/e9/F8W0zGazWE4YCoWwuLiIq1evIhwOo66uDm+//Ta6urqg1WrvuFpIo9GgpaUFwWAQ3377LX7729+K1sBSkVq/3y+OR2orfPz4cZjN5g2tyoiI6Ptx+vRpfPDBB3f8d4WFhXjnnXdgt9tvGwvq6+sxNTWFM2fO4Pe//z28Xi+qq6uxurqKK1euYGZmBu3t7bBarejv78fg4CD6+/vxl7/8BfX19VmrSp1OJ3bs2IFPP/0UAwMDaGpqgsViQSgUwpUrV/DPf/4TkUgEbrcbTU1ND61LiHRj5/P5sL6+jk8++QTz8/OYm5tDWVkZqqurUV1dnTUOra2tCAaD8Pl8iEQiKC0tRUNDA3Q6Hb90OT6/elCk4p2NjY145ZVX8PHHH+Ozzz7DzMwMdu3aJdr6joyMYHR0FJcvX4bX68X+/fvR1ta2ITFmtVrhdDoxNDQEv9+PwsJCsVpbYjKZYLfbodFoMDY2hrW1NdGOdavx7+7uRl9fHz755BNcvHhRHJu0lWp0dBSXLl2Cx+MRXezYzYToIV8gLRYLysvLsbi4iEAgkNUeLB6PIxaLiWVbUobd4/Fg165dcLlcG+pRqNVqFBcXY+/evVhdXYXP58P09DTC4TCKi4uRl5cHo9EIt9stLqrLy8vIz88XmUupEnZ3dzeSySRWVlYwOTmJRCIBuVwOl8sl3k+hUKC0tBRVVVWwWCyQyWQwm8147LHHsooC0f3R6/Xiwn672iMymQwajQZutxsvvvgiAoEApqenxX7GW4OuTqdDVVUVXn/9dZw7dw4jIyOYnZ3F9evXkUqloNfrEY1GkZ+fj66uLrS3t2PPnj33PfGRMvV79uyBQqGA0+kUSQW/34/p6WnEYjEYDAaxZFBq6ev1erF3717YbLasRIZ0Tmi1WhQVFYmnBnq9HgcOHIBer8fp06fF3kpp7KTiUZ2dnaipqYHBYMCFCxcQi8UwNDQEt9sNs9kMnU6H8vJyWK1WmEymrHPDbrcjEomgtrZ2020vUheX8vJy0a7su6Q+7iUlJXA6nTAYDDxXiGhbxriysjIEAgHI5fI7tkgF/r8dpLRFUbom37x5Ew6HQ1xvtVot9u3bJ27oQ6EQfD4fxsfHRdcIj8eDrq4uRKNRsfw9nU5jcHAQBoMBNptNxAK9Xo/du3cjFAphfX0do6OjiMfjiEajiEQicDqdqKmpQUdHBxwOh0jQS7G7uroaZWVlWXFco9GIm76ioiJoNBoR57aKcUqlEhUVFWhqasLevXuxsLCAa9euwefzobGxccNWhby8POzevRtXrlzBmTNn4Ha74XK5HthNHudX/735lVQQc7O5yv2Qy+WorKwUBUi//fZb+P1+9PX1iVVIoVAIOp0OBw4cwP79+9Hc3Lzp2JWVlaGtrQ1+vx9arVYkMm79nAqFAiaTCbt27UI6nUYmk8GePXtQWVm56fjv3LkTr7/+OsrKyjA1NSWOTVotHgqFoFQq0dXVJY7t1vnXVucUkxlE/wG1Wg2bzYbGxkYsLS1t2iJV6pVcUlICm80Gl8slbn42e0otLbNvamqCWq2G0WjE+fPnEYlEkEgkUFFRAa/XC6/Xi9XVVeh0OiwuLqK8vDzrxC4pKUF3dzeUSiUGBgYQDAaRSqUgl8uzKjPL5XKYTCYUFhbCaDTCYrGgpKQEDodDdFih+5efnw+PxyN+J3dit9uxb98+TE9P4+rVq1AoFKisrMzqO65QKFBQUIAXXngB1dXVsNvtmJycxOXLlzE3NweHwyG+a8899xwqKysfSBFXh8OB4uJi1NbWYmJiAqOjo5iZmcHc3BwWFxdhNpthMBhgtVrR0dGB5uZm7Ny5c9OfpVKp4PV6sb6+jtraWjFx1Gq16OjogMlkgtFoxMDAAJaWlhAIBOBwONDU1ITHH38cLpcL0WgU5eXlKCgowOzsLDKZDNLptCjg1tjYCKPRmFX3RXpfaRnkZkXe1Go1qqqqEI1GkUqlNp2kKJVKsdf01razRETbLcbV19fDZDJtWfvhuwoLC7MKDnq9XhiNRhQVFYnrrUajQVNTE7RaLXQ6HQYHB8UNkMPhQH19Pbq6utDQ0IBEIoGCggJEIhERC1KpFJRKJfR6vYgFzc3NKC8vx8TEBI4fP46lpSVkMhkRL1pbW9Ha2rrhiX1JSQna2trgcDiy4rjUcaS5uRkulytrXrdVjJMeDjQ0NODgwYMYGBhALBZDLBaDXC7fMC+Ukh9FRUXQarVoampCTU1NVrKF86vcnF+p1eot5yr369a5vM/nQ29vL2ZmZkTtPWlbSXt7O9ra2rY89pKSErS0tMDv94sV5Zsl0LRaLTo7O2G1WhEKhdDe3g6n03nbOaTNZsPAwADOnz8vjk2pVKKgoAAej2fLY9vqnLobsgz711EOePbZZ3Hs2DEcPnwYhw4d+l7eM5lMIhgMIhgMIplMbrpXXy6XQ6VSQalUQq1Wiz7Qd8q+JpNJRKNRrK2tIRgMIp1OQ6VSQaPRiOCeTCYRCoWQTCah1+uzsrrpdBqxWAxra2uIRCLiCbNOp4PJZBIXzEwmg1AohJ6eHvzmN7/B6uoqXnjhBbz66qtZKzjo/oTDYQQCAQAQv6PbkeqsLC8vIxaLieSWXq/fMMFKp9OIRCIIBoOIRqOIRqNIJpNiz21eXp7oB/6g6p5IBW0jkQgikQji8bgo1intQZYmkJsd863f74WFBaRSKdGSTErG3fq5pO+3FPh1Oh2MRiM0Gg0ymYzo6hOPxyGXy8XPkSqNSy3T9Ho9FAqFeN9kMgmNRoOCgoIN2X3p/0ajUWQyGZSUlGyYYEhPOMLhMGKxGPLz86HVark6g4j+5/T29qKrq0tcwx90jLt58ybi8fhdd4dSqVTiuipdk2OxWNbrkmg0ivX1dYTDYcTjcTGX0ev1MBgM0Ol0G2KBFDellRJSLNDr9VCr1YhEIllt7RUKhYhZer1+Q0JhbW0NKysrUKvVMBgMIo7HYjERpzQajYi3MpnstjEOgDiGUCgkap9tFjfX19fx+eef4+jRo+jt7cXPfvYzdHd3o76+nvOrHJ9fpVIpRKPRTecqD2KeJt2f3HpuSqua7vReiURC1NtLp9N3NV9KpVIwmUzQ6XRbJhoymQzC4TDC4TBCoZA4Nql5we2O7U7nFJMZxGTGNiRdVIaGhvDZZ5/hq6++wmOPPYbXXnsNbW1t//U9gERERPS/m8yghycSieDatWs4cuQIfD4fUqkUPvzwQzQ2NrIlK9E94GMmokeIlJlOJBKi8nhfXx/OnDmDRCIBt9ud1SqWiIiIiB6+RCKBeDyOeDyOhYUFDA4O4ptvvkEkEkFLSwsqKyuZyCC6R0xmED1CwuEwZmZmMDExgfHxcYyOjmJkZARyuRydnZ3o6OhAcXExe5cTERERfY9mZ2cxMDCAq1evYmxsDIODg5ibm8P+/fvx1ltvccUs0X1gMoPoERKLxTA/P4+zZ8/iwoULCAaDKC0thcfjwf79+7Fjxw5otdqsIqFERERE9HAtLi6iv78fIyMjWF5ehlarxUsvvYQnnngCO3fu3LIOFRFtjckMokdIJpNBMplEIBBANBqF3W7H7t270dLSgoaGBhQUFHCQiIiIiL5niURCFG0sKiqCy+XCwYMH4XK5uCqD6D4xmUH0CLFYLGhra0NdXR3C4bDoEHG7zhNERERE9HA1NDTA4XAgGo1CJpOJrhlsxUp0/5jMIHqEKBQKGI1GGI1GDgYRERHR/wiDwQCDwcCBIHqA5BwCIiIiIiIiIsolTGYQERERERERUU5hMoOIiIiIiIiIcgqTGURERERERESUU5jMICIiIiIiIqKcwmQGEREREREREeUUJjOIiIiIiIiIKKcwmUFEREREREREOYXJDCIiIiIiIiLKKUxmEBEREREREVFOYTKDiIiIiIiIiHIKkxlERERERERElFOYzCAiIiIiIiKinMJkBuUEi8UCAJiamuJgEBEREQEwm83i79PT0xwQItpWmMygnPDSSy8BAP72t79xMIiIiIgAeL1e1NTUAAA+/fRTDggRbStMZlBOeP755wEAy8vL+POf/8wBISIiIgLw8ssvAwB+9atfcTCIaFthMoNygtlsxo9+9CMAwAcffMABISIiIgLwk5/8BABw8eJFPvAhom2FyQzKGT//+c9FsH733Xc5IERERLTtVVRUiAc+77//PoaHhzkoRLQtMJlBORWsDx8+DAD4wx/+gN/97nccFCIiItr2fvnLX8JqtWJ5eRk//OEPWQyUiLYFJjMopxw6dEg8ffjxj3+Md999F4FAgANDRERE25bZbMbJkydhtVpx7tw5NDc3o7e3lwNDRI80WSaTyXAYKNe88847+OijjwAABQUF+OlPf4o33ngDFRUVHBwiIiLaloaHh/Hkk09iZWUFAPDss8/ivffew8GDBzk4RPTIYTKDctaRI0fwi1/8QgRsAGhpaUF+fj7eeustvPHGGxwkIiIi2lamp6fx9ttv49ixY+K1goIC7N69GwDw5ZdfcpCI6JHAZAbltEAggCNHjuCPf/wjLl++LF4/fPgwDh06xAEiIiKibam3txe//vWv8de//jXrdU79iehRwWQGPTKGh4fR09ODQCCAffv24fHHH+egEBER0bYWCATw9ddfY2hoCAD4sIeIHhlMZhARERERERFRTmE3EyIiIiIiIiLKKUxmEBEREREREVFOYTKDiIiIiIiIiHIKkxlERERERERElFOYzCAiIiIiIiKinMJkBhERERERERHlFCYziIiIiIiIiCinMJlBRERERERERDmFyQwiIiIiIiIiyin/B8hsuT2o/pCzAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAABDMAAADOCAYAAAAjdElvAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QMMFyEPGfMaaAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAACAASURBVHja7N1pcFvndTfwP/Z9B0hsJMF9ExeJ1L7bkpx4Uxwndhw7aaZTpx/SNpO2H9pkptN8SGeSTKczTcZt4iaxndWx40a2YqWSLMmSrCikKJHiKu4kCIIgQYDYt3uB94Pm3pcUSUmUKImUzm8mEw8FXIAPLnGfe57znCPI5XI5EEIIIYQQQgghhKwTQhoCQgghhBBCCCGErCcUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6QsEMQgghhBBCCCGErCsUzCCEEEIIIYQQQsi6IqYhIA+Lzs5OHD16FACwe/du7Nq1iwaFEEIIIY+0UCiEP/zhDxgbGwMA/PM//zMNCiHkoSDI5XI5Ggayni/Qr732Gn72s59hYGCA//l3vvMdfPOb36QBIoQQQsgj6fz58/jBD36A3/72twt+TlN/QsjDgjIzyLr12muv4V/+5V8wOzvL/6y5uRkGgwFFRUU0QIQQQgh55IyPj+PVV1/F8ePH+Z8ZjUY0NTXR4BBCHioUzCDr0l//9V/jxz/+MX+B/od/+Ae88sorKCwspMEhhBBCyCOps7MT+/fv5xd6Dh48iL/7u7/D008/TYNDCHnoUDCDrDvzAxmvvvoqvv/970On09HAEEIIIeSRNT+QYTQaceTIEaofRgh5qFHNDLKu/Nu//Ru+9a1vAQB++MMf4mtf+xoNCiGEEEIeaaFQCKWlpZidnUVzczN+97vfUbYqIeShR8EMsm6Mj4/ztTBeffVVPjuDEEIIIeRR9tWvfhWvv/46jEYjzpw5g7q6OhoUQshDj4IZZN1dqEtLSzE4OEgDQgghhJBH3vzFnl/84hd4+eWXaVAIIY8EIQ0BWQ9CoRBef/11AMC3v/1tGhBCCCGEEFzfdgsApaWlFMgghDxSKJhB1oWjR48CuN65hC7UhBBCCCHX/f73vwcAfOMb36DBIIQ8UiiYQdaFI0eOAACef/55GgxCCCGEEFzvYDIwMAAAeOaZZ2hACCGPFApmkHVhbm4OAOByuWgwCCGEEEJwfRsuh7qXEEIeNRTMIIQQQgghhBBCyLpCwQxCCCGEEEIIIYSsKxTMIIQQQgghhBBCyLpCwQxCCCGEEEIIIYSsK2IaAkKWl8vlkEwmEYlEEI/HEY/HwbIsFAoFNBoNlEol5HI5JBLJoueyLIvp6Wn09fVhbGwMRqMRDQ0NyM/Ph1wuv+v3lkql0Nraira2NuRyOWzZsgUbN26EQqGgD26NSiQSCIfDyGQyUKvV0Ov1K3p+OBzGu+++C5/PB51Oh8997nPIy8tDKpVCT08PBgYGMDU1hX379qGgoAAGg4EGnRBCyKpgWRahUAipVAoMwyz5GIFAAIlEApVKBbVaTYNGVv3cy+Vy0Ol0kMlkEIvpVvZemJycRG9vL7q7u6HX61FdXY2amhqoVCoKZhCyXr40U6kUotEopqen4fV6MTs7i9nZWTAMA6PRiPz8fBiNRphMJhgMBigUCkgkEgiF1xOeGIbB5OQkPvroI5w6dQqVlZXQ6XTQarWrEsxIJpP45JNP8KMf/Qgsy+LrX/86KisrKZixhgWDQfT39yMUCqGkpOSOghlvvPEG2traUFJSgr179yIvLw/JZBKXL1/G+++/j8uXL0Ov10OtVq/pYEYul0Mmk0E2m0Uul4NMJuP/dgghhKw9DMNgdHQUMzMziMViywYzFAoFzGYzrFYrpFIpFAoF5HI5xGIxBAIBDSS5q3OPZVnU1NTAYrFQMOMe8Xq9OHXqFN5++20UFxfjc5/7HIqKivhgBsuyyGQyYBgGSqXygc7f6AwgZIlAht/vR3t7O86cOYOWlhYEAgF+JYJlWUgkEkgkEmg0GhQUFGD79u3Ys2cPSktLodPp7sv7FAqFsFgsqKmpQTabhdlspi/1Na6npwc/+9nP0N/fjxdeeAF1dXUrer5EIkFpaSlYloXNZoNMJlu3Y5HJZDA8PIzZ2VlkMhk0NTVBo9HQSUIIIWtUNBrF+++/j5aWFoyOji4bzBAKhRCLxdBqtairq8O2bduwa9eudX/dImvj3IvH4/j617+OzZs3r8lMgYeBUqmE1WpFTU0NbDYbTCYTf4/BsiyCwSAGBwfhdrvx+OOPw2g0UjCDkLUgFouht7cXf/7zn9Ha2oqhoSHkcjmUlZVBq9VCpVJBIpEgkUjA5/NhYmICnZ2d8Hq98Hq9eOyxx7Bp06b78kctk8nQ3NwMnU6HXC6H6urqVcn4IPf2YjwxMYGBgQH4/f4VP1+tVuPzn/88gsEgVCoVTCbTuh2LZDKJS5cuYXR0FGKxGJWVlRTMIISQNYxhGExPT2N0dBSTk5M4ePDgovlONptFLBZDMBiE3+/H+fPn4Xa7MT4+jsOHD6OoqIi2n5C7OvcikQgikQjS6TQNzD1isViwY8cOOBwOqFQqFBUVQalULvgsWlpa0NbWhubmZgpmELJWviinpqZw/vx5vPfeexgZGUF+fj727NmD7du3w263w2QyQSqVIhwOo7+/HxcvXsSFCxdw9epVTE1NAQAMBgNUKhVEItGK30M2mwXLsgCuZ17c7BhSqRT19fWor69f0WvkcjmwLAuhULhsWlgulwPDMBAIBBCJRJQWukaoVCo8+eSTd/R5sywLkUh00899KSzL8nujRSLRHWf/cO9BIpFAIBAglUrhypUruHbtGoxGIxKJBH3AhBCyTmi1Wjz//PMoLS1d9F0fCATgdrvR3d2Njz76CBcuXMDg4CAKCwuhUChuGczgrjvcHORO5lP3ap7IbY28k+vp/ONw11SaX90f6XSazxi6m8fcbK6VzWaRzWaX3U7Fzcey2Sw/F3oQuL8vsVgMoVC45Pswm80wm81oampa8vlerxednZ3405/+tOyWMwpmEHKfL1ATExP4+OOPcerUKYyPj6O6uhrPPfccDh48CIPBwBcaEggEsNlsKCwsxIYNG1BfX48PPvgALS0tOH78OEwmEx/4WGkgIxwOIxgM8sWN9Hr9ql/E4/E4ZmZmoFKpYDQalzx+LBaDz+eDXC6HwWCAXC6negbrEFfANhAIIBAIwGAwQKfTrSgDIhAIwOPxAADy8vJgt9vv6L0EAgH4/X4UFxdDLpeDZVl4PB4EAoEHGtEnhBCyclKpFCUlJaipqVlyTpVKpbB3716UlJTg+PHjaGlpwR//+EeoVCqUlJTc8nrh9Xohk8lgMplgNpvXxDzR6/UiGo2CYZg7up7OP45YLIZOp6P51X0KZIyMjECj0Sw7h7mdx9xqrhUOh5FIJJbcTjV/PhYOh/m50IMQCAQwPT0Nq9UKtVq94q1fmUwGQ0ND/CLug0bBDEJwPco4Pj6Ojz/+GAMDA3A4HHjqqaewe/duuFyuJaO0CoUCSqWS72RisVggEolQUFAAmUx2y4hrLpdDKpXC2NgY3/Fkenqaj3AqFApYLBYUFhaiuroaRUVFUCgU/EVvuW4mEokEk5OTuHbtGsbHx2G32+FwOBAKhTAyMoLx8XEEAgHIZDLY7XaUlZVhw4YNkEqlGB4eRl9fH9xuNwKBACQSCaxWK0pLS9HY2AiHw7Fk5xZyfyzXzWSp82pgYADt7e38lpZoNAqVSgWr1YqSkhK+s878FTKuKOfY2Bi6urowNjYGn8+HQCAA4PpKnNVqhcvlQkVFBSoqKiCVShec65cuXcLp06dhsVhQUFAAi8WC1tZWjI2NIZVK8dtkTp06hc7OToRCISSTSfzXf/0XioqK+KKlkUgEDMPgySefhN1uX/aiH4lEcOTIEczOzsJoNOLTn/70mpj4EkLIw0woFEKpVN60ZoFOp8OhQ4fg9Xpx5swZ9PX1YXJyctH8KxQKYWBgAFevXsXc3BwCgQCCwSCkUil0Oh2sVivKy8tRXl6O4uJiAMDg4CDa2trg8XhQVVWF3bt3Q6lULligmd+RQaFQoLS0FM3NzdBqtUteR0KhECwWCw4cOACj0YhMJgOv14uBgQF0dXXB4/HwXe1UKhUMBgMcDgc2b94Mu92+oOj2/C5jMzMzOHz4MAKBAC5cuIDR0VHYbDY0NzejoaGBtt2sgvmftd1uR21tLTweDzweD8bHxzE9PQ21Wg2n08mfS3a7He3t7RgcHMTw8DCmp6chl8v5eU5NTQ2qq6v514jFYvj4448xPj7Oz08ikQja29vh8Xj4bnV5eXkoKytDbW0t7HY73G43Ll26BI/Hg2AwiHg8jry8PFRVVaGhoQEul2vBHGf+PKqurm7J7IhIJAKPx4MzZ85AqVQu6DYy/32yLIvDhw8jkUgsmNeFQiEYDAZYLBa4XC5s3759QV2M5bqZ9Pb28sXm+/v7EQgE8Prrr8NqtUKpVKK5uRmzs7MYHh5GQ0MDysrKUFBQsORnlkgkcOnSJQwPDyMcDuPgwYNwOp0r/nugYAZ55HE3f+Pj4+jo6EAkEsGuXbvw2GOPoays7KbpZnK5HMXFxRCLxSgoKIBAIIDT6Vx0oVxKOp2Gz+dDS0sLjh07hvb2dgSDQf71GIaBSqXChg0b8OSTT/KvwXUrSSQSOHPmDF577TUwDIN//Md/RGVlJVQqFcbGxnDs2DGcOXMGjY2N2Lx5M7xeL1paWjAwMIBUKoVEIsHviWNZFjqdDmfPnsVHH32E0dFRpNNpJBIJ6PV6bN68GUKhEFqtFnq9nlYRHpBQKIT//u//RmtrK8rLy7Fnz55FwYxsNotgMIhAIID29na0t7cjEokAuF6nwmQyobq6Gi+99BKamppQVla2YFI5MzODS5cu4Z133kFraysSiQR/zjEMA5FIhE2bNuHQoUPQaDSLViBaWlrwr//6r2hsbERzczNKSkrw9ttv8+2Jm5qa0NvbizfffBOzs7PIZrOYm5vD1NQUCgoKUFxcDIZhMDQ0hGAwyO/XXCqYwTAMfD4ffvKTn2BkZIQvNEfBDEIIefBkMhlqampQVFQEhmEwMzODaDS6YP6VTCZx7do1HD9+HO+99x6CwSC/FZZL3Ver1di3bx8+9alPwWw2Q6lUYnR0FO+++y7OnDmD5557DrW1tZBKpQuCGWNjYzhy5Aj+93//FwaDAYcOHUJ5efmCOVo2m4Xf78dPf/pTeDwebNq0CU1NTdBqtQiFQrh8+TJOnjyJEydOIBaLIZfLQSgUgmVZiMViWK1WfPnLX8bOnTuhVCr5AP/8LmNXr15FcXExRkdH8T//8z/w+XxobGyESqVCRUUFBTNWgcfjwfHjx/GrX/0KDQ0N+MxnPoPu7m709PSgp6eH3+Ihl8tx4MABPPHEE8jlcjh9+jTOnTuHjo4OCAQCfsvr9u3b8fnPfx4lJSX8ZxqNRnH06FGcOXMGsVgMVqsVMzMzOHLkCEZGRvjzI51OY/v27Th8+DCam5tx+fJl/PKXv8T4+DgfDJubm8OuXbvw8ssvw2AwQCqV8nPr+fOoL3/5y8sGM3p6evCf//mfsFgseOGFF1BYWAiVSrXgfSYSCRQXF/MFVC9fvoxwOMwHZ0wmEzZu3Ii8vDzI5XK+icH88SwpKeGP39XVhZ/85CcIh8N8m9zf/va3EIvFMJvNEIlE6OzsxHvvvYeXX34Zzz777LLBjFgshv/7v//DqVOn+Mxdo9FIwQxCViqdTmNychLj4+PIZDIoKiriWz7dTuqVWCyG3W7nb6CkUimkUuktCxNNT0/jww8/xAcffIDp6Wk0Njairq4OeXl5EAgE/H60gYEBvPPOO4hEInjmmWdQUVGxot/t6tWriMfjUCqV2LRpE5566imIxWK0trbiypUruHDhAmKxGCwWC/x+PxoaGvDcc89BJBLh0qVLuHz5Mjo6OmC326HT6dDY2HjfOraQlYtGozh79izEYjHS6TS+9KUv8edmV1cXOjo60NLSglQqhVQqtSCYEYlE8O677+LkyZNob29HSUkJGhsb+QspV/C2ra0NXq8XQ0ND+MY3voHCwsIl30t7eztaW1uRn5+PqqoqFBQUoLq6Gi6XC1qtFj/84Q8RDodRWVmJ5557jl+dmJycxMmTJ3Hq1CmcP38eer0e+fn5S/4NdXR0wO/3w2q1YseOHTQpJISQdSKRSGBoaAjf//730dXVBZFIhBdeeAFFRUXQaDRIJBK4evUqPvnkE5w4cQKhUAgMw+DAgQPIz89HY2MjWltbEQ6HMTExAZPJtGDe5vP5cPXqVX4bb39/P5LJ5IL3wD03GAzCZDLxQQauwOFrr72GyclJ5OfnY+fOnbDb7VCpVJibm0NLSwvOnj2LH/zgBxgdHcVf/uVfoqSkZFHwPRgM4mc/+xlYloVarcamTZuwYcMGVFRUUOH2e6CzsxOpVAp6vR5NTU146aWXkEgk8Kc//QnHjh3DsWPH4PV60dHRgatXr8LpdOKpp56CQqFAe3s7Tpw4gcuXL6OgoIBflLnxcwqFQvjNb34Di8WCDRs24DOf+QzEYjGmp6fx61//Gp2dnZidncWlS5eQzWZht9tx+PBhKBQK+Hw+/OpXv0JXVxd++tOfory8HEql8p4UQZ+bm8Mbb7wBtVoNiUSCr3zlK9Dr9WAYBufOnUNvby/a2tpw8uRJCAQCbN++/abH27ZtG/7pn/4JR44cQW9vL7LZLP72b/8WTqcTcrkc9fX1CIVCfHZIWVkZHnvssWXvUbq6uhAMBlFSUgKXy7Ugu4mCGYTcplQqBa/Xi4mJCeRyOeTn58Nms0Eul992cR6ZTLbiPWeJRALT09NIp9MoLy/HwYMH+faUAoEAoVAIdrsdsVgM165dQ3t7O3bs2LGi12BZFtPT0ygoKMCuXbuwceNGmM1m5HI5qNVqpFIpfPLJJ7hy5Qrq6uqwdetWNDU1weFw8LVBFAoFnx5aXV2N8vJyCmasYdw2kebmZuzevRuNjY3Q6/XI5XKoqamB0WjE7Owsent70dfXB7/fD71ej0wmA4/Hg7Nnz2JsbAwlJSV48cUX0dDQwEfV5+bmUFVVBbFYjL6+Ppw/fx779++HRCKBzWZb8B4mJib41OBDhw7BZrNBp9PB6XQCuL4a9uabbyKTySA/Px/btm1DcXExBAIBSktLMTExgY8++gjt7e2ora3F/v37F/2uPp8PHR0dfEBk69at1KaNEELW0PxqaGgIY2NjkEgkcDqd0Ov1/L+Pj4/jzJkz6OjogMFgwBNPPIFDhw7BarVCLpcjk8mgoqICBQUFePPNN9HZ2QmdToctW7bwWYZKpRKBQADDw8OorKyEWq3mt0z6/X643W7U1tYiGAzyQYtkMsnfnAaDQQwNDSEej8PlcqG+vh4KhQIdHR344IMPcO3aNVRVVeHw4cNobGzkAybc4202G44cOYLOzk5cuHABFotl0Y1vKpVCX18fmpqa8OlPfxoulwt5eXm3vWhGVj4PEggEeOyxx1BfXw+n04lMJgOVSoVgMIgLFy6gu7sbUqkUe/fuRU1NDUpLSyGVSmG1WiEQCPDuu+/C7Xajv7+fvyeYL5vNIpPJwOVyYdu2bbDb7RCLxZiamkJPTw/a2tpw7do1yOVybNmyBTt27EB5eTlkMhlmZmYwMzODc+fOYXh4GD09PbBYLPckmJFOp+HxeLB9+3bs2bMHLpcLarUaDMPAbrfjyJEj+N3vfoe2tjaUl5ffMpjhcDiwc+dOtLa2YnR0FCzLYvPmzaisrIRIJIJer0dxcTGqqqrg8/kwPj7OzzPnZ7rPzc1haGgIHo+HD/Dp9fo72spOwQzyyEun03xxQuB6XQCNRnPPt1JwxZ+qqqpQU1ODXbt2oby8fMFjpFIprl69iq6uLkxOTiIUCvFdKW5XNpuF0WjEzp07sXHjRv535rbWtLe3Y2pqCjKZDHv37sWmTZsgkUjAsiwMBgNisRj/GI/HQ10n1smFvLKyEi+++OKCOiulpaVIJpPo7u7GmTNnMDExAY/HA5VKhXA4zNdMEYlE2LZtG5599lk++AAAhYWFKC4uRiaTQTqdxpkzZ9De3s4HAOe//vj4OCoqKnDo0CE8+eSTi7Z+OBwOPiVYpVLBZrPxRbdsNhtKS0uh0WgwPDwMj8eDVCq1qD7HzMwMuru7kc1m4XQ6UVtby2+JIYQQcu9ks1k+w+9GXDAhEAjg7Nmz6Ovrg0KhQHl5+YJrxdjYGE6fPo1oNIo9e/bgxRdfRHl5+YLv8cLCQjidTn4rwKVLlzA3N4fi4mIUFhZCrVbzNcG4jNhsNotoNIrZ2VlEIhE0NzdjeHgYLS0tmJmZQSQS4W9O5+bmMDw8jFQqBYvFgoqKCkgkEgwPD+PUqVNgWRaNjY14/vnnYTQaF9xsFRUVweVy4erVq5iensbFixdx4MABWCyWRWPCMAyqq6vxxS9+ccF1maw+tVqN4uJiPnA0P6g0NTWFrq4uxGIxpFIpPP300wsynmUyGVKpFE6cOIFgMIiRkZElb/ClUikcDgcaGxuxd+9e/uc6nQ4bNmyA2+3GxMQEBAIBKisr8cwzz/CPsVgs2LNnD2ZmZuB2uzEyMoLq6uoVZV5znXSWWnQVCAR80wKhUAiVSoW6ujo8++yzC/5GnU4nxsbG8M4776C/v/+2CnpqNBo4HA6o1WpIpVIwDMM3RZj/N9vU1IQ//OEP8Hq9cLvdUCqVC4IZ09PTuHr1KoLBICorK9Hc3HzHi1EUzCDkAXE4HHjppZeQTCahUCiWzHYQi8XQarVQq9VIJpOYmJiA3++/7ZoAEokEZWVlqKurW7Aawn25abVaKBQKuFwuVFZWwmQy8RdqkUgEo9EIi8UCqVSKUCiEVCqFbDZLH94aJpPJUFdXh9LS0iUnTPNTc6empnD16lU4HA4+HTcWi2HDhg3Ytm3bkhcWhUKBnTt34tq1azhx4gQGBwfR0NCw5HspKSnBvn37bquGzI2cTie2b9/OZ4oMDQ0tSvX0+Xzo6elBWVkZqqqqYDQa77h1LCGEkNuXyWQwMjKyaHEll8shkUjA7XbzKfuTk5Mwm83Yt2/fgu4nHo8HFy5cgFQqRVFREb9yfeM8Rq/Xo6GhAX6/H36/H4ODgzCZTMjLy0NRURHGxsYWbCFhGAbDw8OYmpqCSqXC7t27odFocOXKFYyMjKCoqIgPOAQCAQwMDAC43o7SZrMhFothZmYGwWAQpaWlcDgcS15fFAoF/x6mpqZw5coVxOPxJa+bW7duRVVVFQUy7gObzYaGhgYolcoFP9dqtfx2CG7b9I3zHIVCwRfCnJmZWXJrEjfXqq2tXbTNViQSwWAwQKPRQKFQYMuWLQu283Jze67rIff3cqut6UudU/MLdt4YaCktLUVvby9mZmb47JMbAx5yuRxarRYGgwFTU1OYnZ1dtfsbbv7mdrtx8eJFOByOBZ+Hx+PBn/70J0QiERQUFNxVZi3N+sgjj+spPb/4zv266bRYLAgEApicnOQ7O6TTaT5gMD09jf7+fsTjcSgUCiSTyQX/fisikQgWi2XRlwj3byKRiA+YmM3mRWl03LgIBAK+f3Yul6OTZg0TiUQwmUzLZhep1Wo4HA5+9SEcDoNlWfj9fvT29vKtey9fvoxAILAo04ErbjUwMIBMJoPp6WmEQqEl34tGo0F+fv4dpQ0WFhZi7969uHTpEsbHx9HW1sYXqEqn0xgbG8Pg4CDC4TD2798Pl8tFnXYIIeQ+CYVCePvttxe11uayMmZnZ+H1esEwDJqbm7F161Zs3rwZVquVfyzXzrKsrAwGg2HJzDqBQACpVAqbzQaDwQCv14tgMIhEIgGDwYCSkhL4fD6MjIzwbVPT6TSGh4f57boOhwPBYBA2mw1utxtTU1PYsGEDH8wYHh5GQUEBHA4HxGIx5ubm+AWcdDqNnp4evPPOO8uOg9vtRigUQiKRWFTklJvvVVdXw+l0UiDjPjAajSguLl4UGBOJRPwWcrVaDbPZvCgYIJfL+SBBOp1GLBYDy7KLXkMikaCoqGjJxUWxWAyRSASJRMIHwm48p2UyGSQSCV/kdqULhfPfZygUgsfjQSaT4Y+vUCggk8kgEomQl5e35IIpt7BpMpkQDAb5598ts9mMDRs2ID8/HzMzM7h48SI+9alPLfh+4GqwFRQUoKKiAmaz+Y7ncBTMIBTMEAohl8v5G/n7dcOeTqcRDAbR19eH9vZ2vi1UMpnkv9SSySR8Ph/C4fCCzIqV/G5c1FUqld7091epVCvavkLW7vnMrQgsF0TTarWLPmuuCFo6nYbb7caJEyegVquXPSe8Xi8fELnxAigQCCCRSCCVSu94P7DNZkNTUxMMBgOmp6dx5coV7Nu3j//b6ezsxNDQEIRCIaqqqhZshyGEEHJvxWIxnD9/ftlsOG6hZOPGjXyHOC6Qzt3QZDIZfp5ys0KYQqEQarUaCoUCuVwO8Xic33pYUlLCd63g6mEwDIOxsTEkk0k4nU6oVCpYLBY+g2JmZgbA9QyOQCCAqakp7Nu3Dw6HA7lcDtFoFIlEAizLIhwO49KlSxgZGVnyvXF1qpLJJFQqFQKBACKRyIIFJLFYzAdjyL2nVCqXDFTcGNhYal4sk8mg0WhuOR/munfcLPOUm4/diyKvMpmMn7cHAgF+/naj+VtOlsK1P17NrFaNRoPCwkIUFhbyGcDBYJAP5oXDYXg8Hrjdbjz99NMoLS29q9oxFMwgjzypVAqTyQSLxQKBQIBIJIJIJHJPt1NkMhkMDg7iyJEj+Oijj+D3+6FWq+FyuVBeXs5HJwOBwJIpiyshkUggk8loNeARIZPJUFpaumT3j9VkMplgMplQWlq6aILGrViYTKY7Pr5CoYDVakV1dTU6OjrQ3t6OWCwG4Pq+156eHkxOTsJoNGLz5s0oLS2lD58QQu4Ts9nMdzFYChc8UCgUUKvV0Gq1bOtS6wAAIABJREFU/M1jJpPB8PAwfD7fil+XK2gYDAZRXl6O2tpadHR0oKOjA0NDQ3A4HNBoNBgaGkI6nUZNTQ3kcjm/Wn/+/Hn4fD4wDAOv1wufzweWZZfcMnBbN1JiMZxOJ2w2G4xGI3UneUQIhUIoFIplFwrvtUwmg0QisWa3fisUCuzevRuhUAidnZ3o7OyEXq+HzWZDb28vxsbGoFAosHnz5kXbcCiYQcgd3OxbrVZYrVawLAu32w2Px3Pb+9e4PulceiO3B205DMPwXRj+/Oc/w+fzoaysDJs3b0Z1dTWMRiMfER4fH0ckEsH4+PgdByNuViSIPHxYluXbYq10QsYFvUpKSvDEE0/wq2jL4SpXl5SULPr53a5GcOmPGzduhM/nw/DwMHp7e6FWq8GyLN9yuKGhAfn5+VT4kxBC7iO5XM53MViKRqNZNhNBKBRCr9ff0R55sVgMk8kElUoFsViMsrIyFBYWQigUYnJykt/aMjo6CrVazdfhMBqNKCkpwdGjR+Hz+fiuXm63GyKRCGVlZQuKk3KvZTabsW3btlt2eeBu4CoqKqDRaJbcmkAeLiKR6IHNrWOxGKanp1dta8i9+H7YsmUL+vv7cfHiRXR1dcHlcsFoNKKrqwtTU1OwWCyora3li79TMIOQuwhmGI1GWK1WSKVSTE9PY3R0FKFQCAaD4ZZ7uFiWxezsLL9f02azoaKiYtkUtWw2C5/Ph76+Pr4o1v79+/HUU08tWl3u7e3F5cuXIZFIKBhBbgvXSWS5Qk4syyKVSiGXy/H1Yrg0RG77idPpxOOPP476+nqo1eoVvweBQLAqATS5XI6Ghgb09fXx/eC1Wi30ej0GBgag0WiwZcsWasdKCCEPYO50YxeDlQQkrFYrTCYTRCIRMpnMLW/+GYYBy7KQSCR88UTuOFarFUqlElNTU5iYmEAul4PX60V1dTVfOFokEqGwsBDpdBqzs7OYnJxET08PfD4fNBoNnE4nX9tAIpHwdcWMRiOam5vx8ssvr+h3XK6WFFk/VmsucyevKxAIkEqlwDDMssGMqampNRvMkEqlqKys5OuZ9fX1ob6+HpWVlejr68Pc3BwKCgpQUFBw19uvKO+cEFyPrlqtVtTX10Oj0aCvrw/nzp2D2+2+6fOy2SwikQhaWlrwgx/8AN/97nfx3nvvwe12L5vZwVUuDoVCfEujsrKyRdkcmUwGoVAIU1NTCAQCFOUnt4VlWQSDwUUFyDiBQAD9/f1IJBILqmEbjUZUVFRAoVDw+xlXWl17/rnLpQHfDZlMhqamJlRVVUEoFKK7uxutra18VkZJSQn279+/ZGErQggha5tCoeA7KdzsesEwDCYnJ+H3+/nihvPT+7msC4/Hg+7ubr4DhclkQllZGR+s57IN/X4/enp60NXVhXQ6jaqqKuj1ekilUr6+hclk4herlruekoebVCqFUqm879u0xWIxJBIJBgcHl92KFY/HMTs7e8fztPsRkJHL5SgpKUFTUxO6u7vR2dkJr9eLK1euIJfLYceOHXe0YLZovOhUJeR6MMPlcmHfvn3w+/24du0a/vjHPyKbzUIgEMDhcCzaF5dOpzE1NYVLly7hgw8+QG9vLywWC5/+eLMvPy7quly0l2t51tbWxt9U3klR0lwuh0gkgrm5uTX7hUdWVyqVQn9/P8bGxvgiZCKRiC+4Nj4+jkuXLiESicBisfABjLy8PNTV1UGlUvGttDZt2gStVrugMFQqlcLQ0BCGh4fh9/uxefNm2O32BZF1hmEwNzeHRCJxV78LVzyrqKgIVVVVGBwcRCwWg91uh1QqRUFBAQoLC6mLCSGErEN5eXloaGhAW1sbhoeHcfXqVZSXly/YNphIJOD1etHV1YXp6Wk+k3b+AlBeXh6qq6tx9uxZANcXmpRKJfLy8qDX6/kMRLVaDafTiVwuxwcztFot6urqoFar+ZV4jUaDvLw82O12zM7OYnBwEH19fXC5XAu2T3KLB8eOHYNIJEJ5eTlqamooW/AhoVarl+3Ils1m+cyJ1W4Jr9PpUFRUxHdsW2ouNzIygvPnzyMcDj/Q8+1m4yAUClFQUIBt27ahs7MT7e3t0Ol0GB8f5zscrcZ7p2AGIbgeBXU4HNi2bRt6enrQ3d2NlpYWft9+U1MTdDodH3zgggRdXV344IMPcO7cOWg0GmzatAlNTU0L6l4sFciQy+V8teS5uTl+xUEikSCbzSIajaK9vR1tbW2IRqNQKBRgWRbRaJTvbHI7mRpc5kgwGKRgxhoTj8cxPT19y8eJRKIVVZpmGAZTU1MYHh7G4OAg7HY7Xz1+bm4O/f396OzshFAohN1u56tIG41GVFZWwmazYWBgABcvXsTBgwchlUqh0WggEAiQy+UQCoVw9uxZfPLJJxgbG4NWq+U75swPoiUSiVumPwqFQmSzWSQSCczNzWFubg4SiQQKhWJBMNDhcGDjxo34zW9+A4/HA6fTCbPZzBd6I4QQsv44HA5s2bIFfX19GBkZwenTpyGVSpGXlweRSASWZTE9PY3Ozk709vaCYRiUl5fDZrMtWNE1m80oLy/H+++/j1gsxhd2N5vNC+o+cQtXbrcb3d3dGBwcxJYtW1BdXc0HKbhWsHa7HRs2bMCFCxfQ3d2NTz75hG99zt1UxmIxDAwM4Ec/+hH0ej0++9nPwuVyUTDjIaFSqWA2m5ecz3P18jKZzKoHM4xGI8rLy+HxeBAIBBbM5ViWxdzcHK5du4bu7m7E4/H7fr5xHeu4v1Gfzwefzwe1Wg25XM63pgWA/Px8NDQ0QKfTob+/n+8U5HQ6UVtbuyr1ziiYQci8gIbT6cRzzz0HmUyGDz/8EBcvXkRPTw/sdjvy8/P5iyfLspiZmcHw8DBmZ2dhsViwf/9+PPPMM2hsbIRcLl/2Ro7b0lJWVgalUon29nakUikMDAzAbrcjHo9jYmICHo8HALBx40YYjUb09/fj5MmTyOVy2Llz5223osxkMkilUmu24vGj6pNPPsG3v/3tWz7ObDbjq1/9KhwOx20dV6lUYuvWrfB6vfjmN7+JHTt2wGw2I5fL4erVq3xXkN27d6O+vp4PHCgUChQVFeGVV17BH/7wB5w5cwbf+973UFNTg8rKSigUCiQSCUxOTuLEiROIxWIoKytDWVnZHXVO4VKFw+EwWltb8dZbb6G8vBwulws7d+5c0Iq4qKgI+/fvx7Fjx9Df3w+5XI5Dhw6htraWTiRCCFmnioqKcODAAbS2tuLatWt4/fXX0dvbi+LiYhiNRgSDQQwMDKC9vR3BYBD79+/HX/3VX8FisSx58yeXyzE0NIR4PI4dO3YsKugplUpRWlq6YFXbZDLxz52vvr4eX/nKV+DxeNDV1YX//M//xKVLl+ByuWA2m5FIJDAwMIC2tjaMjY2hqqoK9fX1FMh4RHDBjHQ6veoFyPPz89HY2IjW1lacPn0aMzMz2LFjB7RaLVKpFDo6OqDT6fDss8/izTfffCD3Sw6HA2azGRMTE3jjjTf4+VtTUxMKCwthNpv5v83Kyko4HA5MT09jaGgIlZWVqKqqgtFoXJVAEAUzCJlHpVKhuroaQqEQFosF3d3dGB0dRSQS4buVsCzL76Ezm83YsmUL6uvrUV9fj6qqKj7gwRVVNBgMsNvtsFgsfK9npVKJ+vp6PPnkkzAYDAgEAmhra8PAwABUKhWkUimqq6tRVlYGq9WK/v5+qFQqRKNRjI2NobCwEBaLBXq9Hi6XCwzDQKfT8ZWVZTIZTCYTCgoK4HK5YLfbF1youaiqVqvl94Yu11dbLpfDZrPxdRUopf/uzi+bzYZQKAShUIjBwcFbPicajfJZNdwFhCucxH0WXFpsfn4+KioqsGvXLjAMg4GBAQwNDaG7uxuxWAyxWAwGgwGHDx/GoUOH0NjYyGdAcMfYvXs3ZDIZdDodJiYmMDQ0hJmZmQUXcKfTiZKSEmzbtg1Op3PBFiytVovy8nL+InazsfjMZz6DvLw8DAwM4Nq1a/y2lObm5gWP1el0KCkpgcPhgM/ng0wmw8aNG+FyueikIoSQ+0QkEsFsNsPpdPLFOO+GWq1GWVkZvvjFL6K1tRVdXV3weDyYmJgAy7JQqVRIJpMwGo3Ys2cPdu7cifr6eiiVykXXk4KCAtTV1fGZFXV1dYsWAbi51cjICHp7e2G1WlFRUYGCgoJFW4m5wp+vvvoq2tra0N/fD7fbDbfbjWw2C4PBwK+Kv/DCC9i5cydcLhd/nPnX5aKiIqjVapo/rdK5F4/HF40nl2FaVFTEz7dv3O4tEomgVCr5Yq9c0fPlbtZv9h4ymQz0ev2ijm+3+7lz79flcsFkMi0IiNhsNuzbtw/T09Po6enB1NQUTp8+DZ1OB71eD4PBgIaGBpSVlaGlpQWJRAIWi2XJOeGtzr3589L5c7b542mz2RaMlUKhwPbt2xGLxRCPx+H1epFIJBCJRFBaWrogiCiRSKDX61FXVwefz4exsTFs3LgRZWVlq/b3QMEMQm74ojIajdi8eTNKSkrQ3d2NK1euYHR0FDMzM5idnUUmk4HJZILVakVJSQm2b9+ODRs2QK1WL/ji5LaoFBYWIhKJwGazQafT8QWFysvLIZFIkJeXh5aWFgwNDfFfSBUVFdiyZQufgmW32yGRSDA0NASxWIxcLsfX8ti0aROy2SzsdjvEYjGEQiG0Wi2KioqQSCRQUlKCkpKSBasF3MU+Pz8fdXV10Gq1sFgsS/bL1ul0qK2tRSgU4nvGkztjMBhQW1sLrVaLZDJ5W88xm8185FoikaCurg4ajQYWi4Wf0InFYuTl5aGqqgpyuRzNzc1QKpWorKzE6dOnMTAwgEAggIKCAmzYsAHbtm3D1q1bFxWdlUqlKC8v5wulnT59GmNjYwgGg4jH41AqlbBarWhoaMCWLVsWBR2A6ysK27ZtA4CbVrlXq9U4fPgwbDYbTp8+jdnZ2WXbCEulUqjVahgMBpjNZhiNRpSWliIvL49OKkIIuU+kUimKi4uRTCb5hZ27nXOZTCY888wzfMC6v78fQ0ND8Hq9qKysRFFREQoKCvDkk0/C5XItum5xN14WiwXbt2+HyWRCNptFQ0PDopaPEokEpaWl2LhxI2ZnZ6FUKlFbW8uvIt94TIfDgVdeeQW1tbU4deoU3G43RkdH4fV6oVQqYbfbl31vN16XuRtscvfnXjKZXDSearUahYWF2LRpE8rLyxfNybljGI1GNDY2QqPR8F0Mb8TNtVKp1IKb+BvP/7y8vEUZPbfzuQuFQiiVShQVFWHz5s1wuVwLCpmbzWaoVCpkMhkUFRWhtbUVbrcb8Xgcdrsd+/fvR319PQwGA7Zs2YJIJMIXul3puTd/Xjp/zjZ/PC0Wy4KxksvlaGpqAsMwiMfjcLvdfF0/bvvJjePucrlgtVoxMzOD+vp6FBUVrdq5IcjdSVVBQu6zQ4cO4cSJE/jOd76Db37zm/flNTOZDJLJJOLxOF/chmEYZLNZvtKwXC7n94gtFd1NpVKIx+NIJBIQi8XQarWQSqV8rYB0Oo1oNIpYLIZUKsVfQOVyOVQqFRQKBQQCAZLJJCKRCNLpNJ+er1arEY/HEYlEkMvloNfr+doG3HFTqRRf80AikSz4Yue+hKLRKB+t5goMzZdMJjE3NweGYaBUKvljkZWLx+N8Mdbb3fYjkUiQn58PqVQKhmHg8/mQSqUW/DybzfIR8lQqBYPBAJFIhHQ6jXA4jFQqxa+iceeOSqVatq4Ld+6Hw2Gk02n+vBcKhZBIJFAqlVCr1UtOZMPhMPx+Px8IM5lMS75GLpdDOp1GLBZDJBLhi0dx1e3nn2PxeBx9fX34m7/5G0SjUezduxd///d/D5fLRS2LCSGPtPPnz2P37t389+q9xBW8TCaTyOVy/DXobnG1k6LRKH+zyjAMZDIZJBIJpFIp321kuesWy7Lw+/1863G9Xr+o6wl33eHqj3GLPzdrDZnNZhGPx/nrITcfvNV7W+q6LJfLaf60CucelxkzfzxTqRQ/n5bJZPxnMn+OwLIskskkgsEghELhsnMhbq6Vy+Ugl8v5IrK3c/7fzuc+/zyMRqNQqVT8nH+p40SjUWQyGb7mnlar5efrPp8PLMtCLpfzc6eVnHvz56UajYafs80fT7FYvGisuNeY32BAIpEs+VozMzP43ve+h48//hipVAqvv/46GhoaVi24R8EMQsEMQsia1tPTgw8//BCvvfYaqqqq8JWvfAUHDhy46TYWQgihYAYhhDw4fr8fnZ2d+O53v4u5uTnU1dXhW9/61qpuE6ZtJoQQQtYUlmX57JBUKoUrV67g+PHjYBgGJSUlaG5upiJrhBBCCCFrTDqdRiKRAMMwuHbtGs6dO4fBwUGUlZVh9+7dCzoRrQYKZhBCCFkzuDTOwcFBtLW1obW1Fb29vfB6vdiyZQu2b98Oh8OxKqnNhBBCCCFk9QwODuLcuXPwer3o6upCe3s7ZDIZmpubsW/fviXr3twNCmYQQghZM7j9yb29vTh27BiCwSC0Wi3q6ur4DixURI0QQgghZO0ZHx/HyZMn+bodRUVFeOyxx7B7927k5+evet0YCmYQQghZU7LZLCKRyG11YCGEEEIIIWtDIpFAMBiEUqlEaWkpKisr8fzzz8PpdN6TxSgKZhBCCFkzxGIxbDYbXnzxRRw6dGhRBxZCCCGEELI27du3DzU1NRAKhQu61N2r7cEUzCCEkEdAZ2cnAKCurm5Nv0+BQACZTIb8/Hzk5+fTB0cIIYQQsk4YDIabtjtebUIackLurVAohFAoRANBHqif//zn+PnPf04DQQghhOZahJCHAgUzCLnHjh49iqNHj97246lPPFnJeREOh+HxeG75/Pfeew+///3vaSAJIYQ88nMtmm8R8nCgbSaE3GNHjhwBALz88ss3fdzIyAgkEgkMBgOCwSCkUiny8vJoAB9xuVwO2WwWuVwOLMsCAEQiEWKxGObm5pBMJqHX65FMJiGXy5c8RmdnJ4aGhgAAx48fx6FDh2hgCSGEPHJzLQAYHR2FSCSCyWRCNBoFy7Kw2Ww0iISsQxTMIOQeCoVCeOedd/j/1ul0yz62v78fkUgEarUaIpEIAoEATqcT+fn593XvGVkbcrkcH8jIZDKIx+NgGAbpdBrpdBrxeBwikQh2ux16vf6mx5q/veTdd9+lYAYhhJBHcq7FzbfC4TA0Gg3EYjEymQwCgQDy8/NhNptpQMk9tV5qmK0XtM2EkHtofsrjv//7v9/0sU888QSEQiHfkjIWi2FiYgL9/f24du0a/H4/DegjIJvNIpVKIZ1OI5VKIRKJIBgMIhAIIBAIYGZmBsFgEIlEAjU1NbcMZADXt5hwzp8/T4NMCCHkkZxrAcChQ4f4+Zbf70cikYDH48HAwAD6+vrg8/mQzWZpYMk9QTXMVhdlZhByD3FpjwDQ3t5+y8d/9rOfBQC8/fbbSKVSSKVSiMViCAaDmJiYgN1uR15eHkwmEw3uQyabzSKdTiOZTPLbShiGQSwWQzQaRSqVgkAgQCaTwfbt22/7uOPj4/wWEwDo7e3F+Pg4CgsLadAJIYQ8cnOtG+dbmUwGoVAI8XgcoVAIbrcbZrMZNpsNFosFIpGIBpkAuJ41KxAIFvyMZVlEIhFEo1E4nc5bHuO9996DUCjE9773PRpQCmYQsrZxaY8AcObMmdt+3osvvggA+M1vfoNEIoFUKgWpVAq3243p6Wk+FZLSIR+OIEYmk0EymUQ6nUYikQDLsgu2lySTSYhEImzdunXFx//ggw+W/NnXvvY1GnxCCCGP7FzrxvkWy7JIp9P81pNIJAKv14v8/HxYLBZIJBIa7Ed4rpbNZsGyLFiWhUAggFAoRDgcRjgcRi6Xu+X2JoBqmFEwg5B15Maq2pFIBEePHsXTTz9928f4whe+wF9kuVoJYrEYiUSCv8CazWYqFLoO5XI5JBIJMAyDTCbDBzJSqRSSySTi8TiEQiEEAgF27Nhxx6/zxhtvLPrZm2++ScEMQgghNNe6Yb719ttvI51OI5vNIplMIhwOIxgMLghqyGQyGvhHJIDB1S9jWRbxeBzpdBoMwyzYDqxUKuFwOKBUKm95TKphRsEMQtaN999/f8mfrfQCO/8i+6tf/QqZTAYsyyIWiyEej2NiYgJmsxl2ux1Wq5UGfh2YH7DgglRCoRCxWAypVAoMw0AgEKxoO8lSxsfHcenSpUU/b21tpa0mhBBCaK51g6UyNZLJJKLRKGZnZ6FWq5Gfnw+73Q6FQkEfwEOIW2TiAhlc0CIejyOVSvELUFyR9oaGhts+9vwaZufOnaPBpmAGIWvX7373uyW/xH784x/f8TG/+MUv8hdZ7qZXKpUiHo/D6/XCbrfDbrcjPz+fPoA1aP4FMZ1O89tLEokEXw+DYRjs3LlzVV5vqS0m8/+NsjMIIYTQXGuxGxeRkskkMpkMEokE/H4/PB4PHA4HbDbbba3Ik7Uvk8ksyJQVCq/3yYjH4/wCokgk4oNcu3btWtHxb6xh1tfXRwtLDyqYwaXd3AqXIr0acrkc4vE4stksxGIxZDIZf5IRstYcPXoUgUBg0c9nZ2fvKP1xuYvsr3/9azAMw0eHJyYm4Pf7YTQaYbfbqW/6GsGlI3L/C4VCSKVS/AWR23/JMAz27Nmzaq+71BYTDm01IeTO5iJcTZv58yCBQACRSLSq8x4CflVcJBJBIpFAKpXSoJD7NtcC/v8i0s9//nN+vpXL5RAIBBCNRjE1NQWLxQKbzQaNRkMfyjqdo924dSSVSvG1y7h/z+Vy2LJlyx2/DtUwWyPBDJZlMTs7i0QigUwms2wQQyKRQK1WQ6vVQiAQ8P+7U+FwGG+++Sbi8ThcLhcOHjxIHR3ImrVU2uP8f1uNCywAvPTSSwD+f00NLqIciUQwMTGB/Px8FBQUwOFw0IfygC6QiUQC8XgcuVwOkUiET1Hkghm5XA6pVGrV900ut8WEQ1tNCFlZEINblfX5fAgGgwiHw9cnUmIxFAoF8vPzodfrodVqKaixSlpbW3Hs2DFYrVY0NTXd9dY7QnOtO/WlL30JAPDb3/6Wv25zcy6/34+xsTE4HA7Y7fbbaplOHvx3ejqdRiwW47eUcPUwuIzZVCrFP/5uapdxqIbZGglmpNNp9PT0wOPxIBQKLRvMkMlkMBgMyMvLg1arhcFggNFovOOMimg0ig8++AB+vx/bt2/Hjh07KJhB1qyl0h45q5H+eCMuU+Ott97iVw0BIJlMYmZmBsFgEBaLBWazGSzLQiQSUauxeyidTvNdSLiLIve5RKNRMAzDBzIef/zxe/IebrbFZP5j6CJKyM2xLAu/3w+fz4eJiQkMDw9jamoKMzMzAACpVAq1Wo2ioiI4nU4UFBTA6XRCo9FQJsFd6ujowH/8x3+gsbEREomEghnkgc61AOCFF17g//sXv/gFv2KfSCQQCoUwPj6O4uJi2Gw2aLVaZDIZPmuLPHjZbHZBtixXw4xboOc6yzEMAwCrtu2XapitoWBGPB7HyZMn8ec//xljY2NQq9UQi5c/jFwuR2lpKZqamrBr1y6UlpZCpVKt+I9aKpWirq4OoVAI5eXlVEmYrFnLpT1yVjP98UZf/vKXAVxPh5wf1BgdHYXX64XZbIbJZILRaOQzqKjV2OrhMjG4FRuuNgb3/0KhkC8sdeDAgXv6Xm62xYRDKwKE3Fwmk0EgEMDx48dx8eJFdHR08OnH3DYTLgMjl8tBpVLB6XTiC1/4Aurr6+F0OiEWiylLg5CHaK7FeeWVV/igRiqVglAoRDabxdDQEKamppCXlwej0QidTgeBQACxWEwLSQ8Iy7J8Af1EIoFIJMJv8+WyMbjHsSy74noYt0I1zNZQMINhGAQCAXg8HszOzmLv3r2L2kJms1lEIhHMzs5iamoKV65cwcTEBMbHx/HCCy+grKxsxSlYGo0Gzz//PNLpNAwGA7Ra7W0/N5fL3XIicTuPuRfPJQ+fm6U9zn/MvbzAcumQb731Ft9ijGEYMAyD6elpWCwWGI1GaLVayGQyyGSymwYlya2DGFwWBsMwiEQiyOVyiMVi/M+4z+B+tOG61RYTTmtrK0Kh0G31RifkUeTxeHDx4kX8/ve/x/j4OIRCIbZt24bCwkI+O5RhGESjUXR1dWFoaAhXrlxBMpnE448/jqeffho2m+2WCzA3BkYehNWayzzoORHNyWiudb/mWjcGNd58880FW0kzmQympqZgMBhgNpuhVqshlUohlUppznWfcMVbua298XgcLMsiGo0u6kqSy+Wwd+/ee/I+qIbZGgpm3Bhg+PSnP42KiooFP2dZFqFQCF6vF/39/Th58iQGBgbgdrtRXFwMpVJ5y2AGt3opkUggFAohl8vvKNWHSyNSKpXLZoPczmOWwhWGSafT/M3gnaSRcX9IAoGAUlIfAjdLe+Tcq/THG3GZGm+99RYEAgGfHSAQCBCLxSCXy2E2m6HX6/ksDcp6un0Mw/AVrhmGQSKR4NNNuRZeQqEQLMves+0kS1lJu6+jR4/i5Zdfpg+TkCWMj4/j+PHjuHDhAvLy8vD444/j2WefRVVVFd8KO5PJYG5uDi0tLTh37hxOnjyJjz76CGKxGDU1NTCZTMt+r86fRwC44wLnXLD0TuYQ89/D3RRYn38cqVS6omsJwzBIp9P8Fsg7udG78fXv5jjcVkAqNk9zrZX4i7/4CwDXs2NTqRQfpIzFYojFYtBoNNDpdNDr9XxAg7Jj710Qg8uKTSQSfObF/G5yXAZzNpvFY489dk+vI1TDbI0GM6RSKQoLC1FWVrZsMGLz5s2w2+348MMPcebMGZw6dQpmsxk1NTUAwLcpZBgGcrkcSqUSsVgMMzMzmJubg9VqhU6ng1KpxNzcHLLZLKRSKVQqFUQiEV+Eh1v9VKlU/EmcSqXg9/sxOzuLwsJCqNVqyOVyyOVysCzLR+pmZmYWPEYmk0HO3hy0AAAgAElEQVShUCy6gHHFYbjq2olEAsFgEKFQCHl5edBoNFAoFFAqlRCLxQsuoje+T7VajWw2i3g8Dr/fDwBQKBRQKBR8sVSdTnfTLzmGYRAOh/kOLxqNhtLXHrDz58/fNO2RMzs7i87OTtTV1d2X98UFNX75y19CJBIhFAohHo9DKpUiEolAo9HAYDBAo9FALBZDqVRS//TbuEiKxWJEIhG+JkY8HkcikUA2m+WDRvv27bvv7+/IkSMreiwFMwhZms/nQ1tbG6LRKA4ePIgvfelLcLlcC7oWSCQSGAwG7Nq1i9/K984770AgEGBmZmZRsXSumGg8Hkc4HObnEQKBAAqFAna7nZ+LSKXSJbMMuGNwe76j0Sji8fiCwLRCoVhykYV7LlexPxqNIhQKIRQKQalUwmKxQK1WQ6lUQi6XL3p9LkWb6y4ikUgW/S56vR52ux1KpXLZ7Yzce0gmkwgGgwgEAlAoFHydNYVCwW+VXA7XEYprnRgMBhEMBvlCrFqtFnK5nF8Nv3EOxc3luN+TZVmEw2HEYjGk02lYrVb8P/beNDbO87zXv2bfZzjDfd9FSiJFiVqs1bISOV6i2E6dNouTtjhFUODEaNGiOR9yAhz04JwvDU6BExSnbVwEaW05iy1ZTmzZlhdJtiRbO0VKFPdN3Ibk7Pv+/+D/85QUSUu2tVDSewGEZc5w5p3lfZ/7+d33/bu1Wi3ZbBabzSYTbMuJIKFQiFQqhVqtxm63K9n3ByzWEojq2Jdffll+1+BT/7+5uTmcTidOpxOLxSKrY5VE0q1BtPsKjzJRmRGPx6V4MV/MuBPVsoqH2QoWMwApDiyH1Wplz549jIyM8NZbbzEwMMD09LS8vbe3l6NHjzI5OcmmTZt4+OGHeeutt+jp6SEYDLJjxw42bNhAaWkpv/zlLwmHw9TV1fHkk09SUFBAIpHgwoULdHV1ce3aNZn9FLN8Z2ZmCIfD5OXlUV1dTWtrK1u2bMHj8XD+/HmuXr2K2+0mEongcDioqKigubmZ3bt343Q6F7yWZDJJb28vPT09dHd3EwgECIfDxGIx7HY7VquVoqIitmzZQkNDA2VlZQtOLnGcExMTPPHEE0SjUTo7OxkeHqakpIT6+nquXbuG3+9Hp9Px/e9/n6qqqiWDANEu8OKLLxIOh6murubpp5+msLBQ+VbfRW6m7FHw4osv8g//8A939PjEpvU3v/mNrNQQwXAoFJITiISwJgJBhf8MvkUAHggE5FQnYSYllH/gjlZizCcQCPDKK6/c9P1feeUVpdVEQWEZkskk4XCYTCYjN/oWi2XRJlWr1eJwOGhqapJmoGazmbq6Osxm84L7hsNhxsfHef/99xkbG8Pn8xGLxVCpVBiNRoqLi2lsbKS1tZWmpiaZpJkvRsTjccbGxuju7qanp4fZ2Vm5KXc6nVRUVLBlyxbKy8sXxDLib4eHh7l06RLd3d34/X65qdfr9TgcDsrLy2lvb+ehhx5alNw5d+4cr7/+OmVlZTQ3N1NXV8cHH3zA2NiYnHZnMBgoKSlh165dNDc3U1NTs2jjPz4+zsWLF+no6GB2dpZ4PI5Wq6W4uJiGhgY2bdq0rNG8iIPm5ua4cuUKZ86cYW5ujmAwSCwWk4ml/Px8Vq9eTUtLC83NzVKYSafTTE9Pc+bMGc6ePUt7ezsajQa/309PTw8ATqeT/Px8Ges988wz1NXVLXutDIVC/Pa3v2V8fBy73c4PfvADiouLlZPoAYy1BGKs669//Wui0SgqlQqdTkcymcTv92Oz2WScZTabsVgsSiLpCyL8ysSPMPEUZuzCGwNgz549d/TYFA+zFS5m3AidTkddXR2lpaXSbyMajcrbh4aGOHjwIJcuXWJqagqbzcZbb73F4OAgBoOB8vJy6urqsNls/O53v2N2dpZdu3bJDEgikeDq1ascPnyYU6dOyUV0YmKC6elpYrEYsViMwcFBysrK2L59OyqVCrfbzfvvv8/ExIQ0gBkdHcXpdLJx40YqKytpbm6WQUQikWBqaor333+fTz75hO7ubiwWC3q9XpaRh0IhstksExMTcnSsyKrMP86zZ89it9vx+XwcP36ccDhMa2srJpOJs2fPcvnyZaLRKJs2bcLhcFBQULDofQ2HwwwMDPDyyy9LM8E7oS4qfDYHDx686fseOnTori2wYvrJr3/9a1lOK5TqVColxYx0Oi2Dwgc5azBf2RdBfzAYJB6Py7YStVpNLpfj0UcfvavH+sYbb3yhv1GqMxQUFmMymcjPz5dToYaHh6Xx+VIZ+ry8PPLy8li7du2i24SQ0N/fz7Fjx3j11VcJBAKyajSXy5FOpzl9+jTV1dVMTk5iNBqprq5eIGgkk0k6Ozs5d+4cn3zyCePj46RSKbRarcw8WiwWPB4PW7dupb29XQoSYiLdqVOneO+99+jr60Oj0cg4Q7TI6fV6JiYmMBgMtLW1YbVa5fN3dXXxz//8z6xdu5aHHnqI1atXc+zYMTwejzTPc7vdBAIB3G639A0R8VAmk2F2dpZz585x4MABzpw5g1qtprS0FI1Gw9TUFNPT04TDYfr6+pb8XDKZDH6/n1OnTnH06FGOHz8uW1tEAigYDBKNRlm3bh3hcJiioiLy8vLQaDTyGE6ePMmvfvUrvvnNbwIwNTXF+Pg4+fn51NfX43a7uXLlClevXqW0tBSTybSkmCG8EQ4cOMDIyAhNTU08/fTTipjxgMdagu9+97sA/Pa3v5U+ZmLTLdpPzGYz4XAYh8OByWRSEkk3gah6j0Qi0qMkHo9LYVKIGJlMBuC2tpIsh+Jhdh+IGSLQTyQSMuuwXOuE8Ncwm81s376d6upq1qxZc9OLQTQa5fjx49TW1lJfX89jjz2G0WhkenqaX//614yMjHDkyBEikQgGgwGNRsO3vvUtKYr84Q9/oLu7m9OnT7N9+3YsFgvNzc0A+Hw+Ll++zOHDh/H5fKxatYqvfOUrFBcXo9VqSSQSfPLJJ7z99tscOnQIjUbDmjVrKCsrW1TaGI/HOX/+PGq1GqfTya5du2hqaqKyshKr1Uoul+Ojjz6is7OT4uLiJcUMYawai8VYtWoVu3fvXlD2qnDn6erqYnBw8Kbv39/ff1fKH5daYH/zm9/IC342myUejxMMBgkGg7K/U1RhPUgLrFD1xThVUcotgldhqqpSqW77dJKbZXR0dElB5d133wWgubmZysrKRX+joKCwmJKSEjZv3szk5CQ9PT0cPHgQtVpNTU0NVqsVnU4nvRlu1OaZSqUYGRnhvffeY//+/QBs2rSJ3bt3Sx8xj8fDRx99xMDAAK+++io2m43du3fLdSKZTDI5OclLL71ER0cH8XicPXv20NDQQFFREYlEgrNnz/L++++zf/9+ZmdnycvLo6GhAb1ej8fj4ZVXXuH06dO43W5aW1tpa2uTjz83N0dfXx/vvPMOx48fJxgM8nd/93fU19cviGWy2SyRSISuri5mZmbkdaWwsJBEIsHHH3/MG2+8wZEjR7Db7axfv17GQ7FYjJMnT3L48GFOnjxJfX097e3tbNmyBaPRSDAYZHx8nJMnT3L58uVl473R0VFeeeUV+vr6sNls7Nu3j+rqaim8dHZ28v7773PmzBlMJhO1tbVs3LhxUayUTCYZGxtDpVKRSqV4+OGHqampobS0FKPRuEA8Eomu6/F6vQwMDOB2uyksLGTHjh1KTKbEWov49re/LUWN+YmkbDYrK6NEtbfZbH7gE0nLIeJUUX0RDAZlDDv/3+LnbogYAsXD7B4QM3K5nDS4mf+7+UJGZ2cnQ0ND0mPD5XIt+ViBQACfz8cTTzxBRUWFzHCIKoabPZaGhgaeeuopKioq0Ol0eDweZmZm+OCDDzh37hzd3d3s2rWLr33ta6xatQqbzUY8HiebzZLJZDh27Bj9/f2sWrVKLlqhUAi3241er2fNmjU8/PDDbNu2TY64zGQymEwmwuEwb775Jn19fXR1dUmTn/kkEgkGBwfZtm0bzz77LJWVlbhcLsxmMyUlJYyOjsrxtzU1NWzatGnRa7127RonT54kmUxSVVXFunXrFpWyKtxZXnzxxS/0N3c7YwD/Walx8OBB2Xqi0+lkP7Xf78fhcGCz2TAYDFgslvv6+yZ6qcVPOByWfdnZbFZmF4EVI2IIfvKTn/CTn/xk0e9FefXzzz+vlDIqKNwklZWV7Nq1i7NnzzI1NcXx48eJRqM0NjZSV1dHSUkJLpdrgeeQWq1Go9Es8poQiYxz587h8Xj44z/+Y3bt2kV7e7sUiSORCJWVlbz99tu88cYbvPfeezidTlpaWmRV6ZkzZzhz5gzZbJbNmzfz+OOPy018JpPB4XCQyWRky25HRwdlZWXE43GGhoY4e/YsXq+XlpYW/uRP/oTm5mbZoioSJIFAgAsXLnD27Fk6OjowmUwLWkVEm0ZpaSnr1q3j4Ycfll4fIh6KRCK8+eabDA4OLoiHhJjR0dFBLpfjm9/8Jps3b6a6uhqtVkssFmNycpJIJML4+PiyYsbs7CyZTIba2lpaW1vZu3cvpaWlMmFWWFiIXq/nn//5nxkeHqarq4vVq1cvEhkSiQS9vb3s2rWLHTt20NLSQn5+PiaTCZ1Ox9jYGCaTiUuXLrFu3TrpiTSfyclJTp8+jd/vZ/Xq1ezcuXNBNYuCEmstJ2qIPYbw2gsGg/j9fnlNMRqNCzz1HmSEUXAul8Pn8xEOh6UHhmj1TaVSqFQq1Gr1XfEsux7Fw2yFixlCAfP7/YtEBWGGNzk5yZEjR+ju7sZms9HS0rIoKyjQ6/UUFhayfft2KioqFtx2M2KGXq+nvLycdevWsW3bNvl7m83G5s2bGRkZkRUR9fX17N27F4PBIL0DHnroIXp6enjvvfdk7+f8x3a5XDzyyCOUl5ezefNmqqqqFiima9euZXp6muPHjzMzM8PVq1fZvHnzsu+d8P4QxwDgcrmoqanB6XTS09PD8PAwiURigQlYIpFgYmKCrq4ubDYbVVVVVFZWKpNQ7jI/+MEPeOqppxb9fteuXQD8zd/8DX/0R3+04LaVVk4mju/QoUOy8kC0VUSjUQKBACaTCavVisPhuO/6OzOZDJFIRIoXiURCZkxEhYY45+90z6WCgsKdp7CwkA0bNrBz5046OjqYnJzk2LFjXLlyhZqaGqqrqykqKqKoqEiOu3a5XLIlYX4lajwe58yZM/T392Oz2dizZw8PPfTQourTiooKgsEgFy9epKuri3Xr1hGNRjGZTExMTPDxxx8zMTHB+vXr2bt3Lxs2bFjgi6HRaNDpdHJilcDv99PX18f4+DgFBQVs27aNXbt2LXr+/Px8RkZGmJ2d5cMPP6Szs5PKyspFYobX66WoqIi9e/fS0tKyoBVmfjw0NzfHwMAAW7ZsIZfLEY1GuXr1KjMzM5SXl/Pwww/T0tKy4L0qLCxkZmaGsbExLly4sORnY7FY2LZtGzabjdbWVtasWbPgGITg/vLLL+P1ehkZGZFTY+aTzWYJBALU1dVJ77H5x1JTU0NlZSWDg4PS40S0qwgmJiakwFRRUcHq1auVNgEl1rppUUPEXJlMBrVaTSqVIhwOL/AxMxqN2O12LBbLAydqzPfCEBUZoVBIjllNpVILzILvlmfZ9SgeZveAmJFIJLh06dIigybRwzQ+Ps7Vq1c5c+YMkUiEVatWsWvXrkWjXAVlZWW0t7d/4YyvXq9n9erVi4QQrVZLYWGhzAqIlo75IoIwnXI6naRSKWZmZha8rtLSUvbs2cOWLVtksOD3+xdcUMLh8IJ/T01NLXIxF8e51DGI22pra9m6dSsffvgh4+PjTE1NyfLMdDrN7OwsExMTeL1e9uzZQ2Nj46LHUbjz3KiEsb6+np07d94Tr+WZZ54BPq3UEH3eQv0OhUJyEcnLy8PhcMgJKPeyiBEOh6VwI5zsxUKZyWTI5XJotVpFxFBQeIAwGAxUVlbyF3/xF3R2dnL27Fn6+/vx+/309vbS398v76vT6SgtLWX16tU88sgjNDQ0UFpailarld5Zly9fZnp6murqamw2G5lMhpmZmUUxlMlkor6+nqGhIdxuN9PT01RUVDAzM0NnZyeRSITS0lI2bNiw6Nqbn5/P5s2bqaysRKvVyuv08PAwfX19xGIxioqKWL169ZJitF6vlybmojXm+mMUbcMVFRW0trYu2rgbjUby8vLQarVyapvIqgaDQbxeL0ajkVWrVmG32xe1H+t0OpqbmxfFc/Nf44YNG2hoaJAbwHA4TCQSWSBSiKlS8Xgcv98vK+quf73V1dWyTeb6YykvL2fbtm2MjY0xOjrKpUuX2LRpE3a7XU65m5qaoq+vj7KyMqqqqnA4HMp0OSXW+twx16FDh6SfhvhuCVHSbDbLSR1i4tz9PjZYvF4Rk8XjcXmOixHKwsZApVKtGBFDoHiY3QNiRiAQ4PXXX8duty+6LZ1OEwqF8Pv9mM1m2tra2L59O+vXr18wcUOUAqlUKmw2GyUlJV945rJOp6OiooL8/PwlbxPzy/Py8hYpm2q1Wo5IEheQ+UKEGHMWiUQYGxtjeHgYr9e7YGEMBAKMjIwQCoWwWCyEQqElF05xDFardZEAoVKpKC8vZ8uWLZw+fZrx8XEuXbokhZhUKsXAwADXrl1Dq9Xy0EMP0djYqAgZCrcFkd04ePCg7FE0GAwyaBQZKr1ej9FoJD8//57qExZ936FQiEgkIs2jxKhVUZmh0WhWXDuJgoLC7UeMS62vr8fhcFBfXy+nZgQCATwej0wwjI+P09/fz+joKENDQzzyyCM8/vjjFBUVoVariUajhEIhwuEwoVCId999l46OjiWf99q1a4yNjRGNRmW7Xzabxefz0dvbSzQaXTZm0mq1sudepVLJTbXP52NgYIBYLPaZ8ZZKpZJxkpgYEgwGF8VUlZWVlJSULClkq1QqOfElFovh9XpJp9NEIhFmZmbkMVRWVi5ZwaDVaikvL1/SM0zEUQaDgVgsxszMDIODg0xPTy9KIImRryLbvdSoV71eT01NDUVFRUu+H2VlZWzZsoXDhw8zMTHBuXPnWL16NXa7nVQqxfDwMGNjY8Tjcdrb21m1apUiZCh8KVFDJJKEJ4Q4d4LBoGzBt1gsaDSa+3IEcDQalaOnxch7EZvNb/NdCabrn4XiYXYPiBnZbBav10sikVjydpPJRFNTE6tWraKtrY0tW7YsUr2NRqNUsIVg8EWVRrVajcPhuGFpnxA2llo8l1uAotEoU1NTnD17lqtXrzIwMEAikUCtVsvXE4vF8Hg8xONxaRq11MKpVqsxmUzLtoUUFRWxbt06XC6XnHG/adMm8vLyZGZnYmKCvLy8z2zbUVC41aLGa6+9JvsRM5mMVMyNRiNWq1WOd3W5XCu6TC6bzRKNRolEIrL6QrwWUeopzt8nnnhC+QIoKDzggoaoQhCVAsIceGZmhunpaUZHR+nr66O/v5+enh7effddkskkZWVl7NixA61Wi9/vl6Z/fr+fEydOLNumF4vF8Pl8mM1mOekEPjWrDAQCZDIZGTMtG+Bdt8GJRCLMzs6SSqWwWCwUFRUtuQkSsZTFYpHXyuvjPK1WS0FBwaKxsUshpg1kMhni8TiBQIB0Oo3T6aSgoGDZY7DZbMu+vng8zuzsLBcvXqSnp4f+/n5ZTTs/xhTX+c8S2UVl7lKJOfi0CqSpqYmysjImJye5cOECzzzzDMXFxaRSKXp6ehgbG0Ov19Pe3k5tba1y0ijckpjr4MGDsjpUpVLJlte5uTl5fohWFLvdfk+3m4uEWSQSIRKJyIpglUpFNBqVI1bF9eJeqJJVPMzuATHD6XTyX/7Lf6G6unrZBaC8vFwuuGazedGi5XA4qKmpuamxNXeTkZER3nnnHQ4cOEA8HqesrIzGxkYKCgqkyZOozBgYGLhhYCSqQJbC4XBQV1dHY2Mj3d3dnD17lm9/+9sUFhYSjUa5cOECs7Oz1NfXU1FRsewCrKBwqxHj60TWQK1Wy9Jhv9+PRqORFVl5eXkrTtQQpsRCuBBqv9iYBAIBtFot6XSaffv2KR+4goLCshtgMVK1rKyMlpYW9u7dy8jICKdOneJf/uVf6Orq4vXXX2ft2rVYrVbpsq/VarFYLJSVlS27yRaG5NlslpaWFux2u0yEFBUVMT09/aWO32AwYLfbl0zgiGzvrWod1Ov1SyaqRGXuZ12vrzeYF4yPj/PBBx+wf/9+QqEQpaWlNDU1UVhYuMB40+fzLVv9cv37sVxVsMFgoKioiM2bN3P8+HGuXLkizU9TqRRdXV243W7Ky8tZs2YN5eXlygmicEtFjUOHDpHL5VCpVGSzWVKpFKlUCoPBQCQSwePxyMlzDofjnpqAMt+rLJVKEYvFZHtNJpMhnU6TSqWkqbLS6qtwS8UMg8FAa2srTU1NS95uNptvqNqLUsGV3CaRy+Xo7+/njTfeYHR0lO3bt/Od73yHkpISLBaLVELdbjc2m41jx44tWZFxfaCwXAWJuH3Tpk14vV6uXbvGxMQEDocDj8fD8PAwRqORrVu34nQ6lXJGhbu2wP7+978nlUpJkXJ+f6fIIIhWFDF68G4hSrsTiQTpdFoenzCVSqfTADz++OPKB6ygoLBAUBATSuZvvtVqNXq9Hr1eLzf+4r+//e1vGRgY4PLly8RiMYqLi2Ubg9VqpaamhmeeeYaysrIbHkdhYaGsajWbzRQWFjI3NyePcTlBQHj9iFaT+VNWwuEwbrebioqKRRufdDotfcOE4PBlevPtdjsVFRXSyFz8hMNhZmdn5bX3+rhLTCZYisHBQd588016enrYsGEDzz77rPTfEDFZLpdjcnKSAwcOEAqFPvMYP+v1iQTUhg0bGB4e5sSJE/T29lJcXIzNZuPq1avEYjHWrl1LUVHRfWWKrbAyEO0nBw4cQKVSSaFPjCVVq9XE43F8Ph8Oh0MmklayqCGEC+FXJmKxWCwmPdpEpbtKpbqr41UV7mMxQ3g/zPfAuB+DmWAwyMjICB0dHTgcDtra2vj617++YMKIEHf6+/vRarVLOmYvFWQsh8lkYsOGDfT29tLZ2cnVq1dlqdXMzAxr1qxh+/btN1XiqaBwuxCO4gcOHECr1ZLNZsnlcjJzkEgkMBqNBINBQqEQdrv9jldqhMNh2XPp8/mIxWJoNBpZlSFQ2kkUFBTmr9Fzc3NMT0/j8XgoLS2lqKhoSU+u+dhsNioqKrBarbIVIp1OS08hMV5Rp9PR1tZGU1PT5xIKrFYr5eXlDA0NEYvFCAQCS1ZYpNNpxsfHSafTUgCZb8oZCoWYmpqiuLh40YYnm80yPT0tvSZEf/4XxWw243K50Gg0aLVabDYbGo2GcDjMzMzMkoJFJpPB4/Es8uoQTE9Pc/78eQBaWlr4+te/Tn5+/oLqilAoRCAQuCUJH4PBQEtLC52dnZw4cYJLly6Rn59PTU0NY2NjWK1WNm/ejMPhuO9NGRXuHs8++6z898GDBzGZTFJ0jUaj6PV6ksmk9KlxOp3k5eWtKFFDiBiidSSZTKJSqaSxvHg9YpiEEpsp3FYx435lvqeFCGg8Hg+pVIr8/HwcDsciISOVSjE1NUV3dzfRaPQzzXhSqRSzs7OfmSnQarU0NDRQXV2NWq3mk08+YWZmBqPRiFqtprq6mrVr1yoZAIUVtcCK9pN0Oo1er5c9jsK4KRwOS+O32y3ECbMs0VYi+tRFFYZok9FqtXzta19TPkQFBYUFYsDw8DAffPABJ06cYOvWrezYsYPt27djMBiW3bDGYjFmZ2dJJpOLfMA0Gg0FBQUMDw8zPDzM5OQkpaWli6rWcrmc3IgLc3QhAhcUFLB69WrOnz+P2+2mu7ubtra2Ba0VyWSSubk53nnnHdLpNDU1NezcuZPCwkLWrl3L+fPnCQQCjI2N0dzcvMgQPZ1O43a78fv9GAwGVq1adVMVJDcrxpSUlGC1WvH5fLjdbmKxGOl0ekHcFI/H6e7uZmxsbMnHSSQShEIhCgsLKSgowOl0Lvj7dDrN6OgoJ0+elF4an5VAuhE6nY7a2loaGxspLCyko6MDrVaLx+PB7/fT3Nwsx8QqKNwJ5vtqiPYTUbERjUYxm81EIhE56vNuixrxeFyKF6ICY/50EtGGJ9qXlxq/q6CgiBmfY9EqKyvD6XQuMqESRjzCBFEsmrOzs/T393PlyhWi0Sh2u12ODbp+okkul5P9bsuh0WgoLCyktraW2tpa+vv7cbvd5OfnU11dTWNj46LFW0FhpSyur776KrFYTIoFwp9CGGyKiT/CuOpWixjiJxaLSfM5IaiIc1aj0Si+GAoKCksiJnqk02m6urpkoO1yuaitrV3kASE2Eb29vbzzzjvMzs5it9upr6+XbQ96vZ6NGzfKdtGLFy/icDhYt26dbL0QJnjnz5/n2LFjWCwWtmzZwiOPPAJ82nIiPDQmJyc5deoUlZWVCxIsU1NTXLhwgcOHD2Oz2dDpdCSTSUpKStiwYQOvv/46U1NTnD59mra2tgWG5LlcjnA4TF9fH9PT01gsFpqbm2+ZmKHT6XA4HJSVlTE1NSWntrhcLlwu14KY6tSpU/T09CwdvGq16HQ6gsEgwWCQeDy+4D30+/1cuXKFjz76iFAohMlkkr346XT6M1uBl0OM6W1tbeXjjz/m/PnzssS/rKyM6urqe9qAUeHej7vE91rEWaIqVZid22w26fVzpxAJJb/fTzwelwkv0eabTCbl9VOJyRQUMeMWoVarcTqdWK1W2UpTVFREQUEBoVCIoaEhOjo6sFgsZDIZAoEAAwMDjI6O4nK5MBqNZDIZfD4fIyMj8nE+T1ZApVJhMBioqqqitbWVt99+m8nJSUpKSti9eze1tbWKkKGwYvnWt74FwCuvvLIgaBQiQigUQqPR4HA4CIfD2Gy2L53RCofDso1EZADmTykRrtjZbFYu/goKCgrLbZZLS0upr6+ntrZWep1kbpcAACAASURBVCVotVrWrl0rjSbFei+mdJw7d4533nmHaDRKY2MjO3fulNc2s9nMtm3bcLvdjI2NceLECTl+UUx1S6VSXLt2jaNHj3LkyBFaWlqoq6uTx+V0Olm1ahUNDQ2MjY3x4YcfUlFRQX19PTabjUQiQXd3N0ePHuXy5cusW7dOTgyx2+2sXr2ahoYGenp6OH36NE1NTczMzFBYWCiF59HRUc6ePYvf76exsZGmpiaKiopuWXxlNptpbW1lamqK/v5+PvzwQyKRCLW1tWg0GoLBIMPDw/T39+Pz+ZZ8HKfTSV1dHb29vfT39/PJJ59QWlqKWq0mHA4zOjrKlStXyGQyWK1W6QMyMDAgPU6uTzTdDGVlZWzcuJETJ07IMbdCyFCqMhRWQtz16quvypYuYaAZCATk6PlAICATSberultUl8XjccLhMLlcDo/HQzQalbFgMplErVajUql47LHHlA9Q4c6JGWKTbTKZSKfTX7o3UKPRoNfr5XQPYU613AJoNpsXlHiK3lOj0YjFYkGr1S55TPOfR6/XL9tDKQy2xMkIn2ZTamtr2blzJxcvXuTSpUtks1mKiopIJpN4vV7cbjdtbW0899xzRCIRhoaGmJyc5NixYySTSRobG+V4txsdw/UL55YtWzh27BjT09PYbDaam5upqqpSvr0KK54//uM/BuDXv/41uVwOk8lEKBRCpVLJuenhcBi73Y7BYJBO3J/HEFj0XQYCAbxe7wJHbFFFJcYxP/3008qHoqCgcFObbpvNxqZNm4jH4xw6dIipqSlef/11PvzwQwoLCyktLcVms0kTvomJCdlC2tLSwp49e/j6178u20j0ej1tbW3MzMwwPDzM+Pg4R44coa+vj/LyckwmE6lUisuXLzM5OYnNZmPLli3U19fL4zKbzVRVVfG1r32Njz76iCtXrvDyyy9TVVVFWVkZkUiEwcFBent7qayslK0xVqsVrVZLUVERjz76KEajkc7OTg4ePEhlZSVVVVUYjUY8Hg9DQ0OMjIxQVVXF7t27qaurW7BR1+l0WCwWjEbjshNAhNmoyWSS9xPXdbPZzCOPPEIoFMLtdvP222/T3d1NbW0tNptNxlSVlZXU1dXh9XoxmUwLnqumpoYnnniCVCrF8PAw//7v/059fb0UQ8bHx6mqquIb3/gGDoeD3t5e3G437777Lh6Ph1WrVsnPRMRkNxPPFhcXs2HDBvLz83G73czOzvLkk0/S3NysnDQKK07UEOecVquVFUzJZBKn0ynHudpstls2uUh4d0SjUfx+v0woCR8PUYkhRIwnn3xS+cAU7ryYIVowGhsbyWQyX7r/ymQyUVxcTFNTE5WVlZhMpiU3+Vqtlrq6Olwul3TFFiJFXl4eVVVVxONx8vLyFpX5CRGhpKSENWvWUFZWtmy/vsvloqmpacHrUqlUrF69mu9+97u4XC4mJiYYHh5mbGxMGmrt2rWL9vZ2GhoaCAaDnDlzhu7ubjmJpLq6GofDQVVVFcFg8DOPYT5FRUW0tLRIA66CggJaWlrkrHsFhXuB7373uwC8/PLLZDIZGZSKKopAIIDJZCIYDErDKqvV+pmihqi4EKNgvV4vmUyGcDgssxE6nQ6dTqdUYigoKHwhQaOqqoq9e/dSWFhIT08PV69eZXZ2lqmpKennoNVqMRgMGAwGGhoaqK2tZePGjdL3an684nK52LZtG2azmfPnzzMxMcHMzIyMJywWC2q1mo0bN9LU1MSuXbsWrPfCkPOxxx6juLiYsrIyRkZGGBoaYnBwELvdjlarZcuWLezevZu2tjZZmQGfThZ57LHHqKiooKGhgYGBATweDzMzMzKbazQa2bNnD+vXr2fr1q0UFhYuiMtcLhetra3U1dXhdDqXDi61WhwOh2yJnW/OqdfraWlpIZPJSFHF6/Xi8/mkQLRq1Sr27t3LlStXyOVylJeXL3iuuro6nn76abLZLENDQ/j9fk6fPi2NVtvb22lra6OxsZGSkhLOnTvH+fPnmZubY3x8nKKiIgoLC28qLpyPxWKhvLycmpoapqen0el0bNq0iYaGBuWEUViRosbLL79MLpcjGAxKL0DRfhsOh+XkSYfD8YWri5LJ5AKPslgsRiqVIpPJyN+LytxMJqMklhTurphhNBppb2+nsLCQbDb7pScTuFwu1q1bh16vp7y8XDpeX4/ZbGbv3r1Eo1HKy8vloiNEjmw2S2NjIzU1NYsWJCF4tLW1odfraW5upri4eMnjqa+v56mnnqKwsHDBfYqKiti6dSs6nY7R0VHcbjeJRAKr1UppaSmbNm2Si+HDDz9MUVERtbW1AFRUVGC326mrq5PH+1nHcL0QI7IFBQUFNDc3U15evsDs60HgwoULAKxbt045a+9hvve97wHw0ksvodPpZDWWGOkqeigjkQgWi0VmDuaLGtFolGAwKEeter1eotGo9KARfjYGg0ERMRQUFL4UJpOJqqoqnE6nbLmYnJzE4/Hg9XpJJBIYDAYcDgf5+fmUlZVRV1dHU1PTkiXcGo2GyspKXC4XZWVljI6OMjo6ytzcnBQA8vPzqaqqoqGhgdLS0kVJI51OR11dnUxw9PT0MDMzQygUkmaYIi7Jz89f0JIq/tZut1NSUiIrFkQ7h91uX+DXVV1dvWSc9Mwzz1BYWLigauT6962srIzHH38ck8lEfX297NPXaDTk5+ezbt06OaZ2enpaHn9RURFVVVVs3LiRgoICDAYDNpttwXPl5eWxdu1aYrEYY2NjTE5OMjc3h9FolK+9urpaZqDz8/MpLy8nkUhQUlIiJ9PMjwsLCgpu+H0Qgo9Wq8XpdFJcXExtbe0Np9zcTi5dugTApk2blBNWYdm469VXX5VVEel0mlAoJP1kzGazTCbZ7fabNmhPJBJEo1EikQgej0f6osXjcVmlIUZDK9WxCitKzHjooYdob28nl8t9aTEjLy9PKvwiIyDKkERFhZjx/cQTT5DNZhfMdNfr9TQ2NlJVVUUqlZKllNcvPi6Xi82bN9Pa2orBYFjWpKm5uZmKigp5LPKN+v+DjG3bttHe3i7noos2F7PZjFarRaPRUFJSgtPppKWlBbfbLS8atbW1NDQ0kEqlPvMYBNlslsnJSS5cuIDf76e8vJxt27Y9kONYPR6P/L4o3Pt8//vfB2D//v0YjUb0ej16vZ5sNovH4yEej+P3+/H5fNhsNpxOJ3q9XooXfr9fihmiCiOTycjzcP74MgUFBYUvg0qlwmq1UldXR3l5OalUSl5zcrncgmBdiLSfVbWq1WqxWq20trbS1NREIpGQ3kLCNFlcE+e3VojnFF4PRqORpqYmamtrUalUss1WHIe4Hi6F0+nEYrHQ0NCwwKhcPL/BYFi2hWS5OGk+ZrOZ6upqCgsLZSx3/XvidDppbW2lvr5eVoek02kpZpjNZhobGyktLUWj0Sx6LoPBQHt7O2vXriWVSklfJK1Wi9lslu28LpeL9vZ2Vq9eTS6Xk69PGK2LuPBmKo39fj9DQ0OMj4/jcDjYvn07LpfrrnqYiWkty1XJKCjAf1Zq7N+/H51OJ1s9RFuImD4XCARkpcZyBu1iCkk0GsXn8y2oykin08TjcbknUqlUPPPMM8oHoLByxAyxqN8qhHIXCARIJpOLFqq6ujo5jnSpC7XIwN5oERJK+o2EAKPRuOzirNFosFqtN3z9orQ9k8nIdpNMJsOPf/zjG3pdZLNZOWM5Fotx5coV3nvvPVKplCxdfdDEjPmj2RSvkPuL5557DvjUU2N+X3UoFJLjXU0mE263W24cxOIpAuRkMkk2m0WtViuVGAoKCrcFtVp90xvem0H4SdysAZ8YLR0IBAgGg4tuLy4upqSk5LY9/83GSZ8nNpt/DIODgxw5coSxsTG++tWvsmbNGhkHLvcYKpVKeqndTPy31P2EZ8Zy5HI5GZNls1muXr3K4cOHmZqaoq2tjU2bNt31StmRkRHgUx8RBYWbjbt+85vfSNFUq9XKkc5msxm/34/f78dut5OXlycrZEOhEOFwWIoeYtx9LBYjl8uRSCRQqVTyMRURQ2FFihm3Gp/PR1dXF11dXYRCoQW3OZ1Ovve9793REUK3kng8TkdHB8eOHSOdTvOXf/mXNxQyRDZ6dnaWyclJjh8/TkdHBzU1NbS1tVFXV3dX50TfDf7whz8An5a2KmLG/Ynw1HjxxReloW8ul5NeGFqtVo7zyuVyUu1PJBILFmcFBQWF+5F0Os3IyAg9PT309fUtun379u23bHzq3UDEO5cuXbqpFtw7gdic+Xw+pqenmZub4+TJkxw9ehSj0UhjYyNr16696zHqwYMHAdi9e7dyoijcNN/5zneAT6fOCZN0Yc6eTCalYXs0GmVqagr4z5Gvwq9MVMam02lsNhtarVZWgCgoPDBiRigUYnh4mDNnzuDxeMhkMszNzRGNRikrK+OJJ55YMQvb7UaMZOvs7OTChQsMDQ0xNzdHYWEhX//619m6dasc8/og8X//7/8FULLuDwA/+MEPSCaTvPTSSwCyGkOUcmcyGVQqlSwl/ta3vqWMw1NQULjvyWQyTE9P093dzSeffCLjJ5/PRzKZRK/X8/jjjytv1C0km80SCATo7Ozko48+Ynh4mKmpKXK5HLt27WLr1q2UlZUt245zJ9i/f79sw923b5/yoSl8bsTUuf/4j//AYDDIavhYLEY0GmVmZkbGX+l0mlQqJS0ARNubWq1WqjAUHlwxw+l0sm7dOoxGo3TWPXz4sKxOEN4UdwIxivWzJiiIjRXwpcfSLrdwDg8P09HRgV6vZ82aNaxfv549e/ZQUVHxwAkZ+/fvp7+/H4Dnn39eOWPvY4QbdiQSYdOmTQQCAc6dO4darZbnmmjDqqmpoaioiKmpKWKxGBaLRU4BUFBQULjvgjWtltraWnK5nKzA6Ozs5IMPPsDj8SyqbL0TG/0bXW+z2Sy5XE725t+LYkYikWB0dJTTp09jMBiorKykvr6er371qzQ0NNzQ++x28/d///cA/PCHP/zSHnYKDzZ/+qd/CnxaISu+/4JMJiOtAMREEq1Wi0qlkh5oCgoPrJiRl5dHc3MzlZWVpNNpPB4PV65cYXJy8o4eRy6XIxQKyT78pZR2cR9R2u50Om+p6ZMwoxImVS6Xi5qaGpqamqiurn7g2ku6urr467/+a7lQKy0m9yepVAqfz0cgECAcDstsQDqdprGxkVQqxfDwMLlcjoqKCunEPTs7SyAQwOVykZeXh9PpxGQyYbVaFVFDQUHhvkKn01FVVUV+fj5r166Vv+vo6GBmZuaOHouYYDDf+Hyp+4TDYdLpNGaz+Z6soFOr1ZhMJqqrq9m5cycul4vS0lJqampYs2bNDb06bjd/+Zd/KZM9P/3pT5WTROFLn9ehUIjt27cTDAb58MMPFySTRKUsfJp82rNnD06nUxqG3k0TXAVFzLir6PV6aS6Ty+UwGAxYLBZpoHk9brebiYkJTCYT+fn5FBUVLbqPGPM4MTEhx2e5XC50Oh2pVIqJiQnC4TDZbJbKykpisRgTExO43W4KCgpoaGggLy9Pjoz0eDwEg0H8fj+zs7NEo1HgP0eu2u12iouLMRgMXyr7IEamlZWV8fDDDy9wNL/b6v+dZmxsjL/4i7/A4/FQX1/Pz372M+Vsvc8QU37C4TA+nw+/308wGJT+GMlkUs5D/9u//Vvg00odYcSXzWalEVU4HCYYDGK1WjGZTLhcLmw2myJqKCgo3BeIqW4mk0lmTAsKCmRJ+FJx0MDAAOl0GqvVSnl5+aKESC6XIxaL4fF4mJubIz8/X8Zj8KmnmdvtJhaLkZeXR35+PhMTE8zMzBAOh1mzZg2FhYVYrVay2SzBYFBWifh8PjweD8lkEofDQWlpKRaLBZfLhcvluieqTMUklB07drB+/XppJKrX6++6T8b/+3//j1/84hcA/NM//ZOS7FH4wkSjUemDEY1GCQaD+Hw+aSg7NDS04P4VFRXo9XoGBwfl+Wyz2bBarXKKkILCAyVmzB9pBsjRYkIUEGWK4v/PnTvHr371K2pqavjKV77CE088segxQ6EQPT09vPTSSzgcDnbu3MnOnTvJy8sjEonw5ptvcvnyZeLxOH/+53/O+Pg4hw8fJhgMsn37dvLy8rDZbGQyGWZmZvjggw+4cuUKw8PDJBIJqU6azWaKi4tpamri8ccfp6Ki4ksp9fPdvx/kcsETJ07wzDPP4PF4cLlcvPbaa0r55H1EJpMhFAoRCATknPNAILBgNKGozhDGoAJh9PnSSy9JwVNUSsViMcLhMCaTiWQyKdtPzGbzA9eepaCgcP8xP0sqNtsiNhJTN8TtgUCAf/u3fyMYDLJmzRqee+65Rf5j6XSaqakpjh49ytGjR3n44Yd56KGHWL9+PQA9PT28/vrrjIyMsGXLFnbt2sUrr7zC8PAwer2eP/uzP8NkMmE2mwmFQly5coWPPvqI3t5eOaEuk8mg1+ux2WzU1NTw0EMPsXPnTux2+z0jaNzMFLs7RSAQ4L/9t/8mhYwf/vCH/OhHP1JODoUvJGKIiSSRSESOVp3vU5ZIJCgsLCQej2M0GuV+TbRgTU9P4/f7ZYWsTqfD4XDgcDgUUUPhwREzbmbTE4/H5fiw0dFRDh8+zPr162loaFjy7xKJBG63m+PHj1NYWEhlZSWbN2+Wt125coXjx4/j8/mor69nZmaGrq4urFar3BjlcjkmJyc5deoUb7zxhnTyLSoqwmKxkMlk8Hg8TE5O0tfXh0ajYefOnbS1tSnfqi/Im2++yc9//nOOHDkCgMvl4tixY7S2tipvzn0iYoTDYSKRCMFgkLm5OSKRiJxQIu4TDAZv6IYtejT3798vA/pYLEYqlSIej8s55yLQdjgciqeGgoLCfUs8HicYDGKz2dBoNMTjcU6cOMHs7CzJZHJJcz5RTXH16lXeeecdCgoKqK+vl7e73W4+/vhjLl26RCgUQqPRcO7cOQKBAFVVVfLanUgk6Ojo4OjRo3zwwQckk0nsdjv5+fkAhMNhRkdH6evrw+v1otFo2LFjh5Kk+ByMjY2xf/9+/s//+T/S8POHP/yhFDUUFG4WUREbiUQIBAIysSQqt5LJJKlUilQqJSeeXM/vfvc7mUzKZrOk02k5yjUWixGPx7FarVgsFkXUUFDEjJmZGYLB4BeahX4jYrEYFy9epKCggK9+9atUVFSwdu1anE4nGo2GkZER3n77bfr6+qirq+ORRx6hvr4ei8VCMpnk2rVrnDx5kuPHj/Paa69hMBhoaWlRssCfg8ceewyA8+fPywUa4NFHH+WVV15Rgp37AGFs6/f7icfjxONxWcoogmHhkv0nf/Inn+uxRaXGwYMHUalUJJNJkskk8XicZDJJQUGBFDhsNpss01bOUQUFhfuJSCTCzMzMbbu+TUxMcPnyZZqbmykoKKC2tpba2losFgvRaJQPP/yQTz75hGAwyGOPPcaaNWtk64PX66Wvr48DBw7w8ccfk0gkaGpqwm6335PGoHeK/fv38x//8R/4fD7Onj0rf+9yufj5z3+ujCRX+FxxmBinGgwGZVtJOByWFfKiEiMSiSyqir0eEavt379fTjQRXmcizrPZbJjNZoxGIw6H44Hz/VNQxAx58gmF73Y9fiKRoLm5mT179mCxWLDb7eTl5aHVakkmkyQSCaqqqti+fTv79u3D4XDIEqvVq1eTTqfp6uqir6+PkZERmQ1WMsA3h6jCmM///t//m5/85CfKm3OPk8vlpBeGyAJEIhGSySQ6nU5WQcXj8RsunDdCjO09cOAAuVyOVCqF1+uV5nNGo1FWfVgsFilsKOepgoLC/UAqlSISiSyYQHArSafT6PV6nnrqKSoqKrDZbDidToxGozT7NJlMtLa28uSTT8rED3ya6a2qqqKzs5NLly7R2dkpR8oqG5zlGR0dXRQjNTY28t577ykeGQo3fV0QFe7RaJRwOMz09DSpVGpBO38qlSIWi8kxrTeLENQOHDggx7bOTyil02mi0SiJREJ6aijnvMIDJWbkcjnS6fSSRqC3Ar1eT01NDS0tLbJHdD7V1dXs27cPvV5Pc3PzgvJLgPz8fFatWkVjYyNjY2PMzMwwNzdHSUmJcrLeJI8++ijwaWWG1+sF4L//9//O8ePHeeGFF5QF+x7F6/USDAYJBoNyQolY2GKxGFqtlkwm87kXzhvx7LPPAnDo0CHS6TThcJhoNIrFYiEej6NSqbDZbKTTaRKJBEajUanUUFBQuOcR1W23S8xwuVw0Nzezfv36Rd4bZrOZHTt20NraisPhoK2tjby8vIXBplbLmjVruHbtmjQRnV/arsCSMeijjz6Kz+fj3LlzAPT399Pe3s7//J//k//6X/+r8iYpLEkikZBeGMFgULbfplIp0uk0gPS0SafTXzqhJGIvIWqEQiHp4zM/ORwMBjGbzdjtduXcV3gwxIylFutbuVAbjUba2tqW3TDX1dVRVFQky+H7+vpIpVKyvx9genpazlqOxWJ4vV4KCwuVb9ZNMj/r8MYbb/Dzn/+cd999lyNHjtDe3s7Ro0cVz4x7CL/fj8/nw+fzyaqqZDJJNptdEGyLSorbxfz+8EOHDklvDmEurFaricfj6PV66auhGIUqKCjcD4jWvVtJaWkp7e3tstpiPiaTiT179hAOhwmHw8zOzjI9PS03TQDBYJBUKoVarSaTyciNVkFBgfKBLcNzzz0nM99jY2O89NJL0jPjRz/6EZcuXeJf//VflTdKQSImk/h8PsLhMIlEQsZi84UF4Xch/MduFULUeO2116ShqNlsltVbwlA3mUzKtl9F1FB4YMQMYTKVSqVu2WPq9Xpqa2sXZRkEKpWKXC7H6Ogo165dY2pqSm6KBFNTUwwODhKLxaQJznyxQ+Hm2bdvH/v27ePEiRM8/fTTeDwe9uzZowga9wCBQECWL4pFK5lMyvMolUrJ82M5Q6nbLWy89tpr8pxOpVKYTCaMRqMsvxRjoa1WqyJqKCgo3LOIkvFbmfzJz8+nrq5u2Y2HVqslEAjQ3d3NxMQEwWBQjrGHTzPFPT09uN3u2151ez9SVVXFT37yE370ox/x4x//mBdeeEGafyqChkIkEpGJJCFgRKNR6WeRyWSIxWJoNBpyuRzf/va3b+vxfPOb3wQ+TSYJLzNRBZvJZFCr1SSTScLhMGazGZPJdFu8ERUUMWNFkclk8Hq9hEKhW/fitVqcTueSI7dSqRT9/f2cOnWKixcv4vV6SaVS0jND4PP5iEajt62080Fk586dXLx4kWeffZZz587x7LPPcvbsWcUMdAUiyganpqakcVQ0GiWVSskRxkLMuN2L580urm+88QbRaFSWPRqNRux2uzz+eDyuGIUqKCjcs8RiMebm5m5p8sdsNuNyudBqF4aNwuD55MmTdHZ2cuXKFVn1Nj+2SiaThEIh6ZWk8MVwOBz84he/oK2tjeeff55f/OIXrFu3ThnP+oASCoXwer1SxIhEIvIcy2azMnlzK1pJvggimXTo0CE5+USMfjUajRiNRmKxmKySFb4aCgr3jZihVqulWUwul5Ml6zfi85RY6vX6RYtzOp1mbm6OU6dO8e///u8EAgEqKipoaWmhrq5ugXrY19eHz+dDp9Mp36ZbSFVVFb/85S955JFH6O/v58c//rEygmwFIaoZEokEc3Nz+P1+YrGYNNQUCxZw21tKPi/79u0D4J133pHll4lEAq1Wi9FoJJvNEo1GMRqN2Gw2RdRQUFBY8ej1eiwWixzLGo/Hb6pK9GbbdzUaDXq9ftH0kUgkwtDQEL/73e+4evUqmUyGDRs2UFdXR3l5ubyfqNabm5sjGAwqH9iXRLSZvPDCCzz//PN84xvfUDzGHhByuRzRaFR6kwlz9fk+FWq1Wrb33mjU/Z0WNcToVyFmaDQaXC6XrNQQJu2KqKGwIsWMXC4nSx/VajVGo3HJaQJiAdZqteTn52O321Gr1eTl5S1ZRXE9n8fVe6mxYOl0mqGhIbq7u+nv72f16tXs2rWLffv2yRnu8g3Uajl//rwyXuw20Nrays9//nO+//3v88ILL/DTn/5UWaxXgIghyocjkQh+v5/Z2Vm0Wq1cPEWrleidXKmIscBvvfUWfr8frVaL1WolHo+j0+mwWCwLjEINBsMi4VNBQUHhdiBKswF0Ot2y7R3ZbBaVSoXFYqGgoACtVovJZMLpdN7wepXNZqWYezMsFed4vV66u7u5fPky8XicDRs28K1vfYva2toFmxGfz0dPT49yDb2F/OIXv+CDDz5gcHCQ//W//peS8LnPEa0i4sftdsukkkggZbNZ+bMSYzAharz11lvSpF34Dmq1WjQajZyIIoQNs9ms7LEUVo6YEY1Geffdd/H7/eTl5fHII48scrwW9xP9VXl5eTIzarfbb6qnKhwOy7L3L0I6nWZycpLp6Wmy2SwbN25k27ZtrFu3btF9zWYzgUBggY+Gwq3jueee43/8j//B4OAg//RP/8Q//MM/KG/KXQqsRQuJyAaEw2FZASWM3eLx+F1vJ/m8PPHEE3JxFZNW0um0zB4IcVSn02G322UmQUFBQeF2MTAwwCeffIJOp2PNmjVs3Lhx0X3EtUmtVmO1WmUbrMFgWNQSu9zmaHp6Gp/P94WPMxgMcu3aNXw+HzU1NezevZtNmzYtMkI3GAxyZKPCrePv//7vZcLnZz/7mdKOex8ixquKOCwYDMoWd41Gg0ajkca6wIpPJM2Pu95++21ZDa/RaDCbzbLy12QyEYlEcLlc6HS6ZRPgCgp3VMyIRCK8/fbb9PT04HK5qKioYPXq1dIdOx6PMzs7i9vtBqC8vByz2SyVfNFTZTAYCIVC0txGLNi5XI5kMsm1a9e4ePEikUjkCx1nNpuVvfPLmYQKwWNkZAS3262IGbeRv/mbv+H555/n0KFDiphxF0QMMVZ1/rhVMdVHlCivBE+MgGUXTQAAIABJREFUW7W4Hj58WIozItuhVqsxGAyk02k5+cRgMKzIhbWrq+szy7iHhoY4efLkgt/Z7XbFZFdBYQXR29vLSy+9RCqV4qmnnqK2tlYKFMKnwu124/P5KCoqoqCgQFZvaDQajEYjZrNZ3ldMlRLXrEwmQzAYpLOzk9HR0S+1RghhOz8/n/r6+kVVJH6/n4GBASl6KNMLbh3PPfccf/VXf4XX6+WNN96Q008U7g8RIxaLEYlECAQChEIhGX8lEokFMVgul1txLb03w+OPPw7A73//e+BTvx9hWJpIJNDr9eRyOfR6vayQtVgsiqihcPfEDJVKhV6vJxAIMDU1RUdHB0ajkdraWgAmJibo7Oxkenoam81GS0vLop4ps9mM0+lkenqa8fFx5ubmsNlsqNVqUqkUXq+XgYEBuru7Fzhpf97jFGpnLpeTFxCRUchmswSDQT766CMuX74sjQ7T6bQs2TQajcq36xbxjW98g+eff57+/n7GxsZWbKvJe++9x9DQ0LK3nzx5cpG3Sl1dHXv37l1xryWRSBCPx4nFYgSDQQKBAMFgUAbEqVRKlgPeiwvoZ/Hkk08Cn3pqiNnsOp0OnU5HKBSSGVCTySTLv1dSpcaLL77Iz372s2Vv/8d//Ef+8R//ccHvfvzjHytCoYLCCkKj0aBSqRgaGuLSpUt0dXXR3NwsW+F6enoYGBggGo3S1ta2wJ8CPm2BdblcDA8PMzIywszMDMXFxZhMJhnXjIyMcOXKFcbHx7/wcarVapkZTiQSBAIBotEoer0e+DTx09vby7Fjx/B6vdL8T8RKqVRKaT35kjz77LO88MILHD9+/IEQM+6nWOuz4q94PC73H6ICXCRORRXGvdDSezM89dRTAPzhD38gk8nIdmWz2YxarcZkMkmjUFG5r1RqKNwVMcNoNLJ161ampqZ49913ef311xkdHaWpqQn4dI72hQsX8Hg8bN68md27d2Oz2RY8RmFhIWvXrpVTRn73u9+xatUqtFotfr+f/v5+hoaGKCgoYGJi4gsdp06nk+ZVmUyG06dPo1KpZKm53+9ndHSUS5cuEYlE2LBhAydPnmR8fJxTp04B0NjYqPR43SLmixcrWcwQfavL8fbbb/PRRx8t+N1Pf/rTFbXAijLGcDhMNBolHA4TCARIpVKy/Uso5aL38X5FeGq8//77slLDbDYTDAYX+GiIcuqlzITvBj/4wQ8+U8xY7m8UFBRW1rq3c+dOBgcH6ejoYP/+/WzYsAGbzUYsFqOjo4OOjg7MZjM7d+6kubl5URzT3NzMtWvXGB0d5fe//z3Xrl2jsrKScDjM5OQkfX195HI5bDbbF07+uFwuGhsbsdvtjI+P895775HJZCgoKABgfHyc/v5+ent7qa2tJZPJMDIywvnz5zGZTKhUKpnQUvhi1NTUADAyMvJAvN77IdZaCmFIHovFCIVCC+IvUQ0rpsPdb0kkwTe+8Q0paggz40gkgtPpRKVSYTQaicfjWK1WLBYLRqMRnU6ntP4qYsadFzNEv9e1a9fw+/10d3cDEAgE8Pv9rFu3jt27d7Nx48ZFlRnV1dU8+uij+P1+vF4vr7/+Oo2NjZhMJlKpFIFAAKfTyc6dO/F6vTgcjgXqnegtdTqdy2YEdDodDQ0NbNy4kb6+PmZmZjh58iRTU1OYzWai0SihUAibzUZzczMOh0M6CZ85c0Y69NbU1NzwuRRuPmDyer34/f4Ve4w7d+78zAyXmAF+/d+sBDKZDPF4XC6eYgGJRCILFlKdTidHnD4ofPWrX5WihjA4zWQyRCIRWS4t2lBMJhNms/muLqytra3U19czODh4U/evr69XWkwUFFagmPG1r32Na9eu0dvby5kzZ5icnJTtblNTUxiNRr7yla+wfft2uaEVmEwmduzYQTgcJhKJcOLECUZHR6msrCSXyxGJREgmk7S1tWEwGLhw4QIWi0VWVADSe8Plcsl24OvJz8+nra2NHTt20NvbS2dnJ/F4HKfTiU6nk73wdXV1NDU1cfnyZY4cOUJ/f79shSkuLr6p51JYGuGTsZLjIyXWWhoxGCEcDhMKhaQ/hmgnicVipNNpGVPcryLGcqLG+/8fe+cVG1d63v0/p/feWIbDNuwiVShKIkVJq5W0Wa1kebvXNhwYBpwAyUWAJAjiXCRI4AsnF4ETBPmcZBEbThwbu/HaK2/TciXtSpTEJpGU2MlhnV45feZM+S70nfcjxa4lVVbvD+ANZ86Z09/nPO/z/P+ffQYul4tYLEZaT/h8PhKJBFKpFMRiMXg8HuRy+ROZ1HA6nRvqBPn9fszMzKx6Vy4sLKQPtic1mcHj8VBcXIyTJ09Cq9Xi0qVLRI0XuN+3bbVaceLECTQ1NUGv168qFTObzTh9+jQCgQBGR0fh8XgwNjYGlUqF0tJStLW1obCwEFwuF/Pz89BqtdDpdGQ9fD4fxcXFqK6uRjabXbN3k7UJOnToEDgcDr744gt4PB5MTk5CKpVCq9WipqYGLS0tKC4uBpfLRSgUwsTEBKLRKEKhEKni2Oy3KFvjwIED+PTTTzE0NESsNZ80rFYrDh06hO7u7i19/9ChQ7BarY89iZHJZJBIJLC0tIRAIIBYLEZaplg1/Vwu98wMopslNb744gsAIC03Pp+POJ+wKtyP2/3klVde2XJ1xrN+XimUJxGFQoH6+np897vfxa1bt3Djxg2k02ki+ldVVYXGxkZSlaFQKFYFxIcOHSLPd4fDQWy0i4uLUVFRgerqauj1esjlcqTTaRQVFa1IJCgUClRWVqKgoAAmk2nN7RSLxSgrK8Nrr72G3t5e9PX1weVywe/3Qy6Xo7i4GHV1dWhuboZer4fRaEQmk4HL5UImk4Hf70cmk9nSb1HWprm5GQDQ29v7TOzv0xhrPQjbrstWwsZiMaKPsdxhiNW5eVbHaTbuAu63F2UyGdLSFggEUFBQQFpRstksRCIRaQF+Evj444/R2dm57ucXL17E+Pj4iv+dOnUK3/3ud+mD7UlNZhQUFEAoFKKsrAwqlQpqtRp+vx+JRALAfT0MnU6Huro6aDSaFTMELFKpFOXl5Th79iz27t1LXr6kUimMRiOqqqogl8uRyWSIRofFYiEuKGKxGG1tbaiqqkIul4NGo1lzW/l8PiwWC5k18Hq9iEaj4PP5UKvVKCkpWfFbZ86cQVNTE8LhMFQqFYqLi7f8W5SvBgKBAF//+te3PMB+/etfX/Maf1QDKassH4/H4ff7EQgEkEqlVvQxZ7PZZ64SYzOOHTtGBlY2+GAYBjKZjMyiJBIJiMViiMXix9J+8rWvfW3LyQzaYkKhPIHBGY8HlUqFAwcOEGHNeDyOTCYDHo8HpVKJ0tJSVFZWkmB+OVwuF3q9Hi0tLZBKpSSGSafTMBgMKCkpgcViAY/Hg1qtRllZGUpLS1dob1gsFpw9exZLS0uorKxcczu5XC7kcjn2798PnU4Hq9WKUCiEfD4PsViMoqIimM1mlJaWQiAQgMvlQiqVkooNvV4PiUSypd+iUJ62WOtB2AkkVjg3FAohFAohnU6T2KGgoIAIe34V9DB2CrZN6PPPPyc6hdlsllQOCwQCojXypCQ11Go1fvGLX6z7eV9fH/r6+lb87/XXX6cne7v5hXw+n9/oC6xqLis2s16SgvU236pORDabRTqdJuKZ7Hq4XC4EAgE4HM6662JdSzKZDPFTZkWo+Hw+OBwO+Q67bTweD+l0GqFQCGNjY+BwONDr9SgvL1+3YoJVCmazp8FgEDMzMxCJRGSAFgqF5LeWb8vy32SPHRWreXjOnDmDTz/9FD/84Q/xgx/84IndzuHhYTQ2Nm7pu/fu3UNDQ8Mj3b58Pk+qByKRCAKBAHw+H5LJJPk/e0++8cYb9MLbAp2dnSgoKCAzBAqFgvShL28/EYlEjzSpodVqEQgENvxOZWUlpqam6EmkUL4EuxUnLX9mswE72zfPxjwCgWDD9bEVY8tdD9hYiRUZZYUF2QR2NBqFzWZDQUEBVCoV9Ho9pFLphtWlrAuc1+vF1NQU+Hw+TCYTioqKIJFIyEsFG1Oxx4rH40EgEJD/53I58Hg8Wsm6Da5fv46Ojg5yvTwLPOmx1lrvPOxzIhqNIhwOw+/3E7FPhmFW3PN0Emlzrl69Sio1+Hw+ib94PB4RZ2fb/h9XUiMYDKK+vh4ul2tL3zeZTBgZGYFaraYneBtsGlmHw2EsLi4iFoshl8utvRIej1QwsBcNn88Hj8dbd5DlcrmkWmLbGZj/V+Gx2WD34ItDJBLB2NgY3n77bSiVSpw8eZL0ai5/4LCD+vKkRCwWg8PhwH/913+RZbVaLYRCIdmetaAD8rOF1WpFRUXFhkrbwH1dg0dd9shmspeWluDxeBAOhxGPxxGPx0lPH01ibB92tqCzs5O4n/B4PGQyGaK8nUwmIRQKIZPJHpn7CatwvxEnT56kJ5BC+ZLsVpzExjsCgeChZ5bZGGYjuFwuiVV8Ph9GR0dXxEknTpzYME5ikyupVAoLCwsr4iSTybTiRYJ1inuY7aRQnoZYazmszhar6RcKheDz+ZBIJEiSkk00FhQU0Fn5bXDixIkVsRebMBIIBERHMZ1OI5FIkKTGo67QUavVOH78OH71q19t6fvHjx+niYzdSGbMzMzgww8/xMLCwroiJuxAqFQqYTQaUV5ejj179sBkMq1yI3mc5HI5JJNJ+Hw+ZLNZxOPxVYGH0+nE3NwcKioqoFaricXqVpalUAQCAS5cuIB//Md/3PB7Z8+efeQP1Xg8DrvdDq/Xi1AoRKqj2Nk+msTYmaTGjRs3SIKITbry+XxIpVIyyyoSicDlcnc1eP/a1762aTKDtUOjUCgPD42TaJxEobHWWmSzWfh8PrjdbiLwGY/HSSKjoKAAuVwO3/jGN+hJ/ZKx16VLl4iYPZvIYNt8H0xqPMqJ5gsXLmw5mUGvg11KZrjdbty6dQvDw8OQyWRr2mKyL0WsdkVhYSEcDgdaWlrQ1NS07bLK3YJViH3uuecgkUhQVlZGLmhW3fvevXu4fv06zp07B4FAQAbpjZalUB58GG02wD5KMadYLAa32w2Xy0UUstkKAgB466236EnbQdra2gAAV65cIRoaPB4PXC4XiUQCEokEEomEzNSys7M7zblz54gL0FpoNJonVkyXQnmaoHESjZMoNNZaTj6fh8fjgcvlIq28rKgna/X+5ptv0pO4g5w5cwbAfQcUNnnB5/MhFouJjiKbzGCrZB9F+8nJkychk8kQjUY3/J7JZMLx48fpidyNZAarF7G0tIQ9e/asOXubSCQQCAQwNzcHm82G/v5+zM3Nwe/3E2GpzQY0tk+f1c14mAdHLpfbcFmJRIKKigq8/vrrRLSKbXVhGAaLi4vo7+/Hp59+in379qG4uBharXbTZXdzv5avB8CGWiLrwZavPQmB0rPAnj17UF1djYmJiTU/r66ufiRWmIlEAvPz85ifn0csFiPaLuw1QZMYu8tzzz0H4H4JZC6XQzQaJb3p8XiclEGyLXe7oamxUasJFRajUHYGGifROIny7MZay0mn07Db7XC5XMTink1ksroY3/zmN+nJ20VYB5TPP/+c6JQkEgnS9svqLbKTSqy+xm5hNBrR3t6OTz75ZMPvHTx4kLaY7FYyYzkWi4WU8zx488ZiMQQCAdy+fRuXL19GX18fbty4gZKSEmg0Guj1+g0HII/Hg2w2C4FAAI1Gs+2gnvVp3mhZHo8HmUwGmUy25jYsLi5idnYWDoeDOBRsZdnd3K/l6wEAmUwGqVS6ZSHRXC6HYDAIgUDwRJWyfpURi8V4+eWX8aMf/WjNz19++eWH1ovZCqlUCg6HA/Pz8wgEAqQ6gA3SqHvFo4V9Zl69epXckzwej4jdsZZi2WwWfD5/R91PNmo1oS0mFMrOQ+MkGidRno1Y68F7y263w+l0wuPxIJPJkOQhe419+9vfpiftEcJWOXz22Wck3mIn9NgJJbZSg9UxYqvMdpoLFy5smsx48cUX6Ul7FMkMqVQKg8Gw6v/sDZvL5aDVasHn8zE6Ooq5uTn09/evGtgZhkE0GsXi4iIikQii0SjsdjsymQwkEglMJhO0Wi10Oh0MBsOqfrdsNgu3200sjRiGQSgUQiQSgV6vJ4NpcXExFAoFWT6VSmFpaQk2mw18Ph9GoxEGgwEejwdDQ0Po6+vDzMwMUqkURkdHwePx4Ha70dTUBB6Pt+ayy7ctlUqtEAJjNQqW75fBYIDJZIJarV4xYIfDYXg8HrjdbqhUKphMJoTDYYRCIXi9XtjtdhQUFECpVBJbtZKSklWzGMlkEqFQCA6Hg/Tte71eCIVCaLVaiEQiqFQqGAwGKBSKRyJE+CzyyiuvrDvA7lbZI5vEcDqdiEQixLecbSf5zne+Q0/MY4QVq/rss8+IgN5ykdB8Pk/cT9hB9cven+u1mtAWEwpld6BxEo2TKF/tWGs5kUiEtPEGAgEkk0kkEgkAIMk0OoH0eGErNS5dugSBQIBoNEr0y9ikhkQiIVWyYrF4U5eoh7lO/+Iv/gKRSGTNz+Vy+WNriXrmkhmstdhGVFZWIpvN4u2338bCwgLm5uZIJozNTvr9fgwPD+P999/H3NwcwuEwsTZlg/mqqiocPnwYZ86cgV6vJ4NhJpNBMBjE1atXMTg4iMnJScTjcaRSKdKbLpPJYDabcf78eTQ0NKCkpAQcDgdLS0u4e/cu/uVf/gUqlQovvPACTp8+jb6+Pvz4xz+G2+2Gz+dDNBrFxYsXcf36dZSVleFv//ZvIZVK11xWo9GQ7XK73bhz5w7ef/99OBwOpFKpVfvV1NSEkydP4vDhw9BoNGSQXFhYQGdnJz766CPs2bMHL774IsbGxjA6OoqRkRGyf1wuF0ajEWfOnMFrr70GlUpFzkkmk1lRAup0OokQDvv7KpUKjY2NaGtrw759+6BSqahd7C6wXvnjbpQ9ZjIZOBwOLCwsIBgMkpdkdsaMy+XSGYEncGC9evUq4vE4qZpZWloCj8dDKpUiVoVCofBLD6prtZrQFhMKZXegcRKNkyhfzVhrOcFgEA6HA263G8lkEul0ekUrST6fp0mMJwxWU+Py5csoKChANpsFl8slbSdcLndFBQfrIrUTSQ2j0Yjjx4/jd7/73ZqfHz9+HEajkZ6kR5HM2ArsQMBeIMlkckWZVTQaxc2bN/Hf//3fmJiYgE6nQ01NDRQKBfL5PMLhMO7cuYOenh4sLi6Cy+WitbUVtbW1AACPx4Pe3l6899578Hg8kMlkqK2thUQiIf7oCwsL6OnpwdLSEl544QVcuHABcrmc2FKOjY1Br9fD5/OBYRgYDAY0NTWhq6sL+XweAoEA5eXlMJvNqKiogEQiWXdZdnB0uVy4evUq3n33XYyPj8NoNKKhoWHVft24cQNut5sM2CaTCcD9kieHw4Hh4WGEw2FwOBx4PB5wuVw0NzdDIBDA7XZjcnISt2/fBo/Hg16vx8mTJ6FWq8k2XL9+He+88w68Xi+MRiNZlj32Y2NjuHz5Mmw2G4RCIWpra6HT6eidsMOsV/64k2WP7Myb0+mE1+tFKpUiD2K2R/P3f//36cl4QmErNbq6uhCLxcDhcEiLCSsGyFoesn8PM6iu1WpCW0wolMcHjZNonER5emKt5fj9fng8HiwuLpLKV7bSktV+oXHXkw1rSd/Z2Qkul0vsc/l8PrLZLIm1BAIBmVASCoVfOqlx4cKFdZMZFy5coCfmSUpmRCIRLC4uIp1OQyKRrCgTZBgGExMTuHnzJrq6ulBfX4+2tjYcO3aM9CmGQiEYjUbcunULQ0NDUKvVZCAG7luC9fT0YHBwEBaLBWfOnEFzczNkMhkZpO/evYsbN27A7/fD5XIhEols+FCrqqrCSy+9BIfDQTQGWlpasHfvXlRUVECpVK7rCADc74UdHBzEtWvX0Nvbiz179uDIkSM4evToqv1i991isUAkEpFBejlOpxMjIyNoaGhATU0NrFYrBAIBXC4XBgYG8Mtf/hLj4+Po7OwkgjGZTAazs7O4c+cOBgYGcPToURw5cgQtLS1kkA6FQtBqtRgZGYHD4YDH44HZbKaD9C6xVvnjTpSR5XI5eL1euN1ueL1exGKxFcKeVNzz6aK9vZ0kNdgqjVQqRSzbWCtXdoZgu0mNB9tJ5HI5bTGhUB4jNE6icRLlyY+1luPxeODz+UjMxTAMSWDQmOvphG3tu3z5MjKZDEQiETgcDkls8Pl8pFIpiEQi5PN58Pl8cLnch05qnD9/HnK5fFWriVwux/nz5+kJeVTJDDZ79SBsL2gmk8Hk5CS6uroQiUSg0+lQXV1NBFUSiQS6urowODgIHo+Hc+fOob29HbW1taSMkGEYlJeXQyAQ4N69e+jp6UFjYyMpjWT7MUOhEI4fP45z585Bp9MRe51MJgOTyYTCwkLMzMzAbDaDYRjk8/l190uj0aC6uhpqtRpCoRAMw6C4uBhWqxUVFRWbqtwmEglcv34dQ0NDEAqFeOWVV3DkyBGUl5ev2i8A6O3txaeffori4mIcPXp0VfkiO0tz9uxZ1NTUECErq9UKs9mMW7du4e7du+jr60MkEkE+nyelk06nE8B9e8ijR4+iuroaXC4X+XweqVQKhYWFGBwcxPj4OKRSKVXu3kWam5tRV1eH0dFRAPeF4Zqbm7/UOl0uF7xeL3w+HxKJBJLJJJLJJFGCpyrZT39S48aNG0ilUggEAqR3UywWQygUQiqVQiQSbfu+ff311/HOO+8AAFpaWujBplB2CRon0TiJ8vTHWux94vP54PP54Pf7EY/HkUgkkEgkwOVyweFw1nQuojxdsJUa165dQywWA5fLBY/HA4/HI/EWh8MhFWnshNJ2nwvrtZrQFpNHnMwIh8OYm5tb84aPx+OYmZlBf38/rl69img0in379qGtrY0oWyeTSdy4cQPT09MwGo04ePAg6uvrVylfy2Qy1NXVwWq1YmRkBPPz87Db7SgsLASHwwGfzyc95g6HA0ajERKJhCxfUVEBtVqNxsZGiEQiaDSaDb2E2bJuHo9HLk7WO30ryrapVAr37t2Dx+NBaWkp9u/fj+rq6lWzHDKZDFarFYWFhVhYWMD8/Dwikcgq9WydTof6+npUVFSsuMAlEgnS6TSMRiPGxsYQCAQQCoXIy2wulyMDttvtRiQSWdHzJZVKySxQY2Mj9Ho9tQHaRYRCIY4ePUoG2Kampoe2f/L7/aQ/k73fWM9yDoeDb3zjG/SAf0Voa2sDANy8eRPpdHrFvcu6nmxHqR+4X8LIJjOOHj1KDzKFskvQOInGSZSnN9YC7lcReb1eOBwOhMNhIhTJVsDm83kac30F6ejoIEkNtlV7eSsRwzAQCoUQCoXg8XgkobUd1mo1oS0mjziZYbPZ1uz3yWaziEQimJ6exsLCApaWlrBv3z60t7eTgZIdzO12O+LxOKqrq6HT6SCVStccNLVaLcrKyjAxMUEUrNlBpbKyEnK5HDabDb/97W8RCARQVFQEpVIJiUQCiUQCrVYLrVYLDofzUBfcdh567Pbl83kUFhZCrVavObjzeDwolUoUFxfD7XZjaWkJwWBw1WBuMpmwZ8+edUs+2eAhkUggFAohFosRVfKioiLweDz09fWBz+cjk8lAq9VCJpNBLpcTpXWj0Qgul0tVuneZN954g+gVvP7669te3uv1wu/3IxgMIhwOE89ytp3kW9/6Fj3IX1GOHDkCAOju7gbDMEQAMJ/PQywWb+uZtryt5E//9E/pwaVQdgkaJ9E4ifL0xVrAfU0Wv9+PUChEYq50Ok1sVrPZLI25nqGkxo0bN5DP50kii62SFYlEEAqFkMlk29bSeLCdRCKR0BaTR53MGB4eXrcnki2f1Ov1OHr0KE6dOoXGxkYUFxeDx+MRG5x0Og0+nw+1Wr2hSqxYLIZWqwWXy0UikUA4HCalka2trbh58yZmZ2fx0UcfYWBgABaLBZWVlSgsLERZWRnp4RSLxRvONnxZYrEYXC4XkskkJBIJDAbDhhe3VCqFXq8Hl8tFPB5HMBhcZeOm0WhQWVm5bmaZXXc2m8XS0hJisRg0Gg3q6+sxMzODO3fuYG5uDn6/nxwbs9mMsrIyWCwWmEwmUnJKyyd3/4W0pKRk1QvlZiSTSczOzmJhYQH5fJ60lAB0VuBZ49ChQwDuV2pks1mkUimkUimoVCqoVKotrUOpVJIAT6lU0oNKoewSNE6icRLl6Ym1gPvtTQ6HA3Nzc8hkMkilUiucxrLZLNXEeAZhq2SB+5pmqVSKJEXFYjHy+Tzy+fy2Wn+NRiM6Ojpw7do1AEBNTQ1tMXnUyYzKykqcPn16zc/4fD5KSkqI77nFYoFSqSQDZDQahcfjIfZXm2W6l9ubRaNRuFwuMAwDtVqNvXv34o/+6I8wMjKC4eFh2O123L17F3fu3IFMJoNKpUJhYSEOHjxIBKp2C3bGIZvNQi6Xo7i4eJXf+1rBB5/PJ4HNg32qPB5vS3ZAbKkkq76rVqvR1tYGoVCI3t5e2O12+P1+3Lp1C319fZBIJFCpVKirq8Phw4dx9OhR+mKzy0ilUnLPbLVUlT2vPp8P4XCYlMXSJAYN1gCgp6eHVOlEIhEolUrI5fJNnxe0lJFC2X1onETjJMrTEWux10c2myVaZGzVKxt30SQGBfj/mma9vb3EhpetlBUIBNuq3nr11VdJMoOtAqE84mTGepZ+fD4fRUVFRA2Wx+OtKFl8GLEUluX9nwKBAHq9Hh0dHSgvL4fVasXs7CycTifcbjdCoRCx7nI6nWAYBkajcdeUqJcPtGxPFWuxtt73NxPa2s5xYQUC2cHdYrFAoVDAZDIRoSuHw0HcL+7duwen04lAIAC1Wo2amhpotVp6J+wi2xXldLvdmJiYgMPhIKJDb775Jj2QFABAa2srAGBpaQnJZBIejwcKhWLT5aiDCYXyaJIZNE6icRJ7jgMhAAAgAElEQVTlyY+1gPsuJVNTU1hYWKDxFmVTDh48COB+CwpbKZtIJKBSqbac9Dx//jz+5E/+BADw/e9/nx7UR53M0Gq1xPrrQdgBdLNySHZAyWazG/4Wm00HQPon2XJCtqdSLBajpKQEqVQKDMMQf/Br167h0qVL6Ovrg1wuR2VlJQ4fPrwrB3B5ABEKhTA3N0dEgtaCLbdkGAZcLhd8Pv+h+1S5XC6USuWKflqhUAi9Xg+ZTIbm5mYwDINUKoXFxUUMDQ2hs7MTExMT6OzsJKWtdJDeXdgZ9a3icrkQCoUgEAh23F6M8tVBqVSSv61+n0Kh7C40TqJxEuXpiLUAwOFwwO/303iLsi3YFpSenh5Eo1FSKatQKDatlC0tLSUOKjU1NfRgPupkBmtT87CDmVgshlqthtvthtvtBsMwGw5mbrcb6XQaIpEIKpVqRRlPQUEBUZVlyeVy0Gg0UKlUEIvF+PnPfw6PxwOHw7HhwPllXyjMZjMEAgH8fv+W9svn84FhGCIyxZaJbvvk8XhQq9WrxMG4XO4q5XOtVguTyYSioiK89957eO+999Df34+qqioy00vZHdYSb9uIvXv37mrJL+WrxcM+kykUyi4EVTROonES5amItYD7TnHrVVJRKJvBPhfC4TASicSWKmV5PB655h72uUb5EsmMnRjkKyoqSKnj3NwcdDrdiow3qxzrdDoxNTUFDocDpVIJtVoNDocDm82GkZERqNVqmM1mlJaWrggEtFotLBYLsfxiGAaJRGLDkkZ20Ofz+dtWrRYKhdDpdCgtLUUoFILH44Hdboder18hzsful9/vh9frhUajgclkglqt/lIXs0gkgkAgILZn4XAYfD4fjY2NUCgUZDZDIpGguLgY+XwefX19yGaziEajRFSSQqFQKBTK40+G0DiJxkmUR8OpU6foQaB8aRQKBRQKxbZaTShPaTJDKBRi//79cDgcuH37Nrq6uiAQCLB//34yOCaTSSwuLmJ4eJj4rJeWlkKv14PH46G/vx///M//jPLycpw+fRpnz56FQCAgvW4ASLlPLpcDj8eDUCjctESRw+FAJpNBJBIhn88jFoshFoshkUiAx+OtO8gXFBRALBbjwIEDCAaDmJ2dRXd3NwQCARobG1ft1/T0NILBIFpbW1FZWbktFdz1fh+4L/7129/+FsPDwxAIBPjjP/5jVFVVrZh5SKVSWFpaQjweh0AgIFZkFAqFQqFQHj80TqJxEoVCeTrZalXe8gQz5SlLZkgkEnR0dMDv92NsbAzvv/8+bDYbhoaGYDQaiaLwwMAAhoeHIZfL8dZbb6Gjo4OofbMK3P39/VhcXMTdu3fR2NhIysuSySTGxsbQ1dWFWCyG0tJS7N27FxKJZMMSSj6fj7KyMphMJkxNTaGzsxPBYBDNzc2orKzccMZCKpXizJkzCIVCGB4exq9+9SuMjo5i//79a+6XSqXC+fPn0dLSsmOWX3w+H2azGffu3cMXX3wBAGhoaEBFRQWEQiFyuRyCwSB6enowNDREFL1pvxaFQqFQKE8GNE6icRKFQvmKv3zT9pJHm8wQi8Wk1E8ul3/pk2c2m9Ha2koUoz0eD27evEkEnrLZLCk/bG9vx8mTJ1FZWUnWUVFRgXPnzkEikcDpdOLOnTvwer3gcrlgGAZ8Ph+hUAgAcPz4cRw9ehQWi4VY57DCTxqNBlKplMwIiEQiNDY2Yn5+HjabDXa7nayTtT5cb1mBQACr1UoCEHb5VCpF9iuXy8HtdsNkMuHo0aM4dOgQiouLyX4JBALI5XIYDAaoVCoyi/IgrJiVXq9HJpMhN4RQKERLSwvi8TjS6TQCgQD6+/sxNTWFfD4PLpeLXC6HhYUFcmwPHjyIwsJCehdQKBQKhfKQ0DiJxkkUCoVCeUKTGSqVCvX19ZBKpTCbzV/qx5aXGhoMBnzxxReYnp7GwsICxsfHIZPJYDabUV9fj6amJnR0dMBsNkMikZB1lJaWQqlUoqysDAMDA+jv74fX60UoFEI8HkdhYSEKCwuxf/9+tLW1oaqqivSR8vl8aDQaNDU1QaFQwGg0kpkMgUCAffv2IRqNwufzwe12AwCCwSDy+TyEQuG6y3I4HKhUKhw/fhzl5eXo7OzE7OwsPB4P2S+LxYLm5mY0NDSgtbUVFosFYrGY7Bd7fPft24eqqipIpdI1B2l2ZiQajSKbzZJ1CAQC1NfXk2M4MDCA2dlZLCwsIBgMQi6Xw2QyoaamBnv37l3z2FIoFAqFQtkeNE6icRKFQqFQHg8F+U2MvAOBABwOB+LxOIxGIywWy5f+0Xw+j3Q6DZfLhaWlJUQiEUQiEfD5fEilUgiFQmi1WhiNxjVtzHK5HKLRKBGJSiQSSKVSyGQykEqlkEgkUCqVMJlMEIvFZDBlGAbhcBgLCwvg8Xhk9oD9HAC8Xi8WFxcRj8cB3J+JMJvNEIlEYBhmw2Xz+TySySQcDgcikQjpSeXz+ZDJZJBKpVCr1dDpdKv2i1Xv9vl8kMvlKC4uhlgsXjVQs9sQDoeRz+dRW1u7YrBn+z39fj+WlpYQi8XIzIdEIoFEItnw2D6pnDlzBp9++il++MMf4gc/+MEj+c1sNotYLIZ4PI5MJrPC876goIDMYLHXLOXZI5FIIBwOk9lO9h7bSCAvn8+DYRhybUkkEojF4ifKlSSbzSKdTiMUCpH+cYlEAoFAALFYDJ1Ot+LZ9yDhcBjvvvsu4vE4SkpKcPz4cajV6h3ZtkgkArvdjqtXr0IikaCuro68SFIojwMaJ9E46XFy/fp1dHR0kOO7W2OcTCZbIdi6FdixwO12Q6lU4rXXXoPBYHiixoK+vj5cuXIFer0ee/bswYEDBwDct20dHR3F8PAwzGYzDh06RK7L3RzjKF+N+Gp5HMVaaK8FW0kmFApp+8lDsqXKDLlcTkrwdiSD8v/swkpKSlBUVIR8Pk8ewAUFBSgoKACHw1n39zgcDuRyOaRSKVGefnD97PLLByE+nw+1Wk1sc7hc7qpBUKvVQqVSrVgnj8dDQUEB8vn8hssWFBRAJBLBYrGQfdrqfkkkEpSUlKCwsHDNbV++DxaLhfSmPnjhs6rhGo0GuVxu1Qv4ZseW8v9Jp9NwOByYn59HPB5f1Q/M5/NJKatKpSIiakKhkJTN7hb5fB6ZTAbZbJYozO/m71HWJhgMYmJiAktLS5BKpTCZTKisrFwROK917uLxOObn5zE/P0+eg09CMiOTySAWiyEcDsPv98Nut8PpdMLv90Oj0UAmk0GhUMBqtUKpVEIsFpPgYvnzamlpCf/n//wfeL1edHR0oKmpaccCvWg0itHRUfzkJz+BTqfDa6+9BovFQpMZlMcGjZNonPQsjHEVFRUPlcz46U9/iv7+flRUVOD48eM7mswYGRnBP/3TP0Gv1+ONN95AaWnptseC/v5+/OhHP8KePXvw7W9/myQz7HY7Ll26hF/84hc4duwYSkpKoFQqSTLjpz/9KbxeL9rb27F3794VY1w6nQbDMKR1i8Znz158xTAM/H4/RkZGEI1G1/0en89HcXExFAoFZDIZhEIhJBIJnSTdyWQGh8PZtZuQy+U+9GDBzoxvd/nN9mejz9kBbrPtepjM2nb2Z7Pv7eY5e5YIhUK4evUqLl68CIfDgVQqtSrg4XK5EIlEMBqNsFqtqKurQ3NzM6qqqqBQKHYtGIrH47Db7XC73RCJRKRMmPJoGRkZwX/+539iYmICEokEzc3N+LM/+7MNlaozmQycTic++ugj/OY3v8G5c+dw8uRJGI3Gx7ovDMPA5/Ph4sWLuHXrFgYGBkhAlk6niSUjW4ZeXV2Nw4cP49SpUzAajY9s4OXxeFAqlaiuroZKpYJWq6WzGZTHCo2TaJz0LIxxb7zxBvbs2bOt5fl8PiorK5HNZlFYWPhEvqBptVrs2bMHlZWVW46j2P3SarUwm80QCAQrPp+bm8Po6Cjq6+thNBq/tJYOja+evvhqaWkJw8PD+PGPf4zZ2dkNn0UCgQBKpRJFRUVobW3F4cOHcejQIXoR7FQyg0J5VslkMsRGLhqNor6+fsVDNJvNIh6PIxgMIhAIoKenB2NjY+jr68OePXtw6NAh1NbWQiKR7HjQxP7exMQESkpKoNPpaDLjMRCNRrG4uIjJyUlS1n348GEcPnwYFRUVay7Dlll7vV5MTU3B6/WScu3HQTabxdLSEgYHB3H58mV0d3cjFApBKpWisbERKpUKQqGQlG0uLS3BZrOht7cXi4uLcLvdaG9vx6FDhx5JSbZMJkNlZSW+9a1vQSgUwmKx0J52CoVC2eUxzufzPdTz+vXXX0cwGIRUKoVWq33i9rGxsRF/8Ad/AJVKte64vd5+pVIpGAwGUo3EMj4+jl//+tcQi8WQSqU0mfEMxldsq/rs7CxCoRAqKytRXl6+qrIkk8nA4/HA6/Xizp07cDgccDqdiMfjaGlpodcOTWZQKDuDXq/HCy+8gPb2dvI/hmEQCoUwOzuL4eFhjI2NYXJyEj09Pejv70cymYRMJkNZWRmEQuGOvuSFQiHcvn0bQ0ND2LdvH9ra2uhJekyw5eCRSAQOhwNXrlyBXC6HxWLZ0cqcXC5HtFu4XO6OVSOk02lMTU3ho48+wttvvw0ej4empiacOHEChw8fRnFxMaRSKQKBAILBIOx2Ozo7OzE0NIRbt25hdnYWDMOguroaWq12Qy2NzfaNnbHd6F4Ri8WwWCzb1iVYXtK+3nnJZrPkO5ttB4VCoVA2RiqV4uzZs9sek4AvV5XEriefz4PD4Wz4PK+trUVtbe2O7Ber2TA9PY3PPvtsldMQ5dmKr1hMJhPa2trw/PPPr5p4TKfTmJycxODgILq7uzE4OAifz4dkMkkmazba12w2i1wuh1wuBx6PBw6H80TELsuPKdsO/zDblcvlkM1mN2z9o8kMCmULiMVioiC/nEwmg5aWFpw7dw5OpxO9vb34+OOPMTQ0hF/+8pdIp9N47bXXUFpauqPllclkEh6PB8FgcJWWB+XRwufzUV1dTQT2bt68ieLiYhw+fBhqtXrHBsVwOAyPx4NUKgWtVouioqIvvU6GYeByufDTn/4UX3zxBXg8Hr75zW/ixIkTaG1thVQqJfaHOp0OmUwGDQ0N2LdvH65cuYJ3330XY2Nj6O3tRXV1NU6fPr3tmTdWrMvpdEIsFsNgMEAkEu1oNRM7W5NMJpHJZNY8L9lsFsFgEIlE4okuiaZQKJSvKul0GjMzMygoKIBarX7oMZRdTzabhUQieWTPc4ZhYLPZiNMP5dmNr5bDXoPV1dXQ6/Wr4pOamhp0dHTghRdewI9+9CNMTk7i888/x+/93u9BoVBAp9Otm8gIBoNYWlpCMpmEyWQiuhuPk+VxXSqVglAoRHl5+ba1SxiGIRXwMpls3eNAkxkUyhbgcDjEuWQ99Ho9KQfL5/Ow2Wzo7u4mZWUlJSUIhUIYHR3F+Pg4AKChoQFWqxVyuXxFxpGdLR8aGkIwGER9fT1qa2vhdrtx7949dHd3Y2hoCD6fDz09PSgoKMCBAwegVCoRCoXg8/mg0WjQ0tKC8vLyNcv/M5kMZmZmcOPGDYTDYVitVrS0tKz7sKCsDWulaLVaYTAY8O6776K3txeffPIJXnzxxYcqq83lcojH45iensbg4CC8Xi+CwSBR9lapVCgpKYHVaoXVakV5eflDbbvX6yXWjYlEAi0tLThz5gz27t2LwsLCNZeRyWRQKpVgGAb5fB49PT0oLS2FwWDYclVGKBTCwsICBgYG4Ha7EQqFEAqFIBAIoFKpoFQqUVlZiYaGBhQVFa0YmDdSsF+uMF9UVITm5ma4XC7cvn0boVAIyWQSAGAwGIi1JQDMzs5iYGAAdrsdsViMfKepqQkHDx4kAr8UCoVC2d5L4kZuJolEAh6PB319fXA4HAiFQvB4PCgoKCDuKSUlJaiurkZ9ff2GLYXpdBoDAwOIRqOYnp6G3W5HJpOBWCxGcXExrFbrmmPKem4mW9mv5W4mbrcbN27cwPDwMHp6ehCJRHDx4kXcvXsXJSUlaGlpgd/vx9jYGJRKJfbu3buuLgLDMHA6nbh37x7GxsZQVVWF2tpaVFdX0/jqKYmvlsPqjbFtR2vFVWq1GiKRCAcPHkQ4HIbb7cbCwgIqKipWxOWpVAqjo6OYmJjA5OQkaQFOp9NQq9XQ6/UoLS1Fc3MzjEYjJBIJ4vE4BgYG0N3djbKyMhI3PUhfXx8+/fRTAEBzczM6OjpWVYa43W5MTk7izp07KCwsxIEDB1BUVAQej4doNIrBwUFMTk5iZmYGoVAIDMOAx+PBYDCgqKgIlZWVaGpqWhVXsfcUj8dDZWUlpFIpbDYb7ty5g1gsho6ODrz88ss0mUGh7CZisRhVVVXIZrPEDWJychL9/f2orq4myYzu7m68++67yOfzeOutt6DX61c9LBiGwfDwMH7+859jenoab775JjQaDcbHx/Hee++hu7sbXq8X2WwW0WiUuE4UFxfDZrNhYGCAVIMYDAbweLwV68/n80gkErh79y7+4z/+Ax6PB+fPn0d5eTlNZjwk1dXVaGtrw7Vr1zA1NYWLFy9i//79UCgU22q9yOfzSKVSmJ2dJdUPCwsLYBgGXC6XKO/L5XIcO3YML7zwAnQ63aaliGvhcrnQ398Pp9MJo9GItra2DRMZbHAhEAhQVVUFuVyOkpISqNXqVfaH65HJZLC4uIjLly/jvffew/z8PNLpNHFCYNd/5MgRXLhwAceOHVsh8rmRgj3rouLxeNDS0kKSgr/+9a8RDAaRTqeRy+UgFApx9uxZCIVCZLNZ9PT04He/+x2cTicSiQQYhkE2m8X58+ehVCrR1NQEmUxGL3IKhULZBuwzube3F1arFceOHSPJjHw+D6/Xi97eXvzsZz/D5OQkwuHwinEsm82ivr4ep06dgk6nQ3Fx8ZrjKTtD/fnnn2NqagqDg4OkEi+Xy0EkEqG9vR2vvPIK5HL5Cge4np4e/M3f/A327t2L73znO1tKZqzl2DU7O4v3338ft2/fhs/nA8MwuHz5MoRCIYxGI7hcLkZHR/E///M/MJlM+N73voeWlpY1x22GYYjuxm9+8xu89dZbEIvFz1wy42mOrx4m4SGTyVBTU4Px8XE4HA4EAgFEIpEViQy23aazsxNdXV2QSqXgcDjEzluj0aCmpgZvvvkmDhw4gIqKCsTjcXR1deHv//7vcfToUXzjG99Ykcxg26O6urrwV3/1V+BwOPje976Huro6FBUVrdh3h8OBS5cu4Wc/+xmOHDmCoqIi6PV6JBIJTE5O4v3338etW7cwMjJCrLPZdw6LxYK2tjYIhULU1NSseN9g7yk+n4/Tp09DpVKhv78fH374IQoKCqBQKGgyg0J5FLCWcC0tLbh16xYmJiYwMTGBUChEPmftl9gZ4K0il8vR1NQEhmGg0Whw5coVRKNRNDU14eTJk9i3bx+4XC4mJiaQSCQQDAYxOTlJZq2XP4zYF0qbzYZkMklmPR4UsaJsHYVCgaqqKpw6dQpXr17F0NAQ+vv7IRKJtiwqBtyfqbLZbPiHf/gHDA4OIp1O46WXXiLK6eznAwMDuHr1KvEwP3XqFDQazba22e12Y2BgALFYDKWlpTh8+PCWbe3Y2S621FMkEm1avcAqjX/66af4t3/7N4hEInR0dODQoUMQi8XIZrPEUaWnpwfz8/MQCARoaWlBcXHxlvcrk8nA5XLh7bffRklJCV577TXo9XoyG8MOtrFYDIFAACqVCidOnIDZbEYikcD09DR+85vf4Pr16wCAv/7rv6bJDAqFQtkh2Na/a9eu4cc//jE8Hg8aGxtx4sQJqNVq8Pl8LC0t4eLFi5ifn8c777wDs9mMI0eOrDme+nw+DAwMYHFxEVVVVfjDP/xDKBQKRKNR2Gw2dHZ24tatWwiFQigsLERjY+OOCyvW19fjO9/5DkwmE3p6ejA3N4dXX30VNTU1MJvNaGpqglwux8jICMbGxrC4uIhAILBmu0QqlcLIyAjm5uYglUpx7NixNWfSaXz15MZXu8HQ0BD+93//F5988gny+Tyef/55HDt2DGq1GqlUCtPT07hz5w5u3LiBxcVFfPvb38b3v/99KJVK6PV6KBQKzM7OrmqDWt4exeFwIBaLEQ6HMTU1Ba1Wu6KSKRAIYHx8HIlEAiaTCU1NTZBIJOjs7MRPfvITDA4OQqFQ4Ny5czh48CCUSiXi8Th6e3sxNjaGDz74AIFAAK+++ipeffXVVfvocDhw7do1hMNhaDQafP3rX4dYLEZzc/O6x4UmMyiUHaSgoID4YRuNRvB4PITDYWLrygocPkyGVygUQq1Wo66uDg6HA/39/chkMigpKcH+/fvR1NSEXC4HqVSK4eFh3Lx5E6Ojo9i3bx8RIWXJZrOYn5/H1NQU0uk0rFYr6uvrqWryl4DL5UKtVuPUqVMIh8P49a9/jQ8++IB4iG/V6WN+fh5XrlxBX18fJBIJnn/+eZw5cwZmsxlSqRQMw8Dj8aC6uhr/+q//inv37kEoFKKpqQkKhWJb7RB+vx/Dw8OIx+MwGAyoq6vbck8j23q1nd7MTCYDh8MBv99PEhlHjhxBS0sLBAIBcrkcAoEAmdEaGxvD2NgYSkpKtpXMCIfD8Hq92L9/P/bv34/29naoVCqk02nYbDb09PRgcXER/f39qKioQENDA44fPw69Xo9MJoO5uTnMzMxgZGQEg4ODsNvtMBgMW070UCgUCmXjscDr9cLn8yGbzaK5uRnHjx/HCy+8QGbB4/E4pFIpPvjgA1y9ehXXrl2DVqtd8+XV4/FAJBIRS8vW1lZIJBKkUinY7Xbkcjl0d3djdHQUIyMj0Gq1Ox7vsG0qMzMzsNlscLlcqKurQ2trK8rKyqBSqRAMBtHa2oqpqSnMzs6ir68PbW1tUCqVK+KzSCSC3t5eeDweVFRUoKKi4ol0gqHx1c7Bup+Mj49jcXERXC4XGo0GcrmctMaMjo6is7MTyWQSR44cwcsvvwyr1QqJRIJMJoOmpiYYjUbSijI4OIiRkRHU19dDo9GgrKwM09PT8Pv9SKVS5Lil02mMjY3B7/eTalsAmJiYIPu+PJlhs9lQWFhIbImnp6fR19eH/v5+aDQadHR04KWXXoLFYoFYLCbvGV1dXbh06RIGBwdhtVpx/PjxVe0mfr8fXC4XtbW1OHz4MI4cOQKBQLBhDEiTGRTKLjx0xWIxNBoNZDIZMpnMinJHhmGQyWQear2stRlrl8nn8yGXy2EymWAwGJDNZlFQUACz2Yzu7m7MzMxgcXERyWQSEomEPOwzmQzsdjsWFhbA4XBQVlaG8vJyanH5JRGJRDhw4ABmZ2fxxRdf4IsvvkBhYSGOHTsGnU63yot+LRYWFvD555/D4/Hg+eefx6uvvrqqzaGqqgoVFRW4fPkyrl+/jq6uLni9XpjN5m0NtuFwmPifKxSKHRe9ehC21FCj0aC9vR0vvvgiGhsbYTabyXcKCwuRTqfh8XgwNDSEmZkZeL3ebf1OJBKBXC7H4cOH8dxzz6GxsZF8plQqUVJSgrm5OXg8Hrz00ktoa2vDkSNHyHd0Oh2am5vhdrvJXzQapckMCoVC2QFYq02pVIqWlhY0NzejtbUVDQ0NK17utFot3G43Pv74Y9y9exf79u1b95kfj8dx7tw5tLa2rtDlMJvNiMViWFpawkcffYTR0VFUVlbueMsGK2CtUqkgFovB5XKh1WpRWFhIXsTMZjP279+PDz74AIuLi+ju7kZzc/OKZEYqlYLX68Xw8DCSySRqa2uh0+m2LZ5I46vHG189eL1nMhmk02kyuflgci8SiWB6ehoDAwNwOp3QaDQoKiqCSqVCNpsldrPj4+M4dOgQjh07hvPnz69YT0VFBUQiEYnt5ufnMTAwgLKyMpIIHBsbQygUQiQSIYkEhmEwOTmJSCSCiooKGAwGCAQCzMzMEHchdjsDgQBcLhdaWlpQVFSEdDqN4eFhjIyMIBwO49ixYzh58iTOnDmzYtuqqqogk8kQDAbxzjvvYGZmBna7HVKpdMVxjUQikEqlaG9vx+nTp9HS0rLp8eXQRyqFsvOws9YikQiJRAJ2ux1er5f4ZrtcLjAMsyuJFKlUivLycpSWliIajZKSMvYBmsvlEIvFYLPZ4PP5YLVaUVFRQfruKA9PQUEBRCIR9u7dizfeeAMSiQR3797Fhx9+iKWlpS2tY70SvgcRCARobGxEWVkZGIaBw+FAMBh8oo+PUCjEgQMH8K1vfQt//ud/jra2NhiNxlXXcFFREbRaLdG8cLlcDxX4tLS0rLLF43A40Gg0UCgUEAqFaGhoWJFMAQAej4eioiLodDqSgNmN+5VCoVCeRQQCASoqKnDhwgX85V/+JV577bVVbRTsbPxWWvxUKhUqKipQVla2yvpSIBCgvr4epaWlSCaTuHv3Lubn5x/LfhsMBuzduxdmsxnRaJS0eS7H7XZjaGgI8XgcpaWlOHLkCE2kP+XxVTweJ8KZo6OjK/6Ghobw2Wef4d///d/xd3/3dxgcHIRGo8GxY8dgtVpJC0l/fz8mJychFovR2tqKqqqqNX+LdXuRy+VwOp0YHBwk1bfNzc2QSCTw+XyYmpoi7wXpdBrT09NIp9NobGxEY2Mj+Hw+JiYmiHA62ybsdruRTqdRXl4Ok8lEWlRcLhfEYjEOHjy47rYZjUY0NzdDKpXC5XJhaGhozZZ7iUSCjo6OLbdW0coMCmWXHrqs1zOPx4NcLodYLEYwGEQymSRWRbsBn89HVVUVmpqasLCwAJvNhvHxcZLZj8fjWFhYgN1uh0AgQENDA0pLS7clokTZOJFlNpvR0dGBmzdvwm634+OPP0ZdXR14PN6m1S/RaBRutxsGgwGFhYXrBnLsS7lcLgfDMJidnUVVVRUMBgPm5uYQDofJILQcrVaL4uJiUsrLlgA+qmMjl8shEHZ6HE4AAB0pSURBVAgQiUQwNTVFLIZZ2GTb2NgYcrkcsWTbDnK5HIWFhdBqtWuKkrKtXqzGzYNWaay3PZ/PRz6fJx7uFAqFQtm5F1M2VnI4HMRZ4kFu37696frEYjGUSiXEYvGqWIbL5cJkMkGj0ZCKkEQi8diSOBqNBk1NTWT2fGFhATqdjiRh2GQGwzAoLy9Ha2sr1Wx6CuOr5TidTly7dg2Li4urYpJsNktcfHw+H+rr63Ho0CGcOXMGJpMJfD4f8XgcS0tLiMfjpLVmPQ0PuVxO2j/8fj/sdjsYhoFWq0VdXR0kEgkxKKiqqiLvBaw+S0NDA/R6Pfx+P27fvk3eW/L5PGZnZ+FyucDn81FXV4fi4mJkMhm43W4Eg0GkUilMTU2hoKAAg4ODayaTpqamiF6ZzWZbFX+q1WqUlZURcwSazKBQHhPL20lEIhF0Oh1UKtVDzTA/TDLDbDajvr4eXV1dcDgcmJqaQlNTEwwGA6LRKCndVygUqK2tJfoelJ1BpVKhtrYWra2t+OSTT9Dd3Y07d+5ApVKtm7FmSaVSiMVisFqtUKlUGwaDAoEAfD5/xcxBOp3G3bt3MT09DZ/Pt2q5pqYmSKVSCIVCCAQCyOVyBINB5HI5ZLPZXVXsZpXEPR4Ppqam0Nvbi6mpKTidzlVuO2z7y8Mgl8uJi8+GAyCPB61WSwNFCoVCecRkMhn4/X5MTU1hYGAAExMTmJ2dXTUGbWUsEIlEUCgUa45fHA4HMpnsiWnTYKsLZmZmcOPGDUxMTKCoqAhqtRr5fB4ejwcjIyMQCASwWCyora2lF8tTGF8tJxgMYnh4GDabbVUFdEFBAbhcLrGkb2trw7Fjx9De3r4q6ZHL5cik0HrXs1AohFwuB5fLJWYAmUwGCoUCZrMZCoUC4XCYtJCk02mEQiG43W5UV1cTl5GhoSGEQiF4vV5EIhEIhULMzc3B6/VCIpGgqqoKJpMJiUQCkUgEiUQCiUQCfX19GBsbW3Pb0uk0SQQxDEO2bTlKpXJd1yKazKBQHiGsfZLH40FJScmuWzo9OHCrVCqYzWYUFxdjYGAANpuN2DuFQiEMDw8jEAigpqYGFRUV0Gg0j3QbnwWkUim+9rWvIRaLYXJyEhcvXoRMJtt0sP2yJJNJ9Pb24ubNm5ienl71eTQaRWNjI3Q6HZRKJSwWCxmE1lNW38n7or+/Hx9//DEuXryITCYDo9GI8vJyaDQa8Pl8Uo3B9o8+DHw+HxKJhLZNUSgUyhOayHA6nfjggw/w85//HD6fD0ajEdXV1WQsWD5uTE1Nbbg+nU6Hmpqap0JXgm23vHfvHj777DP09vbCbDajpqYGyWQSCwsLGB4eRnNzM0pLS+nF8pTGV8uxWCxobW0l7h7LYdupNBoNmVx5UJyWtR5ebtO6FaLRKBHZZd0UrVYrbDYbaSEJBAKYnJxEMpkk1RsymQwGgwF8Ph8zMzOwWCwoLCzE9PQ0lpaWYDQaodfrIZVKt1XlxOPxiKaMwWCAVqvdkXiTJjMolB0kl8shGAxienoaXq8XMpkMJSUlD6WanU6nEYvFHqpXn8fjEa/p6elpOJ1O2Gw2GI1GuFwu2Gw2iEQiVFZWrgocKDsDn89HWVkZDhw4gOHhYYyPj6O7u3tXBtvlswhisRgdHR2wWCxr9njW1tZCr9eDy+VCp9OhsbERCwsL8Pl8mJiYQHNz85YrFRiGwdzcHEQiEfR6/aaK4rFYDJ988gmuXLkCj8eDF198EU1NTbBarcQ+mJ0FWWvWYzvHgyYyKBQK5ckkHo/j888/x5UrVzA1NYUTJ07gwIEDaGxsXGUlz1q4bra+QCDwUOLqjxpWk6myshJmsxnj4+OYnZ1FOp3GzMwM5ufnwTAMDh06tOMipTS+enTx1XKUSiWqq6vR3t6+KtHB4XAgkUggkUjWTcaxbVlbETldjlgshkqlApfLJetoaGiAz+fDzMwMotEoQqEQbDYbJBIJEbAVCATQ6XQoLCzEwsICXC4X9Ho9pqenwTAMamtrIZPJVu2nRCJBW1sbKisrN33vYX9vuVMKTWZQKE8A6XQaCwsLuHfvHoLBIIxG44pyNg6HQ/r1N3rpYy2awuHwQ+sZKBQKVFdXE3uviYkJ6PV68mDSarVEXZiy87ClrfX19XjuuecwPj6Ou3fv4vLly9i3b9+6GgxcLhcCgQCpVAoMwyCfz697rSwvO5TJZBAKhZBKpTh79uyWtlGv16OhoQFXr16F0+nEwMAAqqqqIJVKN7U5S6fTCAQC6O7uhkqlwt69e0lCYz0SiQS6urowMTEBs9mMV199FS0tLSuU51OpFO7evYu+vr6HPvb5fB75fJ5ehBQKhfIEkkgkcPXqVdy5cwdCoRAvv/wy2tvbV4gx5/N5MAyD/v7+TdcXDAYxNze3ZrzErodhGFLS/zgrUdnxurS0FDU1Nejt7YXdbsfS0hJGR0fhdDqhVCqxf/9+lJeX04vlKY2vliMSiaBWq1FcXLxK9HwrcLlcqFQqIgTLMAyy2eya383lckin08jn81AoFDCZTKT6QSAQwGq1YnBwEKOjo1haWiItJ1qtFjqdjrTIqNVqWCwWuFwuuFwulJeXEwfE+vp6ov1RUFAAPp8PLpcLiUSCgwcPoq2tDSUlJY/ueqC3BIWyM6RSKTidTnR1deGjjz7C/Pw8SktLV5ScCYVC6PX6DUurcrkckskklpaWiKDOw6BSqdDQ0ICysjLE43GMjIygt7cXY2NjSCQSsFqtqKur25GsKGV9ysrKcPr0adTV1SEUCuHSpUuYnZ1dt1yQHXzm5uawuLiIRCKx5sC8vOyQz+ejsLBwlYr7ZhgMBtLjOTo6it/97ndwuVxbSqDNzc3h/fffx7/927/hJz/5Cd59991N1b5ZZxCxWLyu8vzDllMuJ5PJrHvcKBQKhfJ4YRgG09PTWFxcJM4mD77ksS4Jbrd70/XF43H4/f41KzOWr4etWn0SJnFYZ4eCggJMT0/j2rVruHXrFoLB4LrjI+Xpia92ErYVRS6XI51Ob+iuEg6HYbfbkU6nIZFIVrxv8Pl8VFZWorCwkFTBjo6OYmRkBEVFRSgsLCTr0Wg0KC8vh91ux/DwMCYmJhAIBCCXy2G1WknSg8fjobi4GDqd7rE569FkBoXyJWAFDRcWFnDt2jW8++67+PDDD2G321FcXIyDBw+itraWJAz4fD5UKhV5IPl8PoRCoRUP01AohMHBQYyMjCASiaz4jHVH4fP5m5bRs2ViVVVV0Ov1mP+/7d1JbFvX1QfwP2dxpqiZFEVNVGjKlCXZmqzIiZXBRZwBCJAgQYJsmiaLFsmim8IoCmRhIEBXHVwUDdCuihQo3AAN0gyua1uRVcc2rXmIPMmSJUvUZEqcx2/x4V2YkeSpdlpa/x9gwCBs8fGK7537zrv3nOlp9PX14eLFizCZTKipqUFpaek9L1uje5OXlwe73Y6DBw+irq4Ok5OTOH78OEZGRrac4DQ3N0Mmk4m9s9/dkxiJRDA/P4/x8XEsLS2J3/OtKxzuhsFgQHV1NTo7O1FaWorR0VEcPXoUJ06cwNzc3KZJjXg8jrGxMRw7dgxHjx7F5OQkNBoN6urq7mq/cjKZFMVxpaWbt36u69ev49y5c/ddL0MK5vPz8zmx5JiIaLuRy+XQarUiZigUiqw5jdTh4V//+hdGRkagUqmwvLyMYDC46c8LhUK4ceOG2OJ7q1gshvPnz2NychIqlQoulyvrpu1hSafTWF9f37TrBQCUlZWhtbUVFosFs7OzOHXqFP79738jnU6jo6ODW4BzfH71ICmVStTW1sLhcCCTycDn82FychKxWGzDKlTpfiQQCKC4uBhut1usopASD3a7HXl5eRgbG8Pw8DAWFhZQUVGRlVC0Wq2orq7GzZs3MTY2hv7+fkSjUdhsNtTX14ufqdFoRBtbqQDoVsc2NzeHEydO4E9/+hNOnDiB9fX1LVeY3NP48FQgurNkMolAIAC/35+VyEgkElhbW8PExAR6enrQ29uLqakplJaWYs+ePWhtbYXD4RAnvVqtRn5+PiwWC65fv46pqSlcvXoVhYWFMBgMSKVSmJqawtmzZ3Hx4kVkMpmsFRzS3j2dTgelUimeQEtLxVQqFdRqtdjGotVqUVVVBafTib6+PkxPT8Nms6Gurg5Op1NUPKaHS6fT4amnnsL8/DxOnjyJnp4exGKxTduG2mw2tLS0wOfz4caNG+jr6xPdORQKBTKZDBYWFjA8PIyxsTHE43G43W5UVFTc85MDjUaD4uJidHd3IxwO44svvsDRo0fh9/uRTCZFIShpGWYmk0EgEMCpU6fw1Vdf4fTp07Db7Whubsa+ffs2/Ty3kslk0Ov1SKVSWFpagt/vFwVHk8kkFhcXMTY2hvHxcfj9fshkMlF9PBAIQKvV3tVqi/X1dfEZiIjoPxcOh7PmQFuROjPcrrCfQqFAeXk5ioqKxKrW0tJSMQ+SWkVKWzD0er2IGYFAABqNJuv6nslkEAwGMTg4KOY1CoUC6XQaCwsLOHPmDC5dugSj0YgdO3bAZrM91CSNWq1GIpHA7Owsbty4gfLycvEgSkpQFBYWwuPxwGaz4dq1a/jmm28wPj6Op556Cu3t7WJLAeXm/OpBUqvVqKysRFVVFfLz8zE0NITa2lq0t7fDbDaL75S0TffUqVNIJpNwOBzYuXOnGAuFQgGr1YqSkhIYjUYMDw9jZmYG4XBYnI8Si8WCiooKxONxXLp0CUqlEnK5HDabLWv7k1qthsfjQW1tLVQqFfr7+1FZWYldu3aJY5PJZIjH4xgaGsI//vEP9Pf34+mnn4bH40FeXt5/fB/CZAbRXbh+/To+/vhj9PX1icApdX+Q/gQCAUSjUVRVVeHAgQP4wQ9+gIaGhqwLqtFohMfjgdvtxoULF3Dq1Cmsrq5ieHgY+fn5WFlZwdTUFG7evIm8vDw4HI6sJxFSp5LS0lIYjUasrKzg7NmzMBqNmJychNPphNfrFRckpVKJyspK7NixA+fPn8f8/DysVitcLpcIrvTwKZVKlJWVobm5Gc888wx6enqwtra2abC12+3o7OzEyZMnMTExgY8++gjj4+OoqqpCYWEhIpEIJiYmcPbsWczNzWHv3r148803NxSVupeJwNNPPw2VSoV4PI6+vj78/e9/F8W0zGazWE4YCoWwuLiIq1evIhwOo66uDm+//Ta6urqg1WrvuFpIo9GgpaUFwWAQ3377LX7729+K1sBSkVq/3y+OR2orfPz4cZjN5g2tyoiI6Ptx+vRpfPDBB3f8d4WFhXjnnXdgt9tvGwvq6+sxNTWFM2fO4Pe//z28Xi+qq6uxurqKK1euYGZmBu3t7bBarejv78fg4CD6+/vxl7/8BfX19VmrSp1OJ3bs2IFPP/0UAwMDaGpqgsViQSgUwpUrV/DPf/4TkUgEbrcbTU1ND61LiHRj5/P5sL6+jk8++QTz8/OYm5tDWVkZqqurUV1dnTUOra2tCAaD8Pl8iEQiKC0tRUNDA3Q6Hb90OT6/elCk4p2NjY145ZVX8PHHH+Ozzz7DzMwMdu3aJdr6joyMYHR0FJcvX4bX68X+/fvR1ta2ITFmtVrhdDoxNDQEv9+PwsJCsVpbYjKZYLfbodFoMDY2hrW1NdGOdavx7+7uRl9fHz755BNcvHhRHJu0lWp0dBSXLl2Cx+MRXezYzYToIV8gLRYLysvLsbi4iEAgkNUeLB6PIxaLiWVbUobd4/Fg165dcLlcG+pRqNVqFBcXY+/evVhdXYXP58P09DTC4TCKi4uRl5cHo9EIt9stLqrLy8vIz88XmUupEnZ3dzeSySRWVlYwOTmJRCIBuVwOl8sl3k+hUKC0tBRVVVWwWCyQyWQwm8147LHHsooC0f3R6/Xiwn672iMymQwajQZutxsvvvgiAoEApqenxX7GW4OuTqdDVVUVXn/9dZw7dw4jIyOYnZ3F9evXkUqloNfrEY1GkZ+fj66uLrS3t2PPnj33PfGRMvV79uyBQqGA0+kUSQW/34/p6WnEYjEYDAaxZFBq6ev1erF3717YbLasRIZ0Tmi1WhQVFYmnBnq9HgcOHIBer8fp06fF3kpp7KTiUZ2dnaipqYHBYMCFCxcQi8UwNDQEt9sNs9kMnU6H8vJyWK1WmEymrHPDbrcjEomgtrZ2020vUheX8vJy0a7su6Q+7iUlJXA6nTAYDDxXiGhbxriysjIEAgHI5fI7tkgF/r8dpLRFUbom37x5Ew6HQ1xvtVot9u3bJ27oQ6EQfD4fxsfHRdcIj8eDrq4uRKNRsfw9nU5jcHAQBoMBNptNxAK9Xo/du3cjFAphfX0do6OjiMfjiEajiEQicDqdqKmpQUdHBxwOh0jQS7G7uroaZWVlWXFco9GIm76ioiJoNBoR57aKcUqlEhUVFWhqasLevXuxsLCAa9euwefzobGxccNWhby8POzevRtXrlzBmTNn4Ha74XK5HthNHudX/735lVQQc7O5yv2Qy+WorKwUBUi//fZb+P1+9PX1iVVIoVAIOp0OBw4cwP79+9Hc3Lzp2JWVlaGtrQ1+vx9arVYkMm79nAqFAiaTCbt27UI6nUYmk8GePXtQWVm56fjv3LkTr7/+OsrKyjA1NSWOTVotHgqFoFQq0dXVJY7t1vnXVucUkxlE/wG1Wg2bzYbGxkYsLS1t2iJV6pVcUlICm80Gl8slbn42e0otLbNvamqCWq2G0WjE+fPnEYlEkEgkUFFRAa/XC6/Xi9XVVeh0OiwuLqK8vDzrxC4pKUF3dzeUSiUGBgYQDAaRSqUgl8uzKjPL5XKYTCYUFhbCaDTCYrGgpKQEDodDdFih+5efnw+PxyN+J3dit9uxb98+TE9P4+rVq1AoFKisrMzqO65QKFBQUIAXXngB1dXVsNvtmJycxOXLlzE3NweHwyG+a8899xwqKysfSBFXh8OB4uJi1NbWYmJiAqOjo5iZmcHc3BwWFxdhNpthMBhgtVrR0dGB5uZm7Ny5c9OfpVKp4PV6sb6+jtraWjFx1Gq16OjogMlkgtFoxMDAAJaWlhAIBOBwONDU1ITHH38cLpcL0WgU5eXlKCgowOzsLDKZDNLptCjg1tjYCKPRmFX3RXpfaRnkZkXe1Go1qqqqEI1GkUqlNp2kKJVKsdf01razRETbLcbV19fDZDJtWfvhuwoLC7MKDnq9XhiNRhQVFYnrrUajQVNTE7RaLXQ6HQYHB8UNkMPhQH19Pbq6utDQ0IBEIoGCggJEIhERC1KpFJRKJfR6vYgFzc3NKC8vx8TEBI4fP46lpSVkMhkRL1pbW9Ha2rrhiX1JSQna2trgcDiy4rjUcaS5uRkulytrXrdVjJMeDjQ0NODgwYMYGBhALBZDLBaDXC7fMC+Ukh9FRUXQarVoampCTU1NVrKF86vcnF+p1eot5yr369a5vM/nQ29vL2ZmZkTtPWlbSXt7O9ra2rY89pKSErS0tMDv94sV5Zsl0LRaLTo7O2G1WhEKhdDe3g6n03nbOaTNZsPAwADOnz8vjk2pVKKgoAAej2fLY9vqnLobsgz711EOePbZZ3Hs2DEcPnwYhw4d+l7eM5lMIhgMIhgMIplMbrpXXy6XQ6VSQalUQq1Wiz7Qd8q+JpNJRKNRrK2tIRgMIp1OQ6VSQaPRiOCeTCYRCoWQTCah1+uzsrrpdBqxWAxra2uIRCLiCbNOp4PJZBIXzEwmg1AohJ6eHvzmN7/B6uoqXnjhBbz66qtZKzjo/oTDYQQCAQAQv6PbkeqsLC8vIxaLieSWXq/fMMFKp9OIRCIIBoOIRqOIRqNIJpNiz21eXp7oB/6g6p5IBW0jkQgikQji8bgo1intQZYmkJsd863f74WFBaRSKdGSTErG3fq5pO+3FPh1Oh2MRiM0Gg0ymYzo6hOPxyGXy8XPkSqNSy3T9Ho9FAqFeN9kMgmNRoOCgoIN2X3p/0ajUWQyGZSUlGyYYEhPOMLhMGKxGPLz86HVark6g4j+5/T29qKrq0tcwx90jLt58ybi8fhdd4dSqVTiuipdk2OxWNbrkmg0ivX1dYTDYcTjcTGX0ev1MBgM0Ol0G2KBFDellRJSLNDr9VCr1YhEIllt7RUKhYhZer1+Q0JhbW0NKysrUKvVMBgMIo7HYjERpzQajYi3MpnstjEOgDiGUCgkap9tFjfX19fx+eef4+jRo+jt7cXPfvYzdHd3o76+nvOrHJ9fpVIpRKPRTecqD2KeJt2f3HpuSqua7vReiURC1NtLp9N3NV9KpVIwmUzQ6XRbJhoymQzC4TDC4TBCoZA4Nql5we2O7U7nFJMZxGTGNiRdVIaGhvDZZ5/hq6++wmOPPYbXXnsNbW1t//U9gERERPS/m8yghycSieDatWs4cuQIfD4fUqkUPvzwQzQ2NrIlK9E94GMmokeIlJlOJBKi8nhfXx/OnDmDRCIBt9ud1SqWiIiIiB6+RCKBeDyOeDyOhYUFDA4O4ptvvkEkEkFLSwsqKyuZyCC6R0xmED1CwuEwZmZmMDExgfHxcYyOjmJkZARyuRydnZ3o6OhAcXExe5cTERERfY9mZ2cxMDCAq1evYmxsDIODg5ibm8P+/fvx1ltvccUs0X1gMoPoERKLxTA/P4+zZ8/iwoULCAaDKC0thcfjwf79+7Fjxw5otdqsIqFERERE9HAtLi6iv78fIyMjWF5ehlarxUsvvYQnnngCO3fu3LIOFRFtjckMokdIJpNBMplEIBBANBqF3W7H7t270dLSgoaGBhQUFHCQiIiIiL5niURCFG0sKiqCy+XCwYMH4XK5uCqD6D4xmUH0CLFYLGhra0NdXR3C4bDoEHG7zhNERERE9HA1NDTA4XAgGo1CJpOJrhlsxUp0/5jMIHqEKBQKGI1GGI1GDgYRERHR/wiDwQCDwcCBIHqA5BwCIiIiIiIiIsolTGYQERERERERUU5hMoOIiIiIiIiIcgqTGURERERERESUU5jMICIiIiIiIqKcwmQGEREREREREeUUJjOIiIiIiIiIKKcwmUFEREREREREOYXJDCIiIiIiIiLKKUxmEBEREREREVFOYTKDiIiIiIiIiHIKkxlERERERERElFOYzCAiIiIiIiKinMJkBuUEi8UCAJiamuJgEBEREQEwm83i79PT0xwQItpWmMygnPDSSy8BAP72t79xMIiIiIgAeL1e1NTUAAA+/fRTDggRbStMZlBOeP755wEAy8vL+POf/8wBISIiIgLw8ssvAwB+9atfcTCIaFthMoNygtlsxo9+9CMAwAcffMABISIiIgLwk5/8BABw8eJFPvAhom2FyQzKGT//+c9FsH733Xc5IERERLTtVVRUiAc+77//PoaHhzkoRLQtMJlBORWsDx8+DAD4wx/+gN/97nccFCIiItr2fvnLX8JqtWJ5eRk//OEPWQyUiLYFJjMopxw6dEg8ffjxj3+Md999F4FAgANDRERE25bZbMbJkydhtVpx7tw5NDc3o7e3lwNDRI80WSaTyXAYKNe88847+OijjwAABQUF+OlPf4o33ngDFRUVHBwiIiLaloaHh/Hkk09iZWUFAPDss8/ivffew8GDBzk4RPTIYTKDctaRI0fwi1/8QgRsAGhpaUF+fj7eeustvPHGGxwkIiIi2lamp6fx9ttv49ixY+K1goIC7N69GwDw5ZdfcpCI6JHAZAbltEAggCNHjuCPf/wjLl++LF4/fPgwDh06xAEiIiKibam3txe//vWv8de//jXrdU79iehRwWQGPTKGh4fR09ODQCCAffv24fHHH+egEBER0bYWCATw9ddfY2hoCAD4sIeIHhlMZhARERERERFRTmE3EyIiIiIiIiLKKUxmEBEREREREVFOYTKDiIiIiIiIiHIKkxlERERERERElFOYzCAiIiIiIiKinMJkBhERERERERHlFCYziIiIiIiIiCinMJlBRERERERERDmFyQwiIiIiIiIiyin/B8hsuT2o/pCzAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAAXMAAAEKCAIAAABv9SLMAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4QMMFyEmW0GCBAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAACAASURBVHja7Z3NjrPI+fbpyaNZTDQyHY30T6RExqvsYqxsIxUcgfE+EvgITB+B4QiMj8CFcgDgIzBIs42Ms8uKsvRIyUhRXNZoEmmixO/i1lMvY7pt+uvx1/Vb0TQfBXX5qrvuguJut9tpAADwpnyBWwAAgLMAAOAsAAA4CwAAvAkf6quEENPptCgK3J1rxTTN0WhkGMa7niWO4zRNpZS44VeJruuO47iu++h/7/bGhjjnw+FQ0zTGGO7dtZLnuaZps9nM87z3OL6U0rbtoija7fZ7+xc4FUKI9XptmuZisdB1ff/fuwplWZKnbDabHbheNptNt9vVNK0sy/c4PrVjSZLgVl83s9lM0zTXdev/+omzjEYjTdNgKzdiLpqmjUajCzoyOEOeMo2fZHCLomCMPRLYgGvsJDPG3iObRsd0HAc3+Ragiq4LCWNDAIC358M5FIJzvl6vq22paZrvfVIpZa/XS5JEnStN09VqNR6Pj+4bBMHd3R0tG4bBGHtZnlJKaZpmmqaf4XpvgdMKSdf1OI7VetM0G/YAhBBxHPf7/ReX9gyF9MWZCEKlEpfLpWVZND71rgyHQ9d1qzUxHA5ns1mapkf3DcNQFThJkk6n02QvTdMsy8qyrNol4Zzbto2h2SsQkhAiCIJqAqJhzQZBMJvNoihqftILEFI16cIYY4x9/iQQY2yxWKg/F4uFpmnL5VJJJIoiJZqyLNW/NptNlmVqxyzLKJNUliXnvKoz2qssS6r75XLZarWqaafZbNbtdieTSb/fP1pgTdOqBXZd9/BeqpDqSqtXwRgbj8cnue3vUd1UfdX7cyNCotPt6eToANlms9F1nfY9OnhyhkJ6qrrPMc9CcQS5r+/7nudtNpvlctnr9YqiKIpiMBjQllEU9ft9yh5JKS3LoobLNM3lckmtFkUTnHPf9y3LohvBOXccpxqpxnHseZ7jOPP5XAjxrAILIQ4HvVSwvdbV931a9jyvGkWDixZStYdCneXDhUzTtN1uW5bFGOOcHw1VLkVIH85QEJzzVqtlWVZRFNPptCxLVT1RFEVRJISQUuq6nmWZ4zhZllEnk7q1Dw8PURTRM2CmaT48PFD6Os9zdaiiKFR9kDVkWUZd5X6/zzkPguBwIeM4pufNSBnPCmX3cBxnOBzSFcEOLlpI1FMmW1ksFuPx+GjiI4oiOoLneWEY7h3tcoV0LjHLw8ODbdu2bd/f33POqQ8phOh2u0oNjuOsVivKzNEGVK+0TOIgrazX6zAMwzBcrVYUgOi6Xn0eNM/z6t0PgsB1XVrjOE4T469G4FmWHW1tDkDnxesUVyAkJYxWq2WaZhzHh6u1KAohBBkWhVTV7MlFC+lcYhaVTK3Ge/VeBj0lTM2LruuWZZmmSbcyz3Pf96n61SsLrVaLxnpM03wqLpVSzudzKWXVUNI0PfxEhud5qqi+73c6HSoMfts3KyTVSqll3/eVYT0VsGy32/v7+2qcVe/yXCLn4iymadZvqGmaFFsqg1eioZw/7UIR7G63Uz9sx3EO/8hbrVbVRCgJVxUE9Z+f1VYcTsurwis7Q9/nyoRUxzCMA4OG1JgtFgtV4KIoer1eFEUHtHEpQjrrJ+Usy2q1WqQJegNbdXo3m02e51QllmWFYaiqx3XdMAzpdx6G4aMv3akGStM0ddhqPKLyuPRmXf0Iq9Uqz/M8z+fz+XA4pP68cqW9jRljqkgkjjiOlXPR8a+jpbplIan+ERHHcRiGqpbrQuKcU+62erRut0v6uXQhnYWzmKb5lO9mWbZcLul97dFopGrX8zzqyirdqH9FUdRut+mYZVlSblXX9arTUxhMOqvuq8rjui7VU1mW9WCEMZYkyXg8Ho/Hk8mk3W6r4SQpZX1oicIi0zTzPLdt2/f96rVkWdbv9/H7v2ghaZ+ezRt/IkmSyWSiUvt1IRVFUR8o8H1fDVFdtpDO4XmWk7yP12q1mrzp2+/3n/WKJump4QMXhGEYp3r648qeZ4GQPv9tv6TnWT4Duq4HQfDw8HB0y6eeVjic3G2+cRRF3W4XXSEI6cqE9OFmNUEPDuzlw15Zu9qxd3w9z6uOLEgppZSvGbEGENJ5CukDNPE52ZMXtXj4cUJI1yckzKIAAICzAADgLAAAOAsAAMBZAABwFgAAnAUAAOAsAAA4CwAAzgIAAHAWAACc5VSoSVIVr5zOFkBIEJLiRt9InE6nSZLsCYImQ91ut/QRbAAgJDjLM6DPzRiGYdv23r+2263v+2ma0nw2AEBIcJamzGYzmnm//pEgmml9MpngZwMgpNdwi3kW0zSzLMuybG+e0aIoaD0+7gEgJMQsL0HX9fqM/PV52AGAkBCzAADgLAAAOAsAAMBZAABwFgAAnAUAAOAsAAA4CwAAzgIAAGfkLJzzvWeiNU0LguDARySzLLu7u6uvtyyL9qovNCFNU9M0pZRZloUV8jxveAQhRBiGr3zsUkppGAae3bwCIak1YRimadpk3yAIlPDiOK5f0cUJ6bycxfO8535YW9O0KIr29lJr0jQ9rAwp5XA45Jzrup5l2Ww22+12u92uLMt+v9/we71BEMxms/praYexLKv69r2u65xz27ar0gSXKCTlX5PJZDgcNjl1GIZlWZL2kiTpdDoNLelshXS+vSEhxHQ6rccCUso4jqfT6VFfF0LM5/P1ep3neVEU1e2FEHTYKIr6/b56c8wwDGruOOec8+l02qSJmM/nnPM4jpvUZT0UUoWxLKvb7T7XocAZConWBEHQbrcbzgLleR5pL01T13WP7nXmQjovZ6HfM/l9p9MhF9+LSD3PWy6XZVl2Oh2yat/396qB1gghFotFWZaLxYJzXg1AaO4MTdPiOHYc5ynLaLVaTWLgdrttWRZjrImGLMuqX7Uqm+d5cRzDDi5dSGRGjuP4vv+CChVCqNjnQoV0vu860+QXFEdMp1OlCcdxVMgaRVH9/lZvvWEYpCchRKfTkVLquk5RRhRF1P5UBbFer8Mw1DStKIqyLPfmCnsqhKbq9DwvDMOGHaincBxnOBxSOWEQlyskznm/3zcMgypUCGEYxuFyxnFMYQi1Va+MOE4upDPtDdF8fyqTWo1jVf3tZcsOYxiGiinSNKVar++++0S329V1/eHh4fApqpLyPG+z2TQxowOQDpDHvXQhxXFMtqXruuu6TWxCaY8x9vqZdE8upDONWSjI9H3fNM29LonyYMMwnpVC9zxvOp36vj+dTsfj8VO6qQbMpmnuRb/1gGW73d7f31cbqwOtH7gFIaVpKoQYDAbVcx01F5qeThW70+mQLV7onT/TmIWiVt/3679SZcNZlh2NMPdqjjo4ZVk+lVupG/+B1oxSgIvFQrU2y+WySR63nkpE3+eahMQ5H41GuwqtVutZMQjp4aKFdEpnWa1WeYXqv9rtNjUjKixUdzmKIikldXGPGoRhGKvVqqqJwWCgetfUIFTbq+12q8pD8TMp8tHIhXNOudtqjNPtdqnA9XQgwRgLw1BdTlEU1eSfyu3DFC5USJS73VOLyqceCIHVVczn8+Fw2Gq1SAYXKqST9YZM00ySJEkStabadFAFRFHkOA5Fs47jRFHEGHMcx7IsIYTneVRJpmnSjvUF3/c9z1PhLkWwqmp1Xe92u1mWqQxfq9VS8a1hGIvFQtVNPWAuiqL+jANNrUwKfjTGVsH5er22bZsxNhqNlEazLOv3+zCLyxVSlmWu6+4FQbSeXOBRVTDGqldhmqba7FKFVI3ZGGOMsd31MpvN9i5wNpsZhtFk3+femSRJJpPJ4QNWe1IE2dnnuRvvVN30HYzPdhUQ0mmF9FR138p7Q/QA/sPDw16U4XlekxG+R8OTJh3yZ20fRVG320VXCEK6AiHdkLOQ/ddvd5qmR1Nlpmk+t54cxzmcTqPoupp+k1Liq50Q0nUI6W6326k/6Jpf+UQGuBTeqbqzLLNtu5qiAlfMU9WNWRQAAOgNAQDgLAAAOAsAAMBZAABwFgAAnAUAAOAsAAA4CwAAzgIAAHAWAACcBQAAZ7keOOd7L+O9flpjACFBSMSH27zs6XSaJMmeIGhC4+12OxqN8IMBEBKc5Xn0er2iKAzDsG1771/b7ZZme6eZsgCAkOAsTaFPW1mWVZ8BjGaxnUwm+NkACOk13GKexTTNLMuyLNubuLgoClp/uR95ARASYpZTout6/fNxpmni44QAQkLMAgCAswAA4CwAAABnAQDAWQAAcBYAAICzAADgLAAAOAsAABzlNM/ghmHIGDvJd3/v7u6af3J4OBy2Wq0oisIwVCsNw2CMVb/RfQAhRBzH/X7/xQ96SylN00zTFO8cXIGQqqpwXbeJioIguLu7e4H2Tiuk08QsQRCc6rv0i8WC7qzjOIfLkKbpcrkkNQRBUJblbrfb7XZJknQ6nTRNG17pbDarv7F2AMuyqgXTdZ1zblmWlBJWculCUsWeTCZBEDR0z5dp77RCOvF7Q0IIKaWu6/P5XNd113WFEGqZjFYIYRjGfD6XUtJKtazruqZpeZ4zxtQBydrVS2Lz+VzTNLUx2X9RFKvVarVaGYaxXq+73S79l/6l67phGA8PD9V3VemtVrXMOXcc52grMZ/PkySxbTuKInWKR8mybK8BpJtjmibN9xFFUUMt3iAXJCRSRZqmg8GAynz06p6lvTMR0onzLJzzwWDged5ms5lMJsPhUC17nkfVY9u253llWc5ms8Fg4DhOWZaLxUJNilG9j5xzms6Lc/7w8EBHS5JkMBiojYuiKIpCCLFcLoUQruuqRkBK2ev16Lybzeap+luv100EkaZpu922LIsxdnSSsfocH5xz3/eVnuI4hoNcgZA456SKbrfbMPrYs4nD2jsTIb1jzCKlXK1Weyurpk5sNpvlcknuPhwON5uNruuWZdm2TVUrpQyCgBzXtu0kSRzHkVLe398XRXGg07hYLKgahBCdToeaLHV/SXyWZXmel6Yp6S9NU+rH0hmrR4vjOM9z5RdNOjhRFFGNep4XhqGq3RfgOM5wOGzYxF0ZVyak6XQ6Ho9p3+l0Stsf5gXaO7mQ3tFZhBB0BxVFUaRpuheqmaZJF2kYRl0uahvVpJD902aP9hjVyuqRqTyPpr48z1NyUcqg6LG6GXV0NU2jAKTaDjwKtWZUWs/zaCqgF+ca6UKKojhJtvLkPZ2rEVKWZSqEcRzH9/3DpvYy7Z2DkN7RWWhenL2UUpPLfhb1iTCeOzWGYRj9fj9NU0rFUfsmhNir772+bq/XcxznQJY+iqLtdnt/f18NSm/QFyCkqpA453uqiKLoaE+5qj3f9zudDmVMzrnWvrgC2al82wvUoGpuOp2SJkiUhyfvoW32ZhLba+7iOF4sFrtPLJfLOI4Pp+X3znibfZ8rFhKpYrlcKlUsFgvKIj836Dh/IX1WZ/E87/BQ/Ha7fcFh2+02ZcJoisBnhdlUQ47j7Ha7aiqEUv3VjVerVZ7neZ7P5/PhcNjtdqkZ8X2/3uaoLF1VuN1ul7Z8dBfGWBiGSjFFUcRxrDJ/pBWEPBctJFJFNdawLKvVatFJH1XFo9prtVoHtHcmQjqNs6infQzDUDda13U15qeWqytpx+oyOTH1PHVdT9M0iiI6YPXI1Y3Vwng89n1fKcBxnGqtU+ZfVQ9jLEmS8Xg8Ho8nkwljTCmPhjPrjUZ9YI861U/tkqZpq9UyTTPPc9u2fd8fjUYqvZdlWb/fh6dctJAeVUUQBAdUUddeu91Wm521kHYVGGOMsd1NYlnWbDarrun3++Px+OiOSZLs7dhkl8lk8tR/GWPVbhTRbrfrK1/JO1U3fQfjzUsLIZ2nkJ6qbrw3pGVZNhgM6k+vUGrtQDJFcfSRuUdb3eYbU/uJrhCEdEFCgrNoQohut5tl2V6WyzAMzvnRTJ7K1TXn8C57SQQppZQSX/OEkC5LSHc0Tq76hGS9UMkt8E7VnWWZbdvN39YDlx6pPVrdiFkAAOgNAQAuzllopApv698CUso8z9/jOU465gvetQOXCFX0I0KqDhSVZUkbbTabHbheNpsNSUFN/PG20BwFzx1DBRfHbDbTNM113fq/fpLB1TSNcz4cDjU87nntWTea4uxZY5bPCogsy6JZS142ARo4f4QQQgjGWJqm9SGqfWehHaIouoVPXn/77beapv385z//5S9/+fe///2HH37QNO0Pf/jD1V+4aZq+77/3b55znqbpLXSub1NIuq47jvNU4/SIs9waf/rTn/79739/9dVXf/zjH9EQAQjpTbj1saHvv//+X//6l6ZpP/zww/fffw9BAAgJzvI2fcVHlwGAkOAsL+evf/0rBAEgJDjLW/Ljjz/+85//VH/+7W9/+/HHH6EJACHBWV4FPb9zeA0AEBKc5eV9Y8SxAEKCs7xNBLter6uD7rvdbr1eI44FEBKc5bURrPpirlpGHAsgJDjLW0awiGMBhPRWfLjZK//mm2+++eYbTdO+++67jx8//uY3v/m///s//E4AhARneRW///3vaeEvf/nLx48ff/3rX//ud7+DIACEhN4QAADOAgCAswAAAJwFAABnAQDAWQAAAM4CAICzAADgLAAAAGcBAMBZAABwFgAAgLMAAOAsAAA4CwAAwFkAAHAWAACcBQAAZwEAADgLAODsud0Ztv/85z/Twnfffadp2sePH//zn//QGjVnMgAQEpzlefzjH/9Yr9fqz48fP378+FHTtHa7jV8LgJDQG3ohhmE8az0AEBKc5TidTkfTtL3P8ar1AEBIcJaX8OWXX7bb7b3P8bbb7S+//BK/FgAhwVneMo5FVwhASHCWt4ljEcECCAnO8sZx7C9+8QsVwf7qV79CVwhASHCWN+C3v/2tamcQwQIICc7y9j1kCAJASHCWt+Hrr7/+6quv7u7uvvrqq6+//hqCABDSm3BXHYcnhBDT6bQoiqu/+G+//VbTtJ/97GdffPHF//73v//+97+apv3hD3+4+gs3TXM0Gr130xrHcZqmUkoI6SrRdd1xHNd1GzkL53w4HGqaxhiD714reZ5rmjabzTzPe4/jSylt2y6Kot1uo2twrQgh1uu1aZqLxULX9f1/7yqUZUmestlsduB62Ww23W5X07SyLN/j+NSOJUmCW33dzGYzTdNc163/6yfOMhqNNE2DrdyIuWiaNhqNLujI4Ax5yjR+ksEtioIx9khgA66xk8wYe49sGh3TcRzc5FuAKrouJMz8BAB4e85ufpYwDNWyYRiMsc+QAhRCWJaVpqlpmiqTvd1uKdI7TBAE6m201xRYSmmaZrUM4HKFpOt6HMdqvWVZDYdEhBBxHPf7/RfL4EyEdHYxSxAEKq2YJEmn04mi6L1POhwOgyBQNSGE8H1/PB4LIZooeK/AaZo2OallWVmWVbsnnHPbtm9hmPbqhSSECIJAJZ5c1+31eg2LPZvNnlXUMxVSNenCGGOMnTYhpGnaYrFQfyZJUi1klmVBEKRpShmjsiyVesqyzLKsuiUtLJfLKIo459UtidlsRvntdrtdLcN4PHZd13XdJmnIvQK7rtvv9w9srwrGGKMdy7JcLpdq5Xg8/jy3+p2qe7FY7N2TGxQS3YS9UVdVyweS37qu075HB1LOREhPVfe551konUyxw2AwoJ96kiS9Xk8IkaapeiIjCALLssini6Lo9/tqJd3xXq9HeSbOued5juPQn9WDEHEcO47j+341oG0eDx9OgVuWtbeGc+77Pi17nveCk4LzFFJVFaoMB0jTtN1uU9eJc340VDlnIZ0mzyKlXK1Weyu73W791sdxTE9bZVm2WCzU79ayrCiKfN9/eHigLfM8d103yzLHcdI0dRxHCBGG4XK5pG6OYRjUTJFi1KHm87mqD6rd3W5HGe9Wq0XqOXw5cRzTs2ekjNdE3Y7jDIdDKSVG6C5dSCrXI4RYLpez2exooodKQr4QhuHe0S5LSKdxFiHEeDyurimKIk1TsuGHhwe6HfQQJ1VhlmWmaarbRH1LwzDa7XZRFLqut1otx3FIEFmW+b5PDcV8Pp/P53RSWtA0rXqovcakaiUUthx1FhV+U1NTbTpe1rQWRVFvkcBlCUn79Opzu93ebDbT6dSyrAPmQiZFTZrneb7vZ1n2YhmcXEincRbTNKs5p73QznVdahya3BSqfl3XLcuyLItaiTzP0zSlGFW9vtBut/dUWC2PUioJqDqyIIQ43Np4nqeK6vt+p9OxLAtDPLcsJNWxqorE9/0D2f0oirbb7f39fbWRu9wG5sN5yqV+Q3Vd32631TBYRbOcc3o5Stf13W6Xpik970cb+L5/NCBUjQPnnDFWFavjOFEUNe/g0LkOp+WLoqhKEH2f6xPSo8I4MNQopYzjeLFYqN2Louj1elEUHTjpOQvpXDK4nucdjQvKspxOp3RD4zimHofjOHmez+dzqhJqbSikNE2TMUb9ZykljQjWj9xut5URTKfTvb6PyoQVRWHb9qNlW61WeZ5TMYbDYavVosL4vl/PwzHGwjBUZ6RrUU+sUvOIrtClC0mlbIjpdBrHMR35USFxzil3W7XFbrdL+rlEIX04H0Go+/Wo7+q6Tp3e8XhsmuZkMlF3zXVd5daUqFf/StPU932SmmVZpCHDMKpOrxJ1WZZ1u909Z3Ech3NOcfJyuawXjDGWJAkNapIgVNMkpaw3U1Qk0zTX67Vt24yx0WikTpplGQ1GgMsVkvbp5QnVadJ1fTKZqLLVhVQURd2tKNVyqUI6t+dZPj9lWeq63uQ9zOfenCRJJpPJgaPVnwIwDOOzPQly3c+zQEifpwou9XmWz4BhGK7rqkHHAz3hF4z4PGsClCiKut0uukIQ0hUICc7y/2vicNqVcnvPOizlAhtmBKSUUsqjz0cBCOkihPQBalB92lNlBJTgHs0LAgjpEoWEmAUAAGcBAMBZAABwFgAAgLMAAOAsAAA4CwAAwFkAAHAWAACcBQAA4CwAADjLqaBZV6prsizDC4EAQnoTbvSNxOl0miRJfQpV0zQbfhoRAAgJzvIT6HsxhmHUJw3cbrc0DTLNZwMAhARnacpsNqPZ9uvzZtP8gJPJBD8bACG9hlvMs9CnJLIs25tbtCgKWo8PegAICTHLS9B1nSY33xNKfSUAEBJiFgAAnAUAAGcBAAA4CwAAzgIAgLMAAACcBQAAZwEAwFkAAOAcnSUMw73nozVNsyzrwEcksyy7u7urr1d7VRf2XkU9AOecvrPNOQ8/MZ1Omz9SKYQIw/CVj2BKKQ3DwHOcVyAkVaFhGDbcPQgCpb04jutXdBFCOgtnCYKgfvuiKNr7YG0T6ntFUUSvb0RRdPh7t0IIej+VlLFYLHa73W63Wy6XvV6v4bdygyCYzWb1V9QOs6daXdc557ZtH/72ODh/IRFpmk4mk+Fw2NAfy7Ik7SVJ0ul0qoe6FCFdRm+IAoF6LCClnE6n0+n0qK8LIebz+Xq9Looiz/PqjRZC0O5BEPi+r+t6tdUKgoBzPplM4jhu0kTM53POeRzHTeoyz/N6OekaLcvqdrvPdShwhkLSNG06nXLON5tNw7DF8zzSXpqmrusenUfqDIV0vs7i+z7d0DRNTdMkC7csq+rfjuNsNhuKKahS1V7V4xRFIYQoy7Isy6IoZrOZ7/tqA9u2syyTUsZx7DjOU3pqtVpHy5ymabvdtiyLMdZkVrFqwKyiaFU2z/Oa2Bk4cyEVRVGWpeM4nue9YK45IUTVpC5FSJ/vXWcp5Wq12lvZ7XaP3jUpZZqm6t5FUaSqLQgCWk9zZBwwZsuyDMOwLMvzPMMwBoOBqvXNZuN5XpZlrVar+tp7nudhGKptmmgiiiKqTs/zwjCsyu4FOI4zHA6llEdv0U1xcUJSJ/J9v9PpRFF0tKhxHFMYQm3VKyOOkwjp8zmLEGI8HlfXFEVRrekDkeF8Pqcf+V7Up/Z9VnbNsqxWq5WmqeM4nHOqdSHE3mwa1LiRaqmDc3i6DWrQ6Gie59HcP0ev7gCkg6IoXnOQq+zRXJCQKIRZLpeaphmGQVo62uQo7VHw22SXcxPS53MWmibncAj3KLZtU2tgmmZZlq9Jle9FyI7jzOfzJElIEHXdqESd7/uGYTDGnuouUdO03W7v7++rESlM4caFRKFur9er5lyO2gRNVadO0el0aG7dC6qmC8jgZllGvQzLsvbCOZU/e26kR1KoBq40JfIB17+/vz8wekdNkxpOohGlJnnceioRfZ9rEtJ0Op1MJkoVm81GCNE8LFIRx8UJ6ZTOQj1VWl6tVnmF6matVovuWhzHRVGs12v1r4eHB2olDiRfHxWQYRj9fn84HKrWoz7sv16vVXkGgwE1d3u5sWrTRLnbatNKoe+j6UCCMRaGoSpVURTVC1G5fZjChQqJJrKsjl7ruq7Geg70cdRVzOfz4XDYarVIBhckpA+nFYS6L0mSUDCpqsQ0TZIL55xG4DzPS9OUUhie5/X7fcYYbeO6Lh1N7VVdIPP2fd/3fSkl1Y3neYPBQN190zTb7Tb1mbVPEw6q/jxF4Eq+9eClKIr6Mw6UaiEhPhp7p2nq+75pmuv12rZtxthoNFK3Jcuyfr8P47hcIZGE9mIHGlF+Skj1qzBNU4nnkoS0q8AYY4ztboPxeOy67t4ay7KO7liW5d6OR0mSpBoS12GMVXtShGEY9ZVvyDtVN30H411LDiGdj5Cequ5bfG9ICPHw8FB/ktL3/SbPMtETli9uVxsSRVG320VXCEK6UCHdqLNQl1v1blQfmHN+9CWLF2TpHcc5nE6rZgoo6FXBNoCQLlFIdzRsri6VemUQzS3wTtWdZZlt24vFAgHXLfBUdWMWBQAAekMAADgLAADOAgAAcBYAAJwFAABnAQAAOAsAAM4CAICzAAAAnAUAAGcBAMBZrgfO+d7LeFmW4fViACG9CR9u87Kn02mSJPWJmmkS09FohB8MgJDgLM+j1+vRnBq2be/9a7vd0nczaaYsACAkOEtT1q+7GgAABg9JREFUZrMZfXWh/oEomrl2MpngZwMgpNdwi3kWmi6b5lWvri+KgtZf1oddAISEmOVc0HW9PpkgzdePHwyAkBCzAADgLAAAOAsAAMBZAABwFgAAnAUAAOAsAAA4CwAAzgIAAIf5fM/gcs4NwzjJt37v7u6af2Y4CAIhBOecc75er2mlruuMsYYPawsh4jju9/uvebhbSmmaZpqmeNXg0oVUVQVjrMnuQRDc3d3RsmEYjLG9j9Kfv5C++JyCONW36BeLBd3WIAgOl4Fm1qAXzDjni8Vit9vtdrvlctnr9dI0bSip2WxWf0vtMJZlVcum6zrn3LIsKSXc5KKFpIo9m83CMGxyojAMy7Ik7SVJ0ul0GmrvfIR0gveGpJRCCMMw4jjWdb3f72uappZ1XZdSrlYrxlgcx1LKfr9PG6tlTdPyPO92u7quU2tAxkwLtLGmaWpjsv+iKObz+f39va7r2+1W7U7/0nXdMIwwDIMgUOstywqCQNVQFEWO4xy9uvl8niSJbdtRFKlDHZDgXiOmLoem+YiiSJUBXKiQqGCcc8dxqMxHr47eolbLtO8FCekEeZaiKIbDoWVZm81mMpkMBgPHcTabTZIkg8GANrAsy3GcsiwXi0Wv1/N9f7lc0jJZr2VZ6qUvzrnv+7SgjkwbK4MoiqIois1ms1wui6IYj8fV9sS27aIohBBZlh2ov6M2oWlamqbtdtuyLMZYk4nF6lN7qMshSZG4wUULKU3T3W5HhXluMEsecVR75yakD6fSRFmW1Fu2bXu5XFJD0el0qp7tOI6U8v7+3jRNz/Oo0SC5HD0ybVw1cjJ+1RRQq0K13mq1HMfhnFfbH2rQKHwlMTVxiiiKqDo9zwvDUFXty3AcZzgcSimbmNptmstFCIm2p30Hg0ETc4njOM9z1Va9wI9OK6TTjA212+1qQEh9V1qTZRldPFk+LauNGWOHj9ztdhuGmpvNhhqrNE2p1ustw+4T3W5XCDGdTo8KXQhBJadTvDIjQOXBK/kXLSQhxHw+p39ZltVqtZo0UUp7jLHXT6z7+YV0mpjlQJ3puv6aJHZzS/Y8L4oizvl8Pl8ul08lw1TX1Pf9+/v7fr9/oKGLomi73d7f31cbq5OMYtwIFyEkMoVqGBXHMRlNwzyL7/udTofSJZdSNWf3PMsL7t3Lkt6+78/n8zRNGw7pkdQOnEtKGcexGk6iESXKFx6NdPaOg77PNQlpOp3OZjOlirIs69PQvVJ7Zyik0zjLdrt95RH6/f58Pqegt/mAXPXuG4bR7XYfHh5Ups2yLPUAC7Fer/NPDAaDVqtFzYjv+/UECueccrdVcXe7XWqyfN9/NKBljIVhqERTFEUcx6pIVFpEPZcrJM75brerRiiGYfT7fcqbPCokYrVakfDm8/lwOKxq7yKE9PmcxTRNcnR66kyZcbXHq5b3VirrNU2TloMgWCwWNFbPOVcd7GpLpXZUCxS4qmqmTrL6k8YClGJM0yzLcvyJdrtNY4qq81yXWn1Uz/d9OiANkdZvC6X9TNPM89y2bd/3R6ORKlKWZTSYCi5USEKIuio8z1NieFQVjLEkSUh4k8mk3W6rzS5GSLsKjDHG2O5mcF13NBpV14zHY9d1j+64WCzG4/GzzpUkyWQyObABY6zakyLa7XZ95VvxTtVN38F4v2JDSGclpKeq+0Zn2KZYMU3TPfv3fd8wjKIojvbSj2bgXr9LFEX0mBPiFAjp4oT0xc0KotVqVXs3KqjOsuzo4JxlWc99j8NxnMPpNM/zqseUUkop8RFPCOlChXS32+2q10ldMijmFnin6s6yzLbt5m/ugYvmqerGLAoAAPSGAAAX5yw0ZIXX9m8BKWWe5+/xTCcd81nPhoDLhSr6ESFVB4rKsqSNNpvNDlwvm82GpKAmAXnzUVhN06oPnoKrZDabaZr26Pj6TzK42qf3xzU893ntWbdWq1V91uvNAyLLslarlWEYL54MDZw5QgghBGMsTdP6cNW+s9AOURTh/dorxjRNeuDiXc/COU/TFJ3ra0XXdcdxnmqcHnEWAAB4JRgbAgDAWQAAcBYAwG3y/wCUZRH/aQFpSAAAAABJRU5ErkJggg==
[[American schools suck|2017.02.19 -- The American Education System]]. I would know. I've been a student and teacher in them for a very long time (and recently enough at that). I was homeschooled for the wrong reasons and by the wrong teachers. It was too late for me. I have hope for my children though (well, as much hope as one can have these days). 

Status crystallization is setting in, upward mobility is disappearing, and proletariat education continues to spiral downwards. This is the best chance I can offer my children. Unfortunately, I have to work while they learn. I can't tutor them like I'd prefer. I can only do my best at this point, and I've got to teach them to work hard, to focus, and to see the value in studying and understanding the world and themselves as much as possible while they still have the opportunity to do so.

Their brains are still very plastic; their minds are malleable and evolving. They have low-effort, significant transformations available to them before their frontal lobes are fully developed. I'm going to help them maximize their utility and to be eudaimonic lifehackers. I must give them a //Liberal// education in the oldest sense of the term: Liber, a.k.a. books, reading, freedom, literacy, etc. I hope they will escape my hell and have the tools to empathize with themselves. I'm here to give them wings before I die.

* [[Current Gameplan for Homeschooling 1uxb0x]]
* [[Planning Future Gameplan for Homeschooling 1uxb0x]]
* [[Getting On Track]]
* [[/b/ of Homeschooling of j3d1h]]
* [[Current Gameplan for Homeschooling j3d1h]]
* [[Planning Future Gameplan for Homeschooling j3d1h]]
I'll document weekly progress here for now. 

* [[2017.02.25 -- Homeschooling Log]]
* [[2017.03.04 -- Homeschooling Log]]
* [[2017.03.11 -- Homeschooling Log]]
* [[2017.03.18 -- Homeschooling Log]]
* [[2017.04.02 -- Homeschooling Log]]
```
@@display:block;text-align:center;

foobartexthere

@@
```

```
using pure HTML:
   <div style="text-align:center;">[img[...]]</div>
```
```
using wikitext inline CSS:
   @@display:block;text-align:center;[img[...]]@@
```
```
using a CSS rule in a tiddler tagged with $:/tags/Stylesheet:
   .center { display:block; text-align:center; }
and then write:
   @@.center [img[...]]@@
```

Note that "display:block" is required for centering to work, otherwise the left/right extents of the containing element fit the content (i.e., match the image dimensions) and there will be no extra whitespace to center the image within.
Everybody thinks they are (epistemically) right. If they think there are limits to their knowledge, they think they are right about that limit (and the various implications of that limit). People trust themselves too much. It is easy to see how the beliefs and arguments of others are flawed, but we cannot see where we fail. 

Most people think they are the heroes in the stories of their own lives. Most people believe they've overcome real adversity, that they are the victims, that they generally behave according to what they (subjectively) see as what is morally right. Nobody thinks they could possibly be evil. People believe they are as they ought to be, but they are quick to see how others are not as they ought to be. People do not reflect over their own lives very much.

People are hypocrites. We are arrogant; we think we are better than we really are.
```
#!/bin/bash

# Before you run this script, you need your drives mounted first, obviously.

# Install samba
sudo apt-get update
sudo apt-get install samba -y

# You know the password
sudo smbpasswd -a h0p3

# Add the share to samba's config file
sudo cat <<EOT >> /etc/samba/smb.conf
[HTPC-Share]
path = /mnt
valid users = h0p3
read only = no
EOT

# Start the service
sudo service smbd restart
```

```
#!/bin/bash

login="user"
pass="pass"
host="host:port"
remote_dir="/foo/bar"
local_dir="/stuff/things"

trap "rm -f /tmp/seedboxsync.lock" SIGINT SIGTERM
if [ -e /tmp/seedboxsync.lock ]
then
  echo "seedboxsync is running already."
  exit 1
else
  touch /tmp/seedboxsync.lock
  lftp -u $login,$pass $host << EOF
  #set ssl:verify-certificate false 
  set mirror:use-pget-n 5
  mirror -c -P5 --log=seedboxsync.log $remote_dir $local_dir
  quit
EOF
  rm -f /tmp/seedboxsync.lock
  trap - SIGINT SIGTERM
  exit 0
fi


```
I expand on this term borrowed from Christine Korsgaard. She may be deeply right.

It is not easy to see how our agency exists. The coherentists and constructivists who define agency in terms of constitution, psychic unity, and self-integration seem completely unable to call morally wrong things, people, choices, actions, maxims actually morally wrong. There is only good action. My truism that we all [[do the best we can with what we have]], in conjunction with this neo-Kantian, neo-Aristotelian view of agency, results in the fact that we only do good. Insofar as we are good, do right, we are agents. Otherwise, we are not.

Do I need to be able to hold someone morally responsible for doing evil? It seems necessary to have the yang to the yin in this moral equation. Perhaps not. Maybe noone is blameworthy. If so, do I even really care about freedom? I don't think so. All I care about is being constituted in a way that makes me happy. Presumably, being "morally virtuous" (even if morality doesn't obtain) is something that would constitute me and make me happy in many ways.

<<<
[[RPIN]]: Ah, friend. It is obvious that moral people are not happy people. Don't you see? You can either be moral, or you can be happy in this life. You are, essentially, Hursthousianly marred at the very least. It seems perfectly obvious that bad people are some of the most integrated as well. What say you now to your psychic unity? You yourself, [[KIN]], know it. See your previous work in [[Summa Theologica]].
<<<

<<<
[[KIN]]: To be clear, we are deep into constructivist territory here. We've already begged the question that our view doesn't spiral into moral relativism. We create our own value. It's standard looking existentialism. Once you beg that first question, are we really going to be unwilling to beg a lesser question such as the non-existence of rationally justified, objectively true blame? You've already thrown out the baby, does the bathwater really matter?
<<<

It's the way human societies have already organized, in levels of slavery to each other. It is the hierarchy of power and wealth. 
So I've learned the awful truth about who we really are as humans. It's time to move on. To accept this red pill and figure out what I need to do. It is the only practical option. Accepting and dealing with the red pill experience is my plight.

[[The Red Pill]]

[[How We See Ourselves]]

[[Libertarian Taxation Non-Hypocrisy]]

[[The Good]]

[[The Problem of Doxastic Voluntarism and Christian Salvation]]

[[The Problem of Undeserved Grace from God]]

[[Voting]]

[[Empathy]]

[[Love vs. Like]]

[[Pragmatism]]

It is very clear to me that comedians are philosophers of a sort. They tend to be damaged, intelligent, psychopathic, economical, and intuitive. I think of them as articulate and more well-intentioned magicians. They see the cracks in society and in ourselves. They laugh about what we fear and don't understand. It's a strong fight-or-flight mechanism, an oscillation.

Collections:

* [[Anti-Humor Collection]]
* [[Back-Handed Compliment Collection]]
* [[Dark Humor Collection]]
* [[Latvian Potato Humor Collection]]
* [[Limericks Collection]] 
* [[Masturbation Euphemism Collection]]
* [[Philosophy Humor Collection]]
* [[Pun (is it really humor?) Collection|Pun Collection]]
* [[Self-Deprecating Humor Collection]]


It is an obvious fact that Virtue Theory offers no obvious content-giving to decision procedures (they are even proud of the fact they don't have a rational ([[Frontal lobe rationality]]). Virtue Theory is the moral theory of the Fastmind. It pieces enough confabulations together that its Teleology can appear justified. Who is in control fundamentally? The Fastmind or the Slowmind? The Fastmind is clearly capable of being a warzone of rising intuitions and splinters in us. 

Kant's Groundwork is a masterpiece of masterpieces. Kant, imho, was the smartest person to have ever lived. His type: a scholar's scholar's scholar. He was the Archimedes, the Shakespeare, the most praiseworthy of all philosophers. I am proud to have even understood what I understand of his work. Kant was deeply virtuous man, and a man I could only aspire to be like. Kant was my hero. And, yet, even masterpieces of masterpieces can have mistakes in them. 

Kantians have never given fundamentally good explanations of how to implement Utilitarian thought (which is obviously true, to some degree, in any plausible moral system I've found). Kant seems to deny it outright, but it is obviously not effective at explaining key ways in which we employ the CI today. But, even if we weren't to deny it, Kantians still can't explain how Utility fits into the CI to a reasonable enough extent. It is a critical flaw, as far as I'm concerned. The problem is that utilitarian equations only seem to matter too far towards the end of the decision procedure found in the [[CI]]. Utility is clearly very deeply embedded in the CI decision procedure; integrated beyond what many people want to realize. Kantian's are very emotional people (fucking brilliantly intelligent and literal in so many ways too). 

They are the human gods. They obviously aren't supernatural in the metaphysical sense, but they border on being supernatural in terms of the unbelievable amount of power they wield (it is breathtaking and fucked up). 
The 90's were a special time. My first website was an Angelfire ad-based freebie. I didn't know anyone else who had their own website back then, and it was a fun thing for an asocial teenager to do.<<ref "1">>  My "coding" experience was limited to TI-83 Basic and QBasic.<<ref "2">> HTML and Javascript were totally new to me, and I had a blast. I'm sad to say that I can't find any of my work from back then. I stopped having a website in college, but after college I started publicly writing and programming again. Hypercynic was my second website.

I was a budding, naive, idealistic young adult in the 00's (and most of the 10's if we are being honest). While I was taking my first ass-raping redpill, getting my dreams and soul crushed by a reality I was obviously unprepared for, I spent time writing on a more professional personal website. It was a lot of fun, and it kept me sane. In a way, it was a predecessor to this wiki, and I wish to honor it by preserving its memory here. I found a copy of an encoded text file version of the site I made before taking it down, and I was wise enough to have backed it up with the original "G-Mail Drive" program (an unauthorized version of Google Drive which came out years before Google decided to officially compete in that space; it was the first "Dropbox"-like cloud for digital hoarders I'd ever used). I want to warn you that the formatting is particularly atrocious even after plenty of ctrl+h replacements (because I'm still too lazy to code it) to make it legible and sanitized.

It makes me laugh and cry that I thought I was hypercynical before. I didn't like the world, the people in it, myself, but I didn't know why. It's been a long decade trying to figure that out (and, perhaps, that suffering and searching will only continue). Obviously, I'm a radically different person than I was a decade ago in many ways.<<ref "3">> I accept the cringe with the nostalgia. It's the nature of the self-reflective beast. My blog<<ref "4">> was at least as odd and awkward as this wiki-journal-blog is, if not more so. I look on it fondly though. I see where I came from. Interpreting my Hypercynic work these many years later has helped me better piece together my narrative and make more sense of my world.

* [[Hypercynic: Personal]]
* [[Hypercynic: Cynic's Concerns]]
* [[Hypercynic: World of Warcraft]]
* [[Hypercynic: Magic the Gathering]]


--------------------

<<footnotes "1" "Back when I was first getting into hacking, curious tween to young teenager that I was, I decided I wanted to protect my site and create my own authorized private sections. I made some other neat little hacks that Angelfire obviously did not anticipate (hacking was really easy back then), but somehow a toy security mechanism for punishing those who failed to enter the correct password after 3 guesses was what made me laugh the most. It would just fucking rapidfire spam you with pop-up windows. Mind you, browsers were incredibly simple and unextendable back then. No one could stop it, and many browsers didn't let you choose to block pop-ups back then (not that anyone would have thought to do anything about it). It was very easy to crash a computer by flooding it with pop-ups (which you couldn't even click off). I set it to '50' pop-up windows, which crashed every single computer I had ever seen....50 pop-ups, rofl. I could likely throw 500 on my primary machine and survive just fine. Come to think of it, that website had many keywords for which it was the top result in Altavista (the original Google in terms of search engine excellence). Imagine that: I literally was the top result for multiple searches back then without any SEO! ">>
<<footnotes "2" "I had no one to teach or encourage me to pursue it. I wish I did.">>
<<footnotes "3" "Of course, I still have tons in common with who I was. I'm still just as foolish and ignorant in critical ways. I keep growing though.">>
<<footnotes "4" "Names will be redacted. I am obviously quite doxxable to anyone who is persistent (and odds are, if you are reading this [and I'm pretty sure no one does], you already know who I am). I can think of a dozen ways to unmask me. That's okay. Remember that anonymity and privacy come in degrees. I'm just trying not to be low-hanging fruit at this point.">>
This section was devoted to philosophy, political analysis, and my faith.

* [[2006.12.21 -- Freedom]]
* [[2006.12.21 -- God's Design: Comparative Advantage]]
* [[2006.12.21 -- The Form of Gaming]]
* [[2006.12.28 -- Letter to Alvin Plantinga]]
* [[2007.01.04 -- Meta-Ethics]]
* [[2007.01.30 -- Intelligence and wisdom are not separate ideas]]
* [[2007.03.15 -- Value, Arrogance, and Egoism]]
* [[2007.03.23 -- Brief Rant on Economics]]
* [[2007.03.26 -- Summa Theo-a What?]]
* [[2007.03.29 -- Standing by Your Principles]]
* [[2007.04.20 -- Show Me Your Umlauts! (and, I'll show you mine!)]]
* [[2007.04.24 -- Maturity in Faith--The Recognition of a Conflict and a Choice]]
* [[2007.04.27 -- On Communication]]
* [[2007.04.27 -- My Readingz (EL-2-Spell) (For my favorite mom who may be confused: L2Spell=Learn to spell)]]
* [[2007.05.11 -- Instinct, Neo-rationalism, Summa Theologica]]
* [[2007.05.16 -- Democracy]]
* [[2007.05.21 -- Right to Opinion]]
* [[2007.05.23 -- Rough Draft--Summa Intro Chapter]]
* [[2007.06.02 -- New Forum]]
* [[2007.06.08 -- Infinity]]
* [[2007.06.25 -- +Dimensional God]]
* [[2007.07.06 -- Godbotdom — Unique Idiots Beware?]]
* [[2007.10.26 -- Relevance]]
* [[2007.11.01 -- Community]]
* [[2007.12.22 -- Form Spectrum]]
I started playing MTG a bit in college (although, I remember when Alpha came out), and then afterwards I played with the security guard at Humana. Good times. I learned to love Eternal formats in magic, and this is where I got to see my systems-talents at work yet again. I was never the best at MTG (there was a time where I did rank among the best in WoW), but I was good enough to win a decent amount of money playing it. I continued to play, especially thinking and learning about it in Thailand, until my ~PhD. I have very fond memories of magic.

* [[2007.07.07 -- Legacy MUC]]
* [[2007.08.15 -- Affinity -- Legacy]]
* [[2007.12.22 -- Red Stax]]
* [[2007.12.22 -- Brainstorm]]
This section was devoted to more personal aspects of my narrative. It bleeds together with [[Hypercynic: Cynic's Concerns]] and to a lesser extent the other sections as well. 

* [[2006.??.?? -- Letter to Mrs. Phelps]]
* [[2006.12.21 -- Welcome to Hyper Cynic...]]
* [[2006.12.21 -- k0sh3k is not feeling well...]]
* [[2006.12.25 -- Poem]]
* [[2006.12.27 -- The Christmas Summary]]
* [[2006.12.28 -- Connection to Thailand]]
* [[2006.01.03 -- GG. (Good Game)]]
* [[2007.01.05 -- End'o' The Week (I <3 Weekends)]]
* [[2007.01.30 -- Burned Out!!]]
* [[2007.01.30 -- Flurry Of Posts!]]
* [[2007.02.12 -- When it rains...it pours.]]
* [[2007.02.22 -- Feb 22nd...(original title--True story)]]
* [[2007.03.15 -- Life Update.]]
* [[2007.03.23 -- Personal Update]]
* [[2007.04.09 -- Life Update]]
* [[2007.04.13 -- A Night I Will Remember]]
* [[2007.05.04 -- Lifedate 2.11.4.623925.65.....nm the Lifetrek]]
* [[2007.05.07 -- Hella' Good Weekend (Many boomshakalakas to you and yours as well!)]]
* [[2007.05.23 -- Vacation....err....V-O-cation as a calling]]
* [[2007.05.23 -- Ramblings]]
* [[2007.06.25 -- Life Update a la 'teh list+']]
* [[2007.07.05 -- Family-Guy-Esque Life Update]]
* [[2007.09.15 -- Life Update]]
* [[2007.10.18 -- Life Update]]
* [[2007.10.24 -- Monday ER Visit]]
* [[2008.05.13 -- INTJ]]
I really was amazing at World of Warcraft. I understood it incredibly well. I was wealthy. I was an amazing ~PvPer. I didn't really participate in the social aspects of the game, but I played it well. 

* [[2006.12.26 -- To DoT or not to DoT]]
* [[2007.01.11 -- Back to Basics]]
* [[2007.01.16 -- Burning Crusade is Here!]]
* [[2007.01.30 -- My experience in TBC so far]]
* [[2007.02.12 -- The Rogue Update]]
* [[2007.02.22 -- Rogue Update 1.1]]
* [[2007.03.09 -- Rogue PVP Guide]]
* [[2007.03.23 -- WoW Update]]
* [[2007.03.27 -- WoW Update]]
* [[2007.12.22 -- Resilience]]
What the fuck does that mean?

I do think there is a lack of empathy for my position. Rightfully so. I'm autistic (I have a different kind of social programming altogether) and I'm intelligent. That is going to make my brain different (that isn't a value judgment; I mean it in the sense of "deviance from the norm" any value attached), and it is going to make my mind seem really off to other people. I can't expect them to understand (although, by that same token, I'm not convinced they should always expect me to understand them either). 
I have no faith in authority. I've learned not to trust it. Your hierarchy is dumb as fuck. Tradition has no meaning outside of what general history teaches us about the cycles and tropes of humanity. I'm not an institutionalist; I'm an insurrectionist.
//Dedicated to 1uxb0x for a sequence of questions only a child could sustain.//
I like being in the place, in the state of mind, where I don't have to inspect my intelligence with any pride. I am a box (an organic, not very clean, geometrically tuned creature with many...). I see it as a machinery to get things done. How can I harness that engine to rebuild itself while grinding through the world of thought? I'm just a finite creature living in a set of specifications. What are my requirements? 
* The best generalizations are sweeping generalizations I always say.
//My daughter. She is Alia of Dune.//

The world is her oyster. She has the tools. She has the potential. She works hard. If she keeps it up, if she plans carefully, she could be quite happy. I'm here to help her do exactly that.

* [[Our Daughter: The Designer of Happiness]]
My spouse. The rock of my ages.

* [[k0sh3k's autism]]
* [[Gifts]]
asdf
It is my opinion that Kant was the smartest person to have ever lived: he is the best student of wisdom to have ever lived. Even the titans Plato and Aristotle did not philosophically accomplish the proportion that Kant did. He is the giant leap forward for mankind. I can offer no greater praise. 

His type: a scholar's scholar's scholar. I think it would not be doing justice to this man to call him the Archimedes, the Shakespeare, the Newton and Einstein, and the Copernicus of philosophy. Okay, I keep trying to offer better praise than being a better philosopher than Plato and Aristotle. Full stop.

Kant is the most praiseworthy of all philosophers. I am proud to have even understood what I understand of his work. Kant was a deeply virtuous man, and a man I could only aspire to be like. Kant was my hero. Hell, Kant still is my hero, even if he's wrong about a few things.

I need to complete the Kantian project for myself. I have to do what is against cannon: hybridizing Kantianism and Utilitarianism. We always seem to fail. 

[[Why I Write this Wiki-Journal in Public]]

[[Rationality]]

[[Nietzsche]]

When I do my reasoning in public, when I explicitly have to state it, when I can imagine how the world views it (and armoring it against their criticisms, and changing when it is obvious that I can't overcome those criticisms), I am being empathic. I care about how others see it in a deep and real way. It is a filter through the infinitude of maxims (some that pass the CI test and some that don't). 

I have to ask myself, what should I be ridiculed for? What would the body of rational people (with different points of view and reality maps) say about this? In a sense, I care about what they say. Ah, but then I realize that not all people are rational, and that many people that are rational can still be wrong about whatever I disagree with them about. I'm extremely intelligent, and I know that disagreeing with otherwise rational people is often the rational thing for me to do. 
//KIN the Empathic Idealist//

The [[Idealist|Idealism]] character animated in this wiki. It represents my [[Kantian Intuition Network]]. KIN is the opponent of the ever practical [[RPIN]] in hypothetical dialogues injected into this wiki.
//See: [[Virtue is Knowledge]]//

A goal of this wiki. I take this cliche-truism to mean a lot of things:

* Be honest with yourself.
* Empathize with yourself
* Know who you are, why you are here, where you come from, where you are, what you are doing, etc.

In a way, I think Know Thyself is a means to Being Happy. That's what this is really about. Know Thyself in order to be happy. Categorically, I want to be happy, and thus, as part of the constitutive nature of the categorical imperative, I exercise instrumental reason, I take the means to my ends, and thus I am required to know myself. 

I can be wrong about what I take to be categorically true. Perhaps being so certain of one thing will simply lead to being certain of other things (sometimes opposing things), and then we must rebalance ourselves. We must cull the weak beliefs, retrain our desires, and bind ourselves together. Knowing Thyself is for the sake of my personal maxim: [[Program Yourself]].


<<<
[[KIN]]: This section sucks, RPIN.
<<<

You were only forgiven for your sins toward me to the extent that you were right about your religion (your reasons for those sins). Your acts were psychopathic (which we are all guilty of). You lacked empathy for yourselves, and you lacked empathy for your children. Even [[KIN]] agrees. You have angered your children, and you have made your bed.

<<<
[[KIN]]: I must still be empathic
<<<

Fine. You will be forgiven for your sins against me when I'm both sufficiently unified and find my life worth living in a cohesive and meaningful way.





Why I want to forgive you (I could just be lying to myself):

*I think raising an autistic genius is very difficult to do. There was very little information available to you, and you were busy with your vocation. You fucked up, badly. You did the best you could with what you had and what you assumed to be true (are you responsible for what you believe? that decides it). 

**Perhaps you aren't free. That makes it easier for me to forgive you, and to quickly forgive myself. We aren't responsible for our actions. Is that what we really want? If I let go of that, then I really really feel like I'm drowning. I need to overcome my allergy to relativism. That doesn't mean I plunge into full blown relativism, but at least I make myself vulnerable to the possibility of less black and white perspectives. It means I'm willing to doubt things I was certain about before. I have to try.





Boy: “But, mother, I no like grandma.”

Mother: “I know; is no potato. Eat anyway.”

---------------------------------------------

Latvian walk into bar with poodle under one arm and salami under other.

Eat salami first.

---------------------------------------------

Walks a horse into a Latvian bar.

Man says, ”There you are, dear wife!”

---------------------------------------------

Why Latvian man wear hat?

For to hide bread from family!

---------------------------------------------

What potato say to other potato?

Faulty premise, nobody have 2 potato.

---------------------------------------------

Hush little baby, don’t say a word-o.

Mama is buy you job in Politburo.

And if bribe of Mama don’t fly,

You is toil for fifty years then die.

And if you hungry and full of strife,

Hush little baby, such is life!

---------------------------------------------

Latvian man go to visit Estonian man and have stew. Latvian man say, “This very best stew! What is?”

Estonian man say, “This is Latvian potato stew.”

Latvian man is confuse because he never have this stew in Latvia.

Then Estonian man laugh and say, “This is trap! Is stew made from Latvian and from potato!” Then he shove Latvian man in pot, begin to make stew of him.

Latvian man say, “Thank you very much!”

Estonian man confuse, and ask why he so happy.

Latvian man say, “I am warm, and also in stew is potato! Truly, is no better way to be!”

---------------------------------------------

Latvian, Estonian, and Russian man all talking. Russian man say, “I give you joke: why does chicken cross road?”

Estonian man say, “I am confuse. What is chicken? Is kind of soldier?”

Russian man say, “No, is kind of bird. Sometimes we eat.”

Estonian man say, “You have bird to eat? Then why can bird cross road? Surely someone eat bird before it can cross road.”

Russian man say, “Okay, I try again. Why does wolf cross road?”

Latvian man say, “I am still confuse. What is road?”

---------------------------------------------

Politburo commissar comes to farm. Asks humble Latvian farmer how grows potatoes.

“Oh Comrade Commissar, bountiful is Latvia harvest. Pile of all Latvia potatoes will reach foot of God,” says humble Latvian farmer of potato.

“But Comrade Farmer,” says commissar, “In Soviet Union is no God.”

“No worry. In Latvia is no potato either”.

---------------------------------------------

Latvia woman is say, “I hope my son not die during night.”

Latvia man say, “What is hope?”

She reply, “In truth, I not know.”

---------------------------------------------

Latvia man in field is search potato. See one and happy.

Turn out actually is rock. Is very starving so eat anyway.

---------------------------------------------

Latvian man not see old neighbor for many days. He go into house to see how is.

Neighbor frozen to death. Man very happy. Family eat well for many weeks.

---------------------------------------------

Latvian girl is say, “I want go America one day.”

Father say, “I send you America.”

Daughter is thank father. Make tears of happy. Father use for salty potato.

Father think moment, say, “Daughter, I no send you America.”

Potato is more salt.

---------------------------------------------

Handy Latvian man see farmer and say, “Your wheelbarrow sound squeaky. I fix for half potato.”

Farmer angry because as he say, “This not wheelbarrow, this is wife!”

---------------------------------------------

One day, hear knock on door.

Man ask, “Who is?”

“Is potato man. I come give free potato.”

Man is very excite and opens door.

Is not potato man; is secret police.

---------------------------------------------

Two Latvian man is walk along road.

First Latvian turn to second Latvian, “I hungry.”

Second Latvia say to first, “I cold. I trade you my potato for your coat.”

First Latvian very sad, “I have no coat. I cannot trade you potato.”

Second Latvian, “Is ok. I not have potato either." 

---------------------------------------------

Is dead dog in road. Is dead Latvian in road.

What difference?

Dog have fur keep warm. Also, freedom. And, dog eat poop for pleasure, not just survive. 

---------------------------------------------

Latvia man is sent to gulag.

Comrade ask, “How long are you to be here?”

Man say, “10 year.”

Comrade ask, “What are you do to be sent here?”

Man say, “I do nothing!”

Comrade say, “Now I am know you are lying!”

How do comrade know man is lying.

Because all Latvian know, sentence for do nothing is 20 year!

---------------------------------------------

How many Latvian take to changing lightbulb?

Four.

One smuggle lightbulb across border with Estonia. One bribe border guards. One bribe Politburo not search yurt. And, one change bulb.

But then realize is no electricity in Latvia. Only cold and dark.

---------------------------------------------

In smallest village Latvia, lives man. Is good, nice man. Very successful. Have wife, have son, have house. No have potato. Is Latvia.

Man is walk in woods. Suddenly, appears God.

Says God, “GOOD MAN. I GRANT WISH.”

Latvia man is wise. Says “I know is not God. Is hallucinate from malnourish.”

But says God, “NO. IS NOT MALNOURISH. IS GOD. I GRANT WISH.”

Of course, man wish for potato.

Says God, “SO HUMBLE WISH? I GRANT TWO POTATO.”

Man very happy. Take two potato, run home. Tell wife. Tell son. They happy. Man cry. Wife cry. Son cry, but from malnourish.

Suddenly, Politburo see two potato. No Latvian has two potato. Is proof of capitalism spy.

Arrest man. Kill son. Rape wife. Bulldoze house.

Such is life in Latvia.

---------------------------------------------

Russian mafia man visit Latvia, say to Latvian man, “I flip coin, If you make win, I give potato; if I make win, you give potato.”

Man say, “What if have not potato for to give if lose?”

Russian say, “You pay with life!”

Happy day for Latvian man.

---------------------------------------------

Man open door. Sunshine outside. Birds is singing. Children play with wheel. They laugh. Wife yell from kitchen: “Potato ready!”

Politburo pull head out of water. There is no sun. No family. No potato. Only gulag.

Such is life.

---------------------------------------------

Latvia man die, but for him suffer not over. Man very wicked, and go to hell.

There devil make punish: he burn in lake of fire. Is warm. Latvia man finally happy.

So devil make lake hotter. But Latvia man now is warmer. Now is happier.

Devil get very frustrate. So devil make fire lake into ice lake–lake cold as million Latvia winter. But Latvia man now happiest of all!

“Devil!” he say, “Hell is freeze! Latvia is finally happy country!”

But is not true. Is only story.

Also, man not in hell, only Latvia.

---------------------------------------------

Russian barman say, “Here is shot of drink for each of you. If you can tells me what is this drink, you can has 5 minute alone in back room with Olga.”

All three mans is very excite about this!

First Romanian take drink. He smack lips and say, “Taste like…” But before finish, he fall over dead.

Next, Estonian man take drink. He make burp and say, “Taste like…” But he too fall down, now is dead.

Finally, Latvian man take drink and say, “Taste like… chemikal runoff from reactor.” Latvia man is drinking these chemikals since he was child.

Russian barman say, “Latvia man is winner! Olga is wait for you in back room.”

Latvia man go into back room. Is dark. Cold too. Is remind him of home in Latvia. He find light and turn on. He see Olga now. Olga is giant dog with rabies.

Olga kill Latvia man, eat him alive. Is slow and painful killing, but struggle for him is end now.

---------------------------------------------

Latvia comedian say, “What deal with potato?”

Latvia crowd not laugh. Comedian squint in darkness for see audience.

There no crowd. All die from malnourish.

---------------------------------------------

Three Latvian are brag about sons.

“My son is soldier. He have rape as many women as want,” say first Latvian.

“Zo?” second say, “My son is farmer. He have all potato he want!”

Third Latvian wait long time, then say, “My son is die at birth. For him, struggle is over.” “

“Wow! You are win us,” say others. But all are feel sad.

---------------------------------------------

Traditional Latvia Song:

Row, row, row boat,

Gently down stream.

Pain, anguish, rape, malnourish,

Potato only dream.

---------------------------------------------

Man is hungry.  He steal bread to feed family.

Get home, find all family have gone Siberia!

“More bread for me,” man think. But, bread have worm.

---------------------------------------------

Two Latvian look at clouds.

One see potato. Other see impossible dream.

Is same cloud.
''Copyright © 2016 m6ram''

THE AUTHOR DEDICATES THIS WORK TO THE PUBLIC DOMAIN. THE AUTHOR WAIVES ALL RIGHTS TO THIS WORK WORLDWIDE UNDER COPYRIGHT LAW.

''Disclaimer''

THIS IS A WORK OF FICTION. THE CONTENTS OF THIS WORK ARE PRODUCTS OF THE AUTHOR’S IMAGINATION. THIS WORK IS FOR ENTERTAINMENT PURPOSES ONLY. ALTHOUGH THE FORM OF THIS WORK IS THAT OF AN AUTOBIOGRAPHICAL WIKI, IT IS NOT ONE. ANY RESEMBLANCES IN THIS WORK TO ANY ACTUAL PERSONS, PLACES, THINGS, EVENTS, OR IDEAS IS ENTIRELY COINCIDENTAL. ALL EXPRESSIONS, THOUGHTS, IDEAS, CODE, TERMINOLOGY, STATEMENTS, INTENTIONS, ADVICE, AND OPINIONS IN THIS WORK ARE THOSE OF A FICTIONAL PERSON AND SHOULD NOT BE CONFUSED WITH THE AUTHOR'S. 

''Terms of Use''

BY USING THIS WORK OR THIS SITE, YOU ACCEPT AND AGREE TO THE FOLLOWING TERMS. YOU AGREE THESE TERMS OF USE, THIS LEGAL NOTICE, THIS WORK, AND THIS SITE ARE SUBJECT TO CHANGE AT ANY TIME WITHOUT NOTICE FOR ANY REASON WHATSOEVER. YOU AGREE IT IS YOUR RESPONSIBILITY TO REVIEW THESE CHANGES. YOU AGREE TO RELINQUISH ALL LEGAL CLAIMS TO ALL BITS OF DATA, INCLUDING BUT NOT LIMITED TO METADATA, PERSONAL INFORMATION, AND COMMUNICATIONS YOU TRANSMIT TO OR IN CONNECTION WITH THE AUTHOR, THIS WORK, THIS SITE, OR THIS SITE'S CONTACT ADDRESSES AND SERVICES, TO THE FULLEST EXTENT PERMITTED BY LAW. YOU AGREE THIS WORK AND THIS SITE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. YOU AGREE THAT IN NO EVENT SHALL THE AUTHOR BE HELD LIABLE FOR ANYTHING REGARDING OR IN CONNECTION WITH THIS WORK OR THIS SITE. YOU AGREE TO INDEMNIFY AND HOLD HARMLESS THE AUTHOR FROM AND AGAINST ALL LOSSES, DAMAGES, LIABILITIES, AND EXPENSES, INCLUDING ATTORNEY'S FEES, RESULTING FROM OR RELATING IN ANY WAY TO ANY AND ALL CLAIMS, DEMANDS, ACTIONS, OR PROCEEDINGS THAT ARISE OUT OF OR IN CONNECTION WITH THESE TERMS, THIS LEGAL NOTICE, THIS WORK, OR THIS SITE, INCLUDING BUT NOT LIMITED TO YOUR USE OR NON-USE OF, OR CONNECTION TO THIS WORK OR THIS SITE, TO THE FULLEST EXTENT PERMITTED BY LAW. 

''Transparency Canary''

SAVE A COPY OF THIS CANARY FOR FUTURE COMPARISON, AND PAY CLOSE ATTENTION TO EVERY WORD. THIS CANARY HAS HAD ZERO EDITS, ZERO ADDITIONS, AND ZERO DELETIONS SINCE IT WAS FIRST CREATED. AS OF THE LAST MODIFICATION OF THIS LEGAL NOTICE, THIS WORK, OR THIS SITE, THE AUTHOR HAS NEITHER RECEIVED NOR COMPLIED WITH ANY SECURITY LETTERS, COURT ORDERS, WARRANTS, CLASSIFICATION ORDERS, GAG ORDERS, OR ANY OTHER DIRECTLY COERCED LEGAL CENSORSHIP PROCESSES OR INTERVENTIONS PROHIBITING THE AUTHOR FROM SAYING IT WAS RECEIVED. THE AUTHOR HAS NEVER BEEN SUBJECT TO ANY LEGAL SEARCHES OR SEIZURES. THE AUTHOR HAS NEVER PLACED BACKDOORS OR SURVEILLANCE TOOLS IN THIS WORK OR THIS SITE'S HARDWARE OR SOFTWARE, AND THE AUTHOR HAS NOT RECEIVED ANY LEGAL REQUESTS TO DO SO. THE AUTHOR HAS NEVER DISCLOSED ANY USER COMMUNICATIONS TO ANY THIRD PARTY, AND THE AUTHOR HAS NOT RECEIVED ANY LEGAL REQUESTS TO DO SO. THE AUTHOR HAS RECEIVED ZERO DMCA TAKEDOWN NOTICES.
* [[To and From: My Immediate Family]]
* [[To and From: My Children]]
* [[To and From: My Wife]]
* [[To and From: My Family]]
* [[To and From: My Brothers]]
* [[To and From: My Parents]]
* [[To and From: My Friends]]
I’m struck by the ad hominem argument levied against (Nozickian) Libertarians and Randians (a.k.a. Egoists) that goes something like this:

People who are, by and large, against taxation, are being hypocritical when they choose to benefit from the infrastructure, safety, services, etc. paid for by taxes, and, in virtue of that hypocrisy, they are doing something morally wrong.

The idea is that Libertarians and Randians aren’t living by their own principles. So, if even if we were to assume their own ethical positions, they would fail to be moral through the inconsistency between their behavior and belief. Mind you, ad hominem arguments, despite what you may have been told in your logic classes, can actually be acceptable in ethics (when used correctly). I take seriously the above argument – we should not brush it aside. It seems reasonable to me that being hypocritical may be immoral, particularly about something as significant as this.

First, it seems obvious to me that if egoism/Randian objectivism, which is primarily and perhaps exclusively concerned with maximizing one’s personal utility, is true (and somehow survived the many powerful criticisms of it), that choosing to benefit yourself in any possible way is morally justified. Seriously. Anything goes; fuck everyone else. Ayn Rand wasn’t being hypocritical by taking government aid for health care; she was doing as any proper egoist would do: maximizing her personal utility. She might have been wrong to think her theory is actually the true moral law (let’s face it, she was), she might have been a terrible, immoral person when assessed from the true moral law (let’s face it, she was), but on this point, she was not a hypocrite. If she wasn’t a hypocrite, then it isn’t clear that from within her own moral framework (even if it is false), that she was being inconsistent or immoral.

As to Libertarians, the issue becomes much cloudier. Libertarianism is a deontic property theory which seeks to maintain (and rectify violations of) legitimate acquisition and transfer of property rights. It is surprisingly powerful and complete enough (in some sense) that it can serve as a framework for explaining human rights entirely in terms of property rights.

Libertarians come in many flavors. The most common flavor, at least in the major political arena, is the minimal statist view, which allows for a state to prevent theft. Minimal states may tax for the sake of preventing theft, but nothing else. Theft, in all flavors of Libertarianism, is a term which is broader, richer, and more robust than how we use the term in everyday life. So, this prevention is no small or insignificant task. Beyond this minimal taxation, any further taxation is in itself viewed as the government stealing from those who are taxed. Beyond legislating against over-taxation, the thefts which have already taken place must be rectified. This rectification is the tricky spot.

Let us say a minimal statist Libertarian was taxed $1 million, only $10k of which was necessary for the minimal state (flat or scaling taxation issues aside), and the remaining $990k would be considered “stolen” on the Libertarian’s view. It seems to me that when this Libertarian uses the government’s infrastructure, services, etc., he is recuperating some measure of his stolen money. Let’s say he recoups $100k in goods/services (pretend it was price adjusted to some sort of free market).  This rectification surely isn’t fair (on the Libertarian’s view), he isn’t getting  the full $990k in goods/services, he probably prefers money to these goods/services, and he is probably owed interest on that $990k. It remains clear to me, however, that the Libertarian is seeking rectification, and is not being hypocritical.

Take the same situation, only the Libertarian was taxed $30k, $10k of which was necessary for the minimal state, and he recoups $100k in goods/services. My intuition is that he’s going past his rectification right, taking far more than he should. Who is he taking this money from? Other citizens (present overpayers and/or future debtors), of course. It seems to me that the Libertarian is stealing, on his own view, in this case. This does seem to be a case of hypocrisy and immorality from within the Libertarian view.

Of course, the exact amounts which people are taxed, how much is required for the minimal state, and how much people recoup is not a completely solved empirical matter. We at least have a theoretical way to understand the problem, however, even if we don’t yet know how many Libertarians are seeking justice and how many are being hypocritical and immoral.

I submit that most Libertarians (many tea-baggers, for example) are receiving far more benefits than they pay for in taxes. Insofar as they benefit beyond their taxation, I take them to be hypocrites, inconsistent with their own views, and doing something immoral.

I fear that most Libertarians are merely ill-disguised egoists. They are not people who actually care about your rights and other peoples’ rights. They care about themselves, end of story. They should own up to that ugly fact. The problem, of course, is the Egoism, unlike Libertarianism, is far less defensible. Egoism is clearly wrong to sane people. I think Libertarians want to be egoists, but not have to own up to such insanity. 
Virtual Reality Bot MMORPG

Gameplay:

* Must program to run at first. Must also be necessary in mid/late game grinding.
* Start with Light bot. 
** Great teaching tool
* Have hotkeys/buttons to call particular scripts. Needs a text editor.
* What about a directory/tree structure to hold and call scripts? Make it simple to organize them. 
* Zones can have puzzles maybe. You should be rewarded for passing puzzles.
* Experience gain for levels? 

Technical requirements:

* PGP keys to verify who you are. Would prefer one key to rule everything on your ID. Your bot could still have a name. Would need to be unique, somehow. How?
* I2P network for anonymity 
* Decentralized, consensus and/or individual server oriented? Seems like centralized, on my own servers, is best. Could still figure out innate loadbalancing mechanics. So, centralized cluster of my own servers.
* Persistence over time
* Gamestates output in text, allows you to play the UI you want to play
* Bitcoin, could have an ingame mixer. PGP and Bitcoin addressbook in game. 
* Modding (lots of options here)
* Do I want to make money at this, and how?
* Only someone with master-game-GM PGP key can do certain things in the game, I assume. Clients will just be hacked though. Might need servers to do a lot of work here.
* Bitcoin to play with other players?
* New account keys need to be signed by GM-Key. An account key costs bitcoin to use. Monthly bitcoin cost. Dirt cheap.
** If they stop paying their key/account stops working. 
*** Bot persistence/account freeze. They can pay to bring it back online.
* Client needs to be retarded simple. It only accepts:
** Bot commands
* Bitcoin prizes? PvP, PvE? Percentage of income. 
* Clients might make a huge botnet, Sybil attack on i2p a well. 
** A bad option.
** Would prefer to make it so that other people can just make their own clients
** A “bring your own client” kind of game. 
* EVE Online
** Randian rules, universe inside.
** The anonymity makes it randian too. 
 
Hardware, dev.

* Development would need to be done with at least a VPN.
* Server
** ProxyHam
*** Throughput problem? Need a very small connection footprint per player.
** VPN (bitcoin this one)
** I2P
```
#!/bin/bash

### Replace all instances of foobar.domain in this script with your actual foobar.domain

# Install lighttpd server; default serves /var/www/html
sudo apt-get install lighttpd -y
sudo service lighttpd restart

### Setup HTTPS
# Open port SSL port
sudo apt-get install ufw -y
sudo ufw allow 443

# Install LetsEncrypt
sudo apt-get install letsencrypt -y
sudo letsencrypt certonly --webroot -w /var/www/html -d foobar.domain -d www.foobar.domain
sudo letsencrypt renew --dry-run --agree-tos
cd /etc/letsencrypt/live/foobar.domain
sudo cat privkey.pem cert.pem > ssl.pem
cd /etc/ssl/certs

# Generate key; this can take quite a while
sudo openssl dhparam -out dhparam.pem 4096

# create configuration file
sudo cat <<EOT >> /etc/lighttpd/conf-enabled/letsencrypt.foobar.domain.conf
$SERVER["socket"] == ":443" {
     ssl.engine = "enable" 
     ssl.pemfile = "/etc/letsencrypt/live/foobar.domain/ssl.pem" 
     ssl.ca-file =  "/etc/letsencrypt/live/foobar.domain/fullchain.pem"
     ssl.dh-file = "/etc/ssl/certs/dhparam.pem" 
     ssl.ec-curve = "secp384r1"
     ssl.honor-cipher-order = "enable"
     ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
     ssl.use-compression = "disable"
     setenv.add-response-header = (
    "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload",
    "X-Frame-Options" => "DENY",
    "X-Content-Type-Options" => "nosniff"
)
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
}
EOT

# Restart your http server
sudo service lighttpd restart

# Setup autorenew in crontab
(crontab -l ; echo "0 1,13 * * * letsencrypt renew") | crontab -












```
<<<
There once was a man from Nantucket,

Whose cock was so long he could suck it.

He said with a grin

As he wiped off his chin,

"If my ear were a cunt I would fuck it!
<<<
```
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                           ,,                                # 
#       MMP""MM""YMM        db        `7MM                    #
#       P'   MM   `7                    MM                    #
#            MM  `7Mb,od8 `7MM  ,p6"bo  MM  ,MP',pP"Ybd       #
#            MM    MM' "'   MM 6M'  OO  MM ;Y   8I   `"       #
#            MM    MM       MM 8M       MM;Mm   `YMMMa.       #
#            MM    MM       MM YM.    , MM `Mb. L.   I8       #
#          .JMML..JMML.   .JMML.YMbmd'.JMML. YA.M9mmmP'       #
#                                                             #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# "do one thing well" one-liners or everyday CLI usage        #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
```



!Print

Print: all the lines between 10 and 20 of a file

```
sed -n ‘10,20p’ /file/name/here
```

Print: all the lines from 10 to the end of line

```
sed -n ’10,$p’ /file/name/here
```

Print: a specific line number from a file

```
sed -n 5p /file/name/here
```

Print: lines 5 through 10 and 12 inside a file

```
sed -e '5,10d;12d' /file/name/here
```

Print: working directory

```
pwd
```

Print: the last command that would be executed rather than executing it

```
!xyz:p
```

Use `column -t` to align command output

```
grep cpu /proc/stat | column -t
```








!File and Directory: Manipulation, Operations

Store directory to stack

```
pushd directory
```

Set top stack directory as actual directory

```
popd 
```

Create a symbolic link

```
ln -s source link
```

Print logical (physical) path to current directory

```
pwd
```






!Search, Find, Replace, Rename, Text Manipulation

Search: for files using file-name (case insensitve)

```
find -iname "foofilename.bar"
```

Search: for a given string in a file (case insensitive)

```
grep -i "foobar" /file/name/here
```

Search: for a given string in all files recursively

```
grep -r "foobar" *
```

Search and replace: old with new string, inside all files

```
grep -rl oldstring . |xargs sed -i -e ‘s/oldstring/newstring/’
```

Search and replace: oldstring with new string inside a file

```
sed -i 's/^Old String Here.*/New String Here/' /file/name/here
```

Rename: all files in a directory to lowercase names

```
for i in `ls -1`; do mv $i "${i,,}" ; done

```

Substitute "foo" with "bar" ONLY for lines which contain "baz"

```
awk '/baz/{gsub(/foo/, "bar")}; 1' filename
```

Substitute "foo" with "bar" EXCEPT for lines which contain "baz"

```
awk '!/baz/{gsub(/foo/, "bar")}; 1' filename
```

Delete ALL blank lines from a file (same as "grep '.' ")

```
awk NF filename && awk '/./' filename
```

Remove duplicate, nonconsecutive lines

```
awk '!($0 in a){a[$0];print}' filename
```

Remove duplicate, consecutive lines (emulates "uniq")

```
awk 'a !~ $0; {a=$0}' filename
```





! Delete

Delete: lines 5 through 10 and 12 inside a file

```
sed -i.bak -e '5,10d;12d' /file/name/here
```

Delete all files in a folder that don't match a certain file extension

```
rm !(*.foo|*.bar|*.baz)
```





! Serve

Serve: current directory tree at http://$HOSTNAME:8000/

```
python -m SimpleHTTPServer
```





! Mount, Partition, Write, Image, Burn

Mount: folder/filesystem through SSH

```
sshfs name@server:/path/to/folder /path/to/mount/point
```

Mount: a temporary ram partition

```
mount -t tmpfs tmpfs /mnt -o size=1024m
```

Write: a bootable iso to a drive. You can use //lsblk// to find the drive. Also, note that it's sdX, not sdX1.

```
sudo dd if=/path/to/filename.iso of=/dev/sdX bs=4M
```

Mount: a .iso file in UNIX/Linux

```
mount /path/to/file.iso /mnt/cdrom -oloop
```

Mount BRTFS (compressed) partition

```
mount /dev/sda2 -t btrfs -o noatime,nodiratime,compress=lzo /path

```





! Copy, Cut, Paste, Move, Sync

Copy: all files of .bar type from one directory to another

```
ls *.bar | xargs -n1 -i cp {} /destination/directory/here
```

Copy: all .bar type files in the system to foobar archive

```
find / -name *.bar -type f -print | xargs tar -cvzf foobar.tar.gz
```

Move (cut) all the files and directories from Source directory to Destination directory

```
mv  -v ~/Source/* ~/Destination/
```

Move (cut) all files (but not directories) from Source directory to Destination directory

```
find ~/Source/ -type f -print0 | xargs -0 mv -t ~/Destination
```

Move (cut) all files from Source directory, but not any files within directories in the Source directory to Destination directory (here, -maxdepth option specifies how deep find should try, 1 means, only the directory specified in the find command. You can try using 2, 3 also to test).

```
find ~/Source/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Destination
```




! Run, Kill, Execute, Chmod

Run: the last command as root        

```
sudo !!
```

Run: the last command

```
!!
```

Run: the last command beginning with xyz that I typed

```
!xyz
```

Kill: a process that is locking a file.

```
fuser -k filename
```

Recursive chmod all *.sh files within the current directory

```
find ./ -name "*.sh" -exec chmod +x {} \;
```

Use output of last command as input

```
program `!!`
```



! Process Control and Management

Run command in background

```
command &
```

Run prog2, if prog1 ends with success

```
prog1 && prog2
```

Run prog2, if prog1 ends with error

```
prog1 || prog2 
```

Stop process (SIGSTOP)

```
Ctrl+z
```

List processes running in background

```
jobs
```

Shell is replaced by command

```
exec command
```

Wait for end of background tasks

```
wait
```

List processes and users

```
ps -xau 
```

Get PID by name of process

```
pgrep process
```

Common priority p schedule niceness: -20 (max.) to 19 (min.)

```
nice -n p command
```

Change priority of running process

```
renice -n p -p pid
```

Send signal k to proces id. n, 0, 1 SIGHUP; 2 SIGINT Ctrl+c; 3 SIGQUIT; 9 SIGKILL; 15 SIGTERM; 24 SIGSTOP

```
kill -s k n
```

Run command when signal received

```
trap 'command' signals
```

Send signals to process by name

```
killall name
```

Command will continue after logout

```
nohup command &
```

Print time of process execution

```
time command
```

Print user and system time utilization in current shell

```
times
```

Every s seconds run command

```
watch -n s command
```



! Terminal, CLI, Command line, Screen, Bash

Salvage a borked terminal

```
reset               
```

Close shell keeping all subprocess running

```
^z; bg; disown
```

escape any command aliases

```
\[command]
```

Easy and fast access to often executed commands that are very long and complex, with modifiability internal to the command.

```
some_very_long_and_complex_command # label
```

Proper command nesting instead of backticks

```
echo "The date is: $(date +%D)"
```

List all bash shortcuts

```
bind -P
```





! Remote, SSH, SCP, FTP

Transmit voice data from local microphone to speakers of remote computer through SSH

```
arecord -f dat | ssh -C user@host aplay -f dat
```

SSH connection through host in the middle

```
ssh -t reachable_host ssh unreachable_host
```

Copy: your SSH public key on a remote machine for passwordless login - the easy way

```
ssh-copy-id username@hostname
```

Ghetto VPN proxy through SSH

```
sudo sshuttle -r username@hostname 0/0
```

Remove offending key from known_hosts file with one swift move

```
ssh-keygen -R hostname
```





! Automation

Set audible alarm when an IP address comes online

```
ping -i 60 -a IP_address
```

click a hundred times - every 18 milliseconds - using left mouse button (1 at the end)

```
xdotool click --repeat 100 --delay 18 1
```







! System Administration, Monitor, Log, Troubleshoot, Information Gathering, etc.

Low-level Reboot, even through most freezes

```
<alt> + <print screen/sys rq> + <R> - <E> - <I> - <S> - <U> - <B>
```

Show apps that use internet connection at the moment. 

```
lsof -P -i -n
```

Are you lost? Learn about the File System Hierarchy

```
man hier
```

Get the kernel version (and BSD version)

```
uname -a
```

Full release info of LSB distribution

```
lsb_release -a 
```

Show who is currently logged in

```
who
```

Show date, e.g. "20170225 18:05:57 EST"

```
date +"%Y%m%d %H:%M:%S %Z" 
```

Edit crontab

```
crontab -e 
```






! Help, Information, Manual

Information about command

```
type -a command
```

Brief help on bash command

```
help command
```

Detailed manual for command 

```
man command
```

Detailed manual for command

```
info command
```

Find command

```
man -k command
```






! 3rd (Third) party services

Google Translate -- Usage: translate <phrase> <source-language> <output-language>

```
translate(){ wget -qO- "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=$1&langpair=$2|${3:-en}" | sed 's/.*"translatedText":"\([^"]*\)".*}/\1\n/'; }
```
```
# # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                                   ,,                #
#       MMP""MM""YMM              `7MM                #
#       P'   MM   `7                MM                #
#            MM  ,pW"Wq.   ,pW"Wq.  MM  ,pP"Ybd       #
#            MM 6W'   `Wb 6W'   `Wb MM  8I   `"       #
#            MM 8M     M8 8M     M8 MM  `YMMMa.       #
#            MM YA.   ,A9 YA.   ,A9 MM  L.   I8       #
#          .JMML.`Ybmd9'   `Ybmd9'.JMML.M9mmmP'       #
#                                                     #
# # # # # # # # # # # # # # # # # # # # # # # # # # # #

lftp                The only FTP client
mc                  Midnight Commander, a file explorer
htop                Top Replacement
discus              Disk Usage Display
ncdu                Disk Usage Tool
jed                 Text editor
bmon                Bandwidth Monitor
byobu               Terminal multiplexer
dtrx                Easy Decompression
mtr                 Traceroute + Ping utility
aria2c              Wget/Curl Replacement                           Usage: aria2c foobar.com/file.xyz
w3m                 Console Web Browser
weechat             IRC client
finch               All-in-One Pidgin-like messaging client
toxic               Tox client 
bleachbit           Disk cleaner
inxi                System Info Viewer                              Usage: inxi -Fi
openssh-server      Standard SSH Server (change the port)
btsync              Decentralized filesharing                      
sshfs               Mount remote folder over SSH                    Usage: sshfs name@server:/path/to/folder /path/to/mount/point
xonsh               Pythonic bash               
```
*[[HTPC's Seedbox LFTP Sync (1-way) Script]]
*[[HTPC's SAMBA Setup Script]]
*[[Headless Lubuntu DE Setup Script]]
*[[Backup File to Archive Script]]
*[[Lighttpd + Letsencrypt Setup Script]]
*[[vsFTPd Server Setup Script]]
Obviously, it would be insane to take this too literally. We are, however, seeking the kernel of truth embedded in these words. Let's find the [[The Way]]. That obviously sounds like some spooky insanity. Get past the metaphysics, the spirituality, the religiosity, the cultish scamosity, the ironically absurd jargon and doubletalk. Who gives a shit? Be practical! Everyone must write their own list of reasons to get out of bed (frame it for yourself).

* Are you happy to wake up each morning?
** Are you bursting with ideas?
*** Which ones matter the most to you today, and why?
*** Forget that extroverted-brainwashing, what do you want from the day?
** Do you know where you are in your plan?
*** Are you taking time to re-evaluate your plan?
****Doubt is a valuable tool.
** Is life feeling like a [[plight|Human plight]], an awe-inspiring opportunity, somewhere in between, all at once, ??
* Are you the author of your life?
** Does life feel like a video game (in a non-derealized way) for you?
*** Are you excited to explore, to plunder, to be the mastermind of your happiness?
**** What are your goals?
*** Are you kicking ass and taking names?
* Do you have "...'like'<<ref "1">>...10 million things to do" in a good way or a bad way?<<ref "2">>
** What is the grid of your objectives and the tree of your decisions?
** What are the moral boundaries, mechanical limits, and keys to victory?
***You must organize! But a good organizer must organize their organizating. //ad infinitum ad absurdum ad nauseum//.
****Play the game! You love games! (Be skeptical, but fucking play!)
*Do you feel Tookish today?
** Are you making your own luck today?
** Go on and confabulate your purpose, your divine path, until you don't have to. What else should you do?
* What is your purpose?
** Can you identify it? Can see the means to those ends?
* Can you be addicted to Eudaimonia?
** Is that definitionally impossible? 




--------------------
<<footnotes "1" "Best said/read with a valleygirl, rising inflection.">>
<<footnotes "2" "I'm sure this number is arbitrary in many ways.">>
//I feel really dumb for not having just fucking done this all along. Better now than never. Empathize with your future self.//

* [[Current Long-term Timeline]]

Ideas:

* Living somewhere better than the US.
* Progress is made by making new tiddlers. Push forward. Be courageous, but not reckless. Golden mean your progress.
* You are in a conversation with yourself, so let it flow.
* There is a time for computation of the contents of the wiki and a time to compute the contents for the wiki. Lastly, there is a time to infinite regress (maybe we should just call it [[Infinigress]]) into meta-wikidom.
* Find your voice, and keep finding your new voice.
* Find the tools to empathize with yourself and others. Practice them. The Art of Empathy is the among the highest of technes.
* When you feel like a nobody, you don't feel the pressure to be somebody. Use that freedom. Become who you want to be. 
I want to warn you that there is a considerable web of miscellaneous context connected to [[2016.10.17 -- Letter to Mom and Dad]] which I've basically left undocumented and/or disorganized. The links are there to find if you have the desire to click through though. 

Orphans, etc.:

* [[Draft of 'An Introduction to Daoist Philosophies']]
* [[Draft of 'Homeschooling j3d1h']]
* [[h0p3's Wiki]]
* [[Happiness]]
* [[popupStyle]]
* [[Sabbath]]
* [[SAP]]
* [[Theory of Positive Disintegration]]

Retired:

* [[Pragmatic Parenting]]
* [[Retired: 2017.01.14 -- Cryptographic Verification]]
* [[Retired: How to Donate]]
I met this woman in my wife's circle of friends who has become a true friend to me.

Outside of you, my wife, my brothers, and my children, and maybe my cousin L.E.T., I believe M.B.A. understands me best of anyone else I've met. 


Her brother is autistic. My wife's uncle is autistic (she and her family are definitely psychologically atypical). I take it that the two non-family stranger's that I have best connected to in my life share some important things in common. One of those things is that they know how to talk to autistic people. 


I think the reason [[A.L.F.]] and I don't talk much is because 
* Manhandle the Ham Candle
* Playing a little 5-on-1
* Hand-to-gland combat
* Roughing up the suspect
* DJ your own party
* Patting the Robertson
* Making a map of Hawaii
* Shaking hands with the unemployed
* Sex with the person I love most
* A date with Pamela Handerson
* Rubbing one out
* 5 knuckle shuffle
* Private Johnson's dishonorable discharge
* Warming up the altar boy's dinner
* Jackin' the beanstalk
* Playing with my joystick
* Punching the one eyed clown
* Making the bald man cry
* Flogging the dolphin
* Paddling the pink canoe
* Bashing the bishop
* Distributing some free literature
* Beat my meat like it owes me money
* Charm the snake
* Drain the monster
* Exercise one's right to privacy
* Free Willy
* Left to my own devices
* Punch the munchkin
* Sample the secret sauce
* Adjusting the antenna
* Unloading the gun
* Make baby Jesus cry
* Drain the main vein
I really miss them. I feel like I failed to connect with A as much as I'd like, but you can't always get what you want. MB and I connected very well. She helped me understand what friendship is really about. She helped me realize I'm autistic as well. Her brother is autistic, and she speaks the autistic-language was fluently, in addition to her other incredible social talents, that I immediately clicked with her. 
Quietist. I used to think he was an asshole. I was wrong.
Before there was a [[/b/ -- Random -- The Playground of the Sandbox -- Seed]], it came out of me piecemeal. Eh, it always starts messy. I'm trying to be less of a mishmash and more organized in how I isomorphically link myself onto this wiki. Structure yourself!

* [[Autism]]
* [[Bifurcation]]
* [[Counsel]]
* [[Depression|My Depression]]
* [[Gaming Microcosms & Personal Narratives]]
* [[Intelligence]]
* [[What Next?]]
* [[My Purpose]]
* [[Ad Infinitum]]
* [[Christian Memetics]]
* [[Definitions]]
* [[Moral Philosophy]]
* [[Kant]]
//Philosophy: /b/ -- Random -- The Playground of the Sandbox -- Seed//

* [[Socialism]]
* [[Practical vs Theoretical Reason]]
* [[Less Wrong]]
* [[Transcendental Gateway]]
* [[Positive Nihilism]]
* [[Social Darwinism]] 
* [[Existential Warrior]]
* [[Existential Log]]
Any effective reaction to and successful emergence from [[Postmodernism]]. Unfortunately, postmodernism is so successful a meme that our species seems to be failing to constructively respond. We must nurture hope and work hard to defeat this slippery monster.

Here are some crucial concepts to explore:

* [[Daoism]]
* [[Less Wrong]]
* [[Positive Disintegration]]
* [[Positive Nihilism]]
* [[Postmodernism]]
* [[The Technohuman Stack]]
* [[The Ring of h0p3]]
* [[Bayesian Confirmation Theory]]
* [[Growth Cycle]]
* [[Principle of Sufficient Reason]]
* [[The Purpose of Knowledge]]
* [[China Brain and Reality Simulations]]

This wiki is meant to be a metamodern work.

I am tired of the postmodern deconstruction of the world. I am tired of my derealization. I am tired of my disintregation. I'm ready to be malleable, just let me out. I need something practical since I can no longer afford the costs of being ideal. What is the right practical ground? Or is that question already missing the point? To what extent is metamodernism like [[Modernism]]? 

This wiki is a stream of consciousness work, famously modern. I keep having difficulty ascending to the last level in the [[Positive Disintegration]] framework. I definitely had a philosophically backwards upbringing. I have fought tooth and nail to adapt to my environment. This is where I find myself: I hope this wiki allows me to move forward to being metamodern rather than falling back on modernism and the certainty before it. 
.
* [[Good vs. Right]]
* [[Moral vs. Legal]]
* [[Hybridizing Kantianism and Utilitarianism]]
All too often we confuse moral rights and legal rights. They are very different. It is generally easy to spot laws which are immoral (Godwin's Law straight to Nazi Germany). Unfortunately, we often fail to look in the other direction in our society (although, it is easier to spot in archaic, historical, or strongly otherised societies). Here are some oversimplified<<ref "1">> examples of things which are moral but illegal today in many places around the world:

* Feeding the homeless is moral but illegal in many cities.
** This is highly similar to the fact that giving away left over restaurant food or groceries is moral but illegal in many places.
** It is illegal because those in power want to push out the poorest out of the community. Wealthy and powerful people do not want to accept their moral responsibility to help others.
* Whistleblowing is moral but illegal (or treated as being illegal) in many countries and organizations.
** It is illegal because those in power do not want to be held accountable.
* Prostitution (even regulated) can be moral (depending on your moral theory), but is often illegal.
** It is illegal because it provides significant competition in the mating game. When supply is higher, the price people (usually men) have to pay for sex falls. People (generally women) do not want to lose their street value in sexual bargaining and socioeconomic games at large. Further, it is likely the case that wealthy people benefit from higher reproductive rates in poor people (more human capital to harvest), and thus prefer larger family units (which is countered when sexual drives are met through prostitution).
* Putting money in other peoples' parking meters when they're about to expire so they don't get a ticket is moral but not always legal.
** It is illegal because parking tickets are a significant source of revenue for the state.
* Collecting rain water is moral but often illegal.
** It is illegal because dependency on the state/utilities makes you more likely to obedient and pay taxes.
* Using drugs is often moral but generally illegal.
** It is illegal because pharmaceutical, law-enforcement, judicial, prison industrial-complexes are strongly dependent upon and benefit from the illegality of drugs.
* Giving clean needles to junkies.
** It is illegal because it enables lawmakers (and proponents) to show artificially heightened negative consequences of drug use as a justification for the illegality of drugs.
* Euthanasia, abortion, consensual gay sex are often moral but illegal.
** It is illegal because a specific group of people believe these acts are wrong (using private, rather than public, reasons), and fascists abuse/harness the political/social power of these people by making these acts illegal in exchange for other significant power, wealth, and freedom sacrifices of the masses.
* Refusing compulsory military service is often moral but illegal.
** It is illegal because those in power need military power.

Many people are brainwashed into thinking these illegal yet moral (or permissible) acts are immoral. Being redpilled allows you to very easily explain (not the same as justifying) why these are illegal. I think non-redpilled descriptions of these issues tend to be confabulations. 

Anytime you look at a law and think, that isn't right, you should be asking yourself if you are distinguishing moral right from legal right.

We should note that legality, as a concept, may extend further than just the laws of nation-state, provincial, or city government. I believe almost any social rule exists inside its own kind of legal/normative framework. This broad concept of jural laws is invaluable to us in distinguishing what is //actually// normative for us. Jural laws are truly conditional, in part, because their normativity stems from being manmade (in a common sense). We might say even moral laws are manmade, but if they are, it is the result of a unique process that jural laws do not participate in. 

You have to get it through your head that people aren't moral (they are deeply selfish). You might be seeking to be moral (and you might just be deeply selfish too), but most people aren't (or they are fucking terrible at it). The redpill description of social mores and laws is rarely if ever actually based upon moral theory. It is the collective patchwork of self-interested motivations agreed upon by powerful groups of people (whether because they are the majority, or because they have financial resources, or the right social networks to impose their will, etc.). 

-----------------------------

<<footnotes "1" "I obviously don't think I've given any substantial arguments for 'why these things are moral or illegal.' Most of these have a huge literature built around them. These one-line answers only serve as a sketch of my distinction between moral and legal, and the principles I use to make that distinction.">>
Here I curate a canon of films with a high signal-to-noise ratio. Everyone develops their own lists and libraries. We collectively do as well in different ways. The goal is to be well-rounded, to have a liberal education, to understand The Great Conversation of Humanity, to understand the cultures and contexts that surround us, to empathize with human beings from all walks of life, and to embed ourselves in the right memetic networks. I happen to think everything I list is worth watching by everyone. Obviously, my list will be deeply incomplete. In part, this is because I've only seen a fraction of what's out there. But, it's also purposely incomplete because I've also tried to maximize saccharine "enjoyment" factor coupled with memetic heritage over metrics like art-house quality and film-critic style ranking. 

Like television shows, music, and books, I'm forced to reduce what I've consumed to what I consider a valuable, manageable canon. These are the movies my children will be required to see. Writing a list will help me reflect as well. I'm leaving a lot out. I'm trying to be picky. Countless films did not make the list. I'm open to hearing your arguments.

I barely watch movies anymore. I sound like a crotchety old man getting pickier as he ages, but I think movies aren't as good these days, especially for me. Yes, it is harder to move, surprise, and entertain me after having seen so much. However, like every generation, I somehow think we're losing something. 

Producers run their movie scripts through AI optimization engines to maximize earnings. This reduces plots, complexity, themes, and messages to fit the lowest common denominator. Business risk aversion controls the narratives we see. Nowadays, if the majority of the audience can't see themselves as the main character, then it doesn't get made. Unique films are uncommon and worthwhile films even rarer. Monocultures can be problematic, and yet having canons of memes we all share in common is so crucial. We must individually and collectively strike the right balance in finding relevance, value, perspective, and ourselves. Movies can be powerful story-telling devices which teach us to empathize. We do not wield the medium in this way very often though. We should study them carefully. They are some the strongest memetic devices in human history. Pay attention!

Lastly, I like to rank and categorize. I need to bring order to the chaos of finding relevance. Obviously, a relational database would be more accurate, but I'm not sure it would really be more useful. This will be good enough.

''Excellent. Watch at least once:''

* [[The Star Wars series]] (main saga, 8 so far)
* [[The Star Trek series]] (13 so far)
* Indiana Jones series (just the first 3 in the series)
* Alien series (6 so far)
* Lord of the Rings (trilogy; forget The Hobbit abomination)
* Sin City (series)
* Shaun of the Dead (loosely a series)

* Avatar
* Jurassic Park (just the first in the series)
* Spirited Away
* The Lion King
* WALL·E
* Toy Story
* Finding Nemo
* Aladdin
* The Incredibles
* Shrek
* Mulan
* The Muppet Christmas Carol
* The Dark Crystal
* Chicken Run

* The Sandlot
* Stardust
* Hook
* Mrs. Doubtfire
* Jumanji

* The Fifth Element
* Close Encounters of the Third Kind
* Blade Runner 
* 2001: A Space Odyssey
* Ex Machina

* Amadeus
* Searching for Bobby Fischer
* Rounders
* Catch Me If You Can
* Ocean's Eleven

* Groundhog Day
* Pirates of the Caribbean (just the first one)
* Harold & Kumar Go to White Castle
* Super Troopers
* Scott Pilgrim vs. the World
* Superbad
* Zombieland
* The Breakfast Club
* Back to the Future
* Wild Wild West
* Independence Day
* Men in Black
* Dumb and Dumber

* Die Hard (just the first in the series)
* Rush Hour
* Léon: The Professional
* The Boondock Saints
* Gladiator
* 300
* The Terminator (just the first one)
* The Hunt for Red October
* Mad Max: Fury Road
* Enemy of the State
* The Rock
* Mission: Impossible (just the first in the series)
* The Negotiator
* Inside Man
* The Taking of Pelham 123

* American Sniper (even extreme propaganda must be studied)
* V for Vendetta
* John Q.
* The Manchurian Candidate
* The Book of Eli
* Full Metal Jacket
* Minority Report
* American Psycho
* Inside Job
* Too Big to Fail
* Boiler Room
* Babel
* 12 Angry Men

* Forrest Gump
* Eternal Sunshine of the Spotless Mind
* Pleasantville
* Fried Green Tomatoes
* Office Space
* The Blues Brothers
* Lost in Translation
* The Royal Tenenbaums

* Edward Scissorhands
* Big Fish
* Corpse Bride
* Coraline
* Alice in Wonderland
* The Nightmare Before Christmas
* What Dreams May Come
* The Princess Bride

* The Sixth Sense
* Unbreakable
* Signs
* The Village
* Lady in the Water
* Black Swan

* Meet Joe Black
* Erin Brockovich
* Mr. Holland's Opus
* Dead Man Walking
* Patch Adams
* I Am Sam

* Road to Perdition
* That Thing You Do!
* You've Got Mail
* The Terminal
* Cast Away
* The Green Mile
* Apollo 13

* One Hour Photo
* E.T. the Extra-Terrestrial
* 28 Days Later...
* Saw (just the first in the series)
* Se7en
* The Silence of the Lambs

* Cube
* Pi
* Memento 
* The Prestige
* The Butterfly Effect
* Dark City
* Being John Malkovich
* The Thirteenth Floor
* The Machinist 
* The Game
* Twelve Monkeys
* The Truman Show
* A Clockwork Orange
* Full Metal Jacket
* Eyes Wide Shut
* Sleuth

* Schindler's List
* The Pianist
* American Beauty
* Requiem for a Dream
* Trainspotting
* The War


''Amazing. Watch multiple times:''

* The Fountain
* Gattaca
* O Brother, Where Art Thou?
* Mars Attacks!
* Deadpool
* The Shawshank Redemption
* Pulp Fiction
* Snatch
* American History X
* Oldboy (Korean version)
* Pan's Labyrinth
* No Country for Old Men
* Lucky Number Sleven
* Watchmen
* Kill Bill (series)
* A.I. Artificial Intelligence
* Dead Poets Society
* District 9
* Baraka
* The Last Unicorn
* Good Will Hunting
* Stargate


''God-like:''

* The Matrix (series)
* Donnie Darko
* Dogma
* The Big Lebowski
* Fight Club
* Samsara

The new Pandora interface tells me how many hours I've spent on each channel. My total usage of Pandora over the past few years: 6793 hours! I've had the account for 6.5 years. I average listening to Pandora 12% of my day.
I have always had a mental condition, we just didn't know what it was. You know I didn't add up, that I wasn't normal. You've seen weird ticks, unexplainables, the moments of brilliance and the moments of insane stupidity. You've known by the way I turn my head when I watch TV. You've known from our many conversations, given your long set of experiences and training in having conversations with people. You've known when you realized you don't understand some of the things I say, and yet have reasons to believe I'm saying something reasonable.  You've seen how I can't socialize correctly (and it doesn't make sense to you given the rest of my intelligence). You've known by the fact that despite the many odds against me, I've done some things that you didn't expect I could. There is a place in me that is deeply retarded, and yet there are places that very abnormally functional on the bell curve. You've known I was a 4eak for a long time. You've known.

I think you think I am a narcissist or a psychopath. If if it is true that you do, then I think it makes you hypocrites as the least. I think it shows a lack of empathy on your part. I think it is a fissure between us. I think that everyone is narcisistic. Why shouldn't I? I think that narcisism and self-interest is simply explained in different ways. I think morality is an ad hoc concept. Those Kantian thoughts, those come from the faster acting part of your mind, the part that doesn't think for real. Trust your fucking frontal lobes. 

I think you dismiss me as some addicted fool. I think you have no clue about what I've experienced. I think you do not understand the concept of addiction, nor the concept of a drug. I think you do not have enough background in the analysis of the rewards center of our brains, nor a meta-analysis of those analyses.

You mean something in the symbol of the Jackelope. What do you mean by it? How do I see it? I see a childhood story that demonstrates I can't trust what you said to me. What do you see? That you were just joking? Okay, then I see that you didn't know your child well enough to know how he actually thought, that you lacked empathy for your children in critical ways. 



[ASD|Autism Spectrum Disorder]]

The ways in which I play video games is an excellent example of my autism. I play ludologically, with zero care for narrative. I do not "play as the character" or roleplay or see myself in a story. 

I have difficulty suspending disbelief. 



, specifically, the appearance of what was called PDD-NOS (before they were all rolled into the spectrum). 
Cynicism can be used as a defensive tool. It may be a coping mechanism for someone who has experienced significant psychological trauma, to make sure they avoid that pain. Cynics have been burned badly by the world, by belief in what turned out to be false. They are scarred and shaped by having been baptized by fire.

The argument against cynics, which I fear is too often a sweeping generalization, is that their negativity is a mere rationalization. The idea is that cynics can't be correct because it is only a rationalization. Of course, a cynic could simply counter with this fact: many people desperately need to hold onto hope and assumptions that the world is rosier and better than it actually is, lest they be hurt by that fact. It's why no one believes the market is crashing until it is too late.

I'm saying the dismissal of cynicism is pointless if not outright hypocritical. Once we get in the game of accusing each other of rationalizing, the game is over. I think rationalized denial is always a mechanism to protect us from pain. How do you really know when someone is rationalizing though? When you are honest with yourself, when you continually try to answer the question "why" and "how," you will see we have serious epistemic problems in answering that question. 

The only thing which cleanses the problem of rationalization is accepting reason (of course, what counts as reason is...what? -- are we only going to accept public reasoning [throw your faith away if so], and what justifies that assumption?). I say: put your money where your mouth is. If you want to show a cynic they are wrong, and you think you have more than faith (which ultimately may only be a private reason), and you have a public reason (one that can or should convince others), then do it.

I think plenty of cynics want to be wrong. They would be overjoyed to have that hope. Cynics see the cost of being wrong about what is most important.
Dark Thoughts. Some of them are ideally justified, some of them practically justified, and some of them entirely unjustified.

I'm suffering from existential depression. It's warranted. You probably can't help me directly with it; I don't think anyone else can either. Assuming it actually has a solution is also misguided. There really might not be one. 

Why I'm depressed:

The internal struggled to continually debate between:

[[PTSD]]

[[Positive Disintegration]]

[[My Fundamental Internal Conflict]]


 [[Who Am I?]] and [[Who I Am?]]

[[Freedom]]

[[The Red Pill]]

[[The End of Humanity]]

[[The "Whine like a Baby" Section]]

[[Why Are People Stupid?]]

[[Practical life]]

[[My Cynicism]]

[[Your Parenting]]
I'm split between my [[Slowmind]] (which is deliberative, slower-acting, concentrated in the frontal lobes, dealing in utilitarianism) and my [[Fastmind]] (Kantian, faster-acting, gutteral, intuitive).

I see my intuitions cannot be trusted. My Fastmind has excellent reasons not to trust my Slowmind, and vice versa. This has been a big deal, especially for an xNTJ. 

I am re-writing my intuitions to some very significant extent. There is a clash in me. I must use reason to reshape myself. I'm doing what Virtue theory is literally talking about in terms of habituating character and excellent of practice.

Problematically, reason, as far as I can see, is very selfish. It is a scientific fact that the most rational part of our brains tends to stray from altruism and into egoism. How can I be moral and happy at the same time? How can I be reasonable and fittingly empathic at the same time?

I am autistic. This only further convolutes the problems.

The goal is to create a cooperation between my Slowmind and my Fastmind. My Fastmind is rational enough to see it will be destroyed by the Slowmind if it becomes adjusts intuitions too quickly and radically across the board. 

This is the source of my phenomenological appearance of not being free. It's because I wasn't. It's because my Slowmind and Fastmind are in a prisoner's dilemma with each other.

Understanding empathy, psychopathy, and autism has helped clear this up. Positive Disintegration helps me understand it much better.

I don't know when it will happen, but her illness is going to take her life. I don't have the words. I need to find them though. My mother needs to know how much I love her. She needs to know how grateful I am have and to have had her as my mom. There is the rift between us, and we both know it. I don't know how to reach out and touch her. We're both in so much pain it might not help. We are so afraid not to hurt each other, and perhaps so afraid of being hurt, that I'm failing to tell my dying mother whatever it is that I'm supposed to say. I don't even know what to say. 

It has been the hardest year of our lives. 
My genetic and partial memetic creators. 

They are existential beasts like me, on their own journey.

I hope we empathize with each other.
* [[Vocation]]
** [[Why I'm Not a Professional Philosopher]]
* Occupation/Vocational Timeline
** [[McDonald's]]
** [[Janitor]]
** [[Teaching Assistant]]
** [[Teacher]]
** [[Phone Center Worker]]
** [[Communications Analyst]]
** [[Teacher hoping-to-be Missionary]]
** [[Philosopher-missionary in Training]] 
*** Almost went into faith-based social work instead.
** Lost Faith in God
*** Toward the end of my master's program; after my brother lost his faith; I wrestled philosophically on his behalf, and I saw he was right.
** [[Philosopher on a Moral Mission]] ( 'moral missionary' instead of 'religious' missionary)
** Lost Faith in Humanity
** Lost Faith in Myself
** Regained Faith in Myself. 
** [[Pipefitter]]

Hey Kierkegaard: this is a there and back again story. Look at it:

Aesthetic > Ethical > Faith > Ethical > Aesthetic > Ethical

Does this go on? Do I continue on this cycle? Will I always oscillate up and down between these three existential stages of life?

The real question: does Positive Disintegration include this or does this include Positive Disintegration? Which is the more fundamental or primitive process of existential mode/paradigm shifts? I believe Positive Disintegration is the larger, more fundamental phenomenon. I have spent some time studying it, and I think Kierkegaard stumbled on a crucial but oversimplified psychological point of view long before it germinated into Positive Disintegration. 

The good of Kierkegaard is God. The good of Positive Disintegration is Self-Unity. From what I can tell, God is not rational, but Self-Unity is. What is the good if it isn't God? Perhaps Self-Unity. For the sake of argument, say Self-Unity is my purpose. What do I do with my Self-Unity after I'm properly unified? Being myself is what it means to be unified unless I'm improving my unity. Is that all there is to moral life is making sure I'm unified? But, the [[Korsgaardian Slip]] shows that unification need not require being moral. Hence, Self-Unity overrides moral law? Is that Right? What is Right? Why should we think the moral law overrides Self-Unity? This was the way we went. It was a crucial mistake, since it was impractical. Hence my bifurcation.
Medicine

[[Positive Integration]]

[[Metamodernism]]

[[Being Grateful]]
* [[Pay Negotiation]]
[[k0sh3k]]:

* Make a Tiddlywiki journal
* Read ~115 books
* Change my blog
* Publish a chapter
* Give up meat for Lent
* Teach class over Lent


[[h0p3]]: 

* Sunday/Sabbath Family Reflection Meetings
* Saturday Homeschool Accountability/Celebration Meetings
* Financial Stability
** ~~Budgeting~~
** Following budget
** ~~Getting school paid for~~
** Getting a safe, high-paying, high-mobility (not in the traveling sense, but likely also necessary) job.
* Guiding my children to become eudaimonic lifehackers.
* Grind math and programming
** Empathizing with your future self. These may be useful to you. They may help you in Pipefitting or otherwise.
* Become a pipefitter.

[[j3d1h]]:

*Find my voice
** Creating Youtube Videos
*** Figuring out toolchains and creating them
**** Recording
**** Editing
**** Encoding
**** Hosting
**** PR
** Make Linux my home
***Hack linux to run games
**** Minecraft
**** Steam
**** Overwatch


[[1uxb0x]]:

*Create art
**Theory
*** Study the concept of Art
** Practice
*** ASCII Art
*** Drawing
*** Guitar
*** Stopmotion Art



* [[The Daily Show]]
* [[Last Week Tonight with John Oliver]]
We are bootstrapping ourselves at the nexus.

<<<
[[KIN]]: Yeah, I think, therefore I am. 
<<<

<<<
[[RPIN]]: So, I guess it's my turn to say something snappy: That is //so deep//. 
<<<

<<<
[[KIN]]: Since we're being empathic here, I think the rabbleroused-crowd would next claim: "Look at him. He wants to use big words. He thinks he's fancy. He thinks he's better than we are. He's arrogant. We hate him." Is that rational?
<<<

<<<
[[RPIN]]: Two can play at that "Identify the Hyprocrite" game: [[Our Dear Programmer]] uses socially taboo substances, thus he must, by definition, be wrong and off his rocker." 
<<<

<<<
[[KIN]]: Zing! We are bottlenecked, our vision fogged, but all is not lost.
<<<

/s. No. We must release ourselves from the psychopathy of being facetious towards existentialism. Inexorably, we all must answer these questions or take up assumptions for ourselves. It is Dasein's [[plight|Human Plight]] at Kant's Crossroads. It is the infinitesimal center of who we are.

I am not sure what I am. I am certain of some things. I have axioms (you can bet your ass that "I have axioms" is axiomatic).<<ref "1">>

I am the thing which paradoxically is itself and disassociates from itself. I create new dimensions of myself, but the world around me also creates me. I am in a struggle to control myself in order to free myself.

I must be honest with myself. I must empathize with myself. I must know myself. 

My dad says he can't be a salesman of something he doesn't believe in. I think that is a mark of integrity and rationality. What am I selling to myself? What do I really believe? What is actually worth selling to myself?

I hope the wisest things I say are those things that I say to myself. After that, I hope the wisest things I say are to my family. After that, to the other kinds of social objects and constructions (ends in themselves) which we take to be valuable ends in themselves.

I'm not a god, but I am a self-programmer. I'm autonomous. I am free within limits. I'm me. I am my vocation. I must structure and restructure the things I value. I must transform myself. I must become the person I want to be.

------------------------------

<<footnotes "1" "I see the wisdom in the fact that I can't exclusively strive for Cartesian/Husserlian certainty.">>
You can't begin to know how much I despise the fact that I think that Hume, Nietzsche, Wittgenstein, and a host of skeptics and cynics happened to be right on so many important things. 

Nietzsche was right about the world losing its God, as a successful, believed meme virus in the human race. He made an astute sociological observation about what many humans would do when they lost their religion. This is similar to sociological observations abut what happened when people gained religion. This is because religion is a subset of morality; in addition to an assumptive set of facts about metaphysics, it's a specific set of moral questions about how we should think, who we should be, and what would do. 
<<<
When you're with someone, you put up with the stuff that makes you lose respect for them. That is love. 

--Erin, The Office
<<<

<<<
The sentiment, the idea -- it's so basic, you feel like you already know it, you just haven't thought of it lately.

--Don Draper, Mad Men
<<<

<<<
Chaos isn’t a pit. //Chaos is a ladder//. Many who try to climb it fail and never get to try again. The fall breaks them. And some are given a chance to climb, but they refuse. They cling to the realm or the gods or love. Illusions. Only the ladder is real. The climb is all there is.

--Petyr "Little Finger" Baelish, Game of Thrones
<<<

<<<
Protect life until death.

--Leeloo, The Fifth Element.
<<<
<<<
I will answer injustice with justice.

--"Daenerys Stormborn of the House Targaryen, First of Her Name, the Unburnt, Queen of the Andals and the First Men, Khaleesi of the Great Grass Sea, Breaker of Chains, and Mother of Dragons; Game of Thrones"
<<<
I've lost count of everything I've read. Some stick out moreso than others though. These are champions:

* SMBC
* Cyanide and Happiness
* XKCD
* Indexed
* Buttersafe
* Poorly Drawn Lines
* Existential Comics
How do you know someone isn't cheating in a game? A server guarantees it. A server acts as a third-party arbiter of whether or not clients are playing by the rules. The problem is that centralized game servers create opportunities to bottleneck player experiences in profound ways. Who owns the server? Are there other kinds of requirements to be on the server set by the owner? Essentially, you want servers that don't require any centralized server at all, no owners, and essentially, fewer social and economics barriers to entry.

This limits what kinds of games can possibly be played. You must rely upon people giving up enough FLOPS, clock cycles, memory, GPGPU power, hard drive space, network speed, loads on their routers, and other kinds of virtual resources. Games should have minimum requirements. We need a kind of atropos network.

Someone who builds an [[Atropos]] network needs to do something very important: builds apps with it. No network is going to be used unless (1) It's incredibly easy to proxy into it (2) it 

The Atropos network should be written in Go and compiled into ~WebASM. 
When someone is both the operator and operatee.
Don't get me wrong. I think what OSHA is meant to do is incredibly valuable. I hope they are world-class effective at regulating work environments. I'm a leftist completely in favor of OSHA's stated mission. The OSHA-10 course+test, however, is deplorable.

You take a pre-exam worth nothing. You don't care if you get a zero (they tell you it doesn't matter what score you get), so you'll literally not try because it doesn't matter. Then they run you through a shitty course taking X amount of time with tons of cheaty faced ways to force you to consume time without actually learning (gross). I'm getting 100's on these tests and just clicking through. I think there is no way you can complete this course in 10 hours. It's designed to literally take up time without teaching you anything. There's something wrong about this course structure (but I'm glad I'm getting it done). You take shitty intermediate exams and final which are designed to allow you to pass; it isn't a real testing system. At the end, they have metrics which "show:" you spent over 10 hours "learning" and appear to have really learned something because of the difference in pre-exam and final exam scores. But, the reason the final exam scores are likely so much higher is because people will actually try. You can fucking google the question and the answer shows up. While the information is important, this course/testing seems like a kind of scam.
//We love you! We love you to the core of who you are. You are our creation. As your creators, we are not your God. We are just your parents. We are fallible mammals swept by the maelstrom of time. Just like your creators, you are caught in this web of life and reality. We have a dream for you://

* She wisely loves herself.
* She gazes deeply into herself and the world.
* She designs her knowledge.
* She is her own master.
* She knows who she is.
* She relishes her thought, judgment, and perception.
* She is good.
* She seeks to be and do what is right.
* She does her best.
* She practicallly intuits, feels, and breathes her knowledge.
* She solves.
* She knows it.
* She is meta about it.
* She measures and systematizes.
* She analyzes and synthesizes.
* She formulates, theorizes, and paradigmizes.
* She constructs, fits, and connects the pieces.
* She strategically programs herself.
* She shapes the world around her.
* She is a woman, a //homo sapien//. 
* She is as excellent as she can be.
* She is her own beautiful, amazing entity. 
* She brings it into being.
* She designs happiness.
* She is happy.
//We love you! We love you to the core of who you are. You are our creation. As your creators, we are not your God. We are just your parents. We are fallible mammals swept by the maelstrom of time. Just like your creators, you are caught in this web of life and reality. We have a dream for you://

* He wisely loves himself. 
* He takes life by the horns. 
* He conquers himself. 
* He is his own master. 
* He knows who he is. 
* He takes pride in himself. 
* He is good. 
* He seeks to be and do what is right.
* He does his best. 
* He searches, struggles, and wrestles.
* He fights when he must.
* He forgives himself and others when he can.
* He sees it.
* He plans and aims for it.
* He takes the means to his ends.
* He builds, hunts, and cultivates.
* He leaps and loves. 
* He yearns and hopes.
* He is a man, a //homo sapien//. 
* He is as excellent as he can be.
* He is his own beautiful, amazing entity. 
* He seizes it.
* He conquers happiness.
* He is happy.
If I had a zillion dollars, I'd secure myself (like a little child dreaming in his room) with at least as follows (with preference given to things actually possibly applicable to my current life):

A faraday cage, locked, hidden room, where we could all hide if there was trouble. A true end-of-the-world shelter. A safe room. A safe room in a safe house in a secluded, highly indendent, residence. 
* Pick a specific number, since it may cause your opponent to assume you've researched more than they have.
** Let them work you down.
** Don't use a range.
* You should pick something toward the top of the local/national pay range. Assume you are entitled to it.
* Rehearse the encounter.
* Focus on the future, not the current/past. 
* When countering, stall.
** Do not say "OK" or "hrmmm" to their first offer.
** Give them a few seconds of silence (they are more likely to improve the offer).
* Continue negotiating
** "I really appreciate your offer, but I was expecting $53,750 based on my experience, drive, and performance. Can we look at a salary of $53,750?"
** They may balk. Don't give up.
** "I understand where you're coming from, and I just want to reiterate my enthusiasm for the position and working with you and the team. I think my skills are perfectly suited for this position and are worth $53,750." 
*** Silence afterwards. Wait for the reply.
** They may give way.
** If they do, reply with a simple: "Great, I appreciate that."
* Myself
** [[h0p3]], [[KIN]], and [[RPIN]]


* My Brothers
** [[AIR]]
** [[JRE]]

* My Family
** [[j3d1h]]
** [[k0sh3k]]
** [[1uxb0x]]
** [[To: My Family]]

* [[My Parents]]
** [[Acceptance]]
** [[Apology]]
** [[Adult Children of Alcoholics]]
** [[Last Word]]
** [[Letters]]
** [[I think if you understood, you'd agree with me]]
** [[My Mother is Dying]]
** [[Trying to Be Right]]

* My RL Friends
** [[AL&J]]
** [[MB&A]]
** [[L&K]]
** [[R&C]]
** [[PR]]
Let us start by saying philosophy is the pursuit of wisdom. Let us reductively claim the pursuit of wisdom is the pursuit of valuable truth and the fitting application of it in context.

How should we pursue it? Why is it true that we should pursue it that way, what counts as truth, and do you only want to pursue truth? Are we talking about different kinds of truths here? Are we talking about moral truths, scientific truths, emotional truths? Truth seems too narrow and generates inconsistencies in us, so maybe we are just after justified belief, even if it isn't true. What is justification? And so on and so forth. etc. ad nauseum.

We are in an [[Infinigress]] of asking questions, seeking justifications and explanations, finding the truth, and feeling out what is wise. That's life, and that's philosophy. You might visualize it:

!''The W+H Questions''

Who Questions:

* Who am I? 
** What am I?
** Who is the real me?
** What does it mean to be a self?
*** What if I'm multiple selves?
**** What if we objectively are all are that way?
***** What if we aren't?
...

...

...

* Who are you?
** What are you?
***How are you that way?
** How should I treat you?
* Who are we?
** What are we?
* Who else is there?
** Who are we?

...

...

...

What Questions:

*What am I doing here?
**What are you doing here?
**What are we doing here?

.
.
.

...

.

It spirals away from our starting point. We bootstrap ourselves. We have new paradigms, visions, and comprehensive perspectives over time. We evolve. It's progression (although, progress doesn't necessarily make us happy).

Defining and answering these questions is crucial to answering so many other questions. Philosophy is a pursuit of all of these questions. We might say, "Oh, that isn't practical. That isn't possible to do. Just because we can't doesn't mean we shouldn't try though, right?." But, what else should we do? Finding the best answers we can, even if they aren't perfect, even if it takes us into some crazy places, may be the only practical option. 

I need answers for my family too. I need to make them happy. I have created this group with my wife, and now I am responsible for it. I must do my absolute best (even as it cracks and comes in degrees and kinds, over and over to infinigress).

Ultimately, I do philosophy because it is practical. I am theoretical because it is the practical thing to do. I am an idealist because it pragmatically required of me. Idealism/Pragmatism, Doxa/Praxis, The Good/The Real, and worrisomely woven into is this Right/Wrong distinction. How do we weld this together? 

I am no longer in a position to wait for others to answer my questions. I must answer them for myself as best as I can. I am the scared and brave authority for myself. I wander under the stars. I hide from danger. I plan for my survival. I empathize with myself and the world around me. I try to find happiness with what I've got (and still ask who gave what I've got to me). 

The objective answer isn't always good for the subject. It is part of being pushing towards the golden mean that we must take on the mode and mindset that isn't objective. Only then will we fittingly overaim to eventually hit the mark that makes us happy.

Here are the highlights of my graduate work in philosophy:

* [[Summa Philosophica]]

Here are the philosophical Meditations and Deliberations on this wiki:

* [[Meditations and Deliberations: 1]]
* [[Meditations and Deliberations: 2]]
//Oh Jesus. Help us.//

<<<
A horse walks into a bar. The bartender asks the horse if it's an alcoholic considering all the bars he frequents, to which the horse replies "I don't think I am." POOF! The horse disappears. 

This is the point in time when all the philosophy students in the audience begin to giggle, as they are familiar with the philosophical proposition of Cogito ergo sum, or I think, therefore, I am. 

But to explain the concept aforehand would be putting Descartes before the horse.
<<<

//See: [[Pipefitting Log]]//

What I'm learning to do. I see it as a gateway to becoming a craftsman and embracing a part of the Heideggerian tradition in my unification. My dad loves to bandy the phrase renaissance man around, and honestly, he's right: I'd love to be a jack-of-all trades + scholar. I love working with my hands, getting dirty, and having something physical to show for it at the end of the day. I am not afraid of manual labor. I love being able to point at something physical at the end of the day and say "I made that." There is something satisfying about working with your hands (not that I can't do the same with my intellect, but there is something visceral about it that is missing that sometimes fails to satisfy my innerbeast). Ultimately, as long as it consistently involves problem-solving (especially not with peoples' minds), I should be in good shape (and making sure that I am constantly challenged, hopefully, will coincide with significant pay increases and quality of life [especially flexibility and autonomy] improvements). 

Why pipefitting specifically?

I originally was going for welding, then possibly machining. Due to overdetermined circumstances, I simply couldn't. Thankfully, pipefitting seems like it fits the way I think very well. I believe I will really love doing it. Further, the pipefitters and plumbers union is one of the few available closeby (although, they do a lot of work out of town, atm). It seems to be provide reasonable mobility/pathways to other trades. My teacher says he wishes he went the union path.

Pipefitting wages are fairly high, the training fairly short, and the skill tree (and overlap) is large (as far as trades go). The demand doesn't seem to be disappearing (high enough in my area), and I think it will be very difficult to automate it. I'd love to have the kind of trade which can at least survive the automation of our world for as long as possible. If and when it does become automated, I'd like to be a master that can at least make use of the automation (and integrate it into my work). 

If I'm sacrificing time with my family, then I absolutely must make this worth it. I need to be voracious, open, humble, amiable, and unstoppable in my pursuit. It has to become one of my primary passions (and the one which takes up most of my time). I need to find a job which maximizes the time I get with my family while bringing home a good wage (the best wages require nomadic migration). 

One student claimed that the work could technically be finished in 6 months (average for the program is 12 months), but the teacher says 10 is really the shortest time period. I'm smashing through the computer-based testing. I have a library prepared, and I'm slowly working my way through the books. I hope to pass the tests and spend tons of time practicing technique in the shop. I will W5 my way through this work. I want to know how to solve the same problem in multiple ways, and have the wisdom to know which one to use. I want to know which tools are best for the job at hand. A short introduction to the science behind what I'm doing would be useful. Further, I believe it will be necessary to be technically excellent in order to make up for my other deficiencies (or give the space to work on it), but also to quickly advance to a paycheck worth having. 

I'm applying to the union. I'm also going to look at other places for co-op. The teacher believes co-op is a fine option for many students, but that they will not learn nearly as much on the job (where they will be forced to do one specific thing and nothing else, most likely) as they will in class. I'm not sure if I'd drop out to go for them. The program does look useful. I'd need to find more information. I should still search for a job though. 

The Evolving Pipefitter Plan:

*Short-term:
** Crush the opening tri-semester busy work instantly. Take the optional general tech course as well (highly recommended). Get me in the shop learning the actual trade asap.
** Start networking and exploring the landscape.
*Mid-term:
**Finish the program in 9 months 
**Generate a list of employers. Figure out which one I really want to be hired at.
*Long-term:
** Consider becoming a contractor, otherwise find a job with a solid autonomy + pay balance.
*** If I can't, maybe I'll live in a van (yay) to keep that per diem. 
** Consider plumbing, welding, HVAC, and related trades
*** Learning all the trades would be cool, useful, and something I could take pride in. 

I do not see myself as a manager. I'd be fine working to help a union in certain ways. I'd be fine eventually becoming someone who teaches. I think I'd have the most fun becoming adept enough to be a project manager/contractor. It would be amazing to be my own boss. 



Mantras and Aphorisms:

* Measure twice; cut once.
* You can cut more pipe away, but you can't simply add more pipe.<<ref "1">>
* Double check your math at least once.
* If you don't have time to do it correctly the first time, where will you find the time to fix it?
* Better safe than sorry.

Questions worth asking:

* The Classic Unending Philosophical Tree: Why? Who? What? Where? When? How? 
** "Why?" is always the most important.
* What do you think I should do? What would you do? 
* How would you do it?
* Do you have a trick for this?
* Is there a question you think I should be asking you?

Socialism and Unions: 

<<<
The worker of the world has nothing to lose, but their chains, workers of the world unite. 

-Karl Marx
<<<
<<<
Clearly, apprenticeships are a win-win: They provide workers with sturdy rungs on that ladder of opportunity and employers with the skilled workers they need to grow their businesses. And yet in America, they've traditionally been an undervalued and underutilized tool in our nation's workforce development arsenal. 

-Thomas Perez
<<<
<<<
The trade union movement represents the organized economic power of the workers... It is in reality the most potent and the most direct social insurance the workers can establish. 

-Samuel Gompers 
<<<

-------------------------

<<footnotes "1" "Or vice versa">>
Pipefitting is worth mastering.<<ref "1">> They say you need a mythical 10,000 hours to become a master of something. I'm impatient, and I crave effectiveness and efficiency. I'm also very good at learning when I apply myself (when I'm motivated in the right way). Let's see if my training, natural talent, discipline, and this log allow me to beat the curve. This pipefitting log is meant to be a mastery acceleration tool and planning device. Keeping a journal or log allows us to be reflective, to plan, to find patterns, to adjust our trajectories, and to see how far we've come. 

!!! Months:

* [[2017.01 -- Pipefitting Log]]
* [[2017.02 -- Pipefitting Log]]
* [[2017.03 -- Pipefitting Log]]

!!! Current Month:

* [[2017.04.03 -- Pipefitting Log]]
* [[2017.04.04 -- Pipefitting Log]]

-----------------------------

<<footnotes "1" "Engage sunk cost fallacy confabulations!">>
!! Definitely:

* Self-monitor program to continually guard against letting my flame die 

* Watch pipefitter videos

* Study for exams over breaks, and push hard through the NCCER curriculum
** Don't forget to get the study points.

* Read my Union history books
** Prepare talking points (although, we know Randy hasn't actually read them thoroughly).

!! Maybe:

* [[Pipevan]]
Space is at a premium, so spend it wisely. I don't need walking space. I think that's a waste. I'm fine with being on my hands and knees, as long as I have a bed and a desk somewhere in the van. Every surface is a place for stuff. I want to be comfortable on my computer. I want food and drink. I don't want to be too hot or cold. It needs to be sustainable, safe, and cheap.

Bathrooms, Showers, etc.:

* Outside
* 24-hour businesses
* Fitness centers with month-by-month memberships

What am I storing?

* Clothes, shoes
* Basic toiletries
* Water
* Food
* Equipment, tools
* Computer equipment

Bedding, sitting:

* Consider a bed/couch combo. This requires real thought.
* Ideally, I'd have a couch during the day to play, read, write, think, etc.
* Ideally, I'd have as much space on as comfortable a mattress as possible to sleep on.

The Van's Reqs/Specs:

* Internet
** 4G/5G Phone Hotspot
** Long range wireless adapter
* Power
** Solar Panels (and entailed)
** Batteries
** Diesel
** Extension Cords
** Transformers
* Insulation, heat and cooling
** Windows
*** Minimal Size
*** Maximum tint
*** Reflective window covers with insulation
** Walls
*** High-efficiency thin wall insulation
*** Buy naturally insulated vehicle
** Outer shell
*** Consider outer insulation
*** Solar or bounce the light
* Security, Safety, etc.
** Hidden key or passworded entrance
** Personal protection
** A safe for valuables
** Standard health/med kit
* Shelves
** Both sides of the van should have shelves. I don't care if the side opens. The back and front are all I need.
** Prefer adjustable shelves, strongly. Needs changes, so should my storage.
** The ceiling is a place to store things. Under the bed is another. 
* Food and drink
** Slow-cooker
** Induction burner
** Basic cookware, cutlery, etc.
** Tiny, high-efficiency refrigerator
*** Happy to store 2 drinks and very minimal food. Doesn't need much at all.
* Trash
** Sealable is preferred.
* Extended Ceiling would be amazing.


Occupation: Craftsman

He needs to build things with his hands. It is not obvious that he will excel in academics. He has to do his best no matter what, since that's part of being a complete a human and achieving eudaimonia. I need to help him be as happy as he can be though. I think moving towards the practical trades will be his best option. 

I regret that I don't have the tools to teach him, but I can get him on his way as I acquire the assets and capital as we need to really practice. I want a shop for him to spend his time working in.

Let's say we did Pipefitting and Welding. I could teach him how. I'd be willing to pay him to learn this even. I want him to practice to the point that at (would apply to the union at 17, or he'd be working with me) that at 18 he could start making seriously good money, learning the socioeconomic and political landscape enough to see how he fits in, to see a path to success, and to see he's already well on his way. 
Occupation: Programming

She's got what it takes. She should be an excellent computer user. We'll work on social skills when we can. 

There are several programming languages I want my daughter to know and be familiar with. 

Know:

# Bash/Zsh + Python/Xonsh (control your computer)
# C (the father of performance)
# Golang (easy networking C/Python hybrid)
# ~WebASM (WASM, the future of ASM)
# Rust (safer, but still hard to write C; the only C-replacement contender; also has strong support for WASM)

Familiarity: 

# C++ (absurdly large language and ecosystem, a legacy nightmare, but necessary to know)
# Java (because it just won't die, asshole)
# Julia (easy, safer, scientific C)
# SQL, preferably ~PostgreSQL (legacy code and business use)
# OCaml (for CS)
# ~OpenCL

I want her to be able to create strong environments for using these tools. I want her to have wandered their landscapes some. There are some educational requirements to consider as well:

* I need her to continue learning math. It's a long climb. Push hard into calculus before ~OpenCL.
* Given her aptitude for proofs, we should continue straight into discreet mathematics after Better Explained.
* Afterwards, we should move into algorithms and data structures.

Build projects. Learn about requirements and specifications. Become someone who learns about the software development cycle.

Goals:

* Learn python/bash
** Learn classes.



.tc-drop-down dd
{
max-width:300px;
word-break: break;
white-space:normal;
padding :0;
padding-left: 5px;}

.tc-drop-down dl
{
padding: 5px;
}

tc-drop-down a {display:inline;padding:0}
I've disintegrated. The person who I was died. I am here to be a new person. It's the only way to unite myself, to make myself whole again. I am in the process of reconstituting my identity. Becoming a new person isn't easy. But, that is my task. It feels crazy because an internal struggle between two selves in me, with one trying to emerge as the victor: to be the only who decides what to do for my long-term programming and decision making processes.

I took the red pills, and now I have to see the world differently.

It's sounds like Dissociative Identity Disorder, but it's not. 
Accepting the plight of applied [[Postmodernism]] and magically being constructive with it. This seems like a metamodern move. It is a nihilism-tolerant variant of the existentialist revolt against nihilism. Sounds like a contradiction, but guess what? It's fucking nihilism, so that's okay.

Positive Nihilism is:

* the joy we find in nihilism.
* the constructive destruction of false interpretations of the world.
* a philosophical position that strips religion, as well as society, as a foundation for moral and existential values.
** Hence, at least for the West, nihilism is the state of metaphysics after the collapse of the Judeo-Christian memetic hold over Western society.
* a transitory state, not the end goal. 
** It is transitory in the sense that since there are no inherent, universal, unconditional goals, if you don't want nihilism, then you are free to accept something else.
** If nothing actually matters, if everything is absurd, then you don't contradict yourself when you choose to think anything matters, since being wrong in that context doesn't matter.
* an opportunity to reevaluate or transvaluate all values. 
** It's up to us whether or not we see it as philosophical suicide.
* a chance to love our fate and build a life wherein one would wish to live forever.
** The only meanings in life are the ones you give it.
** Since nothing intrinsincally valuable emerges from nihilism, the ultimate freedom of nihilism is not objectively a burden.
* a memetic Ring of Gyges transporting us into a meaningless experience machine; it is the ultimate test of who we really are.

Feel free to be moral. Yes, you are the arbiter of morality for yourself. You are autonomous (even if we aren't free). We give ourselves laws, but we aren't morally responsible. That's what a computer does. It gives itself laws to follow (that's what each line in a program does in the CPU). You are just a computer. Hence: nihilism. But, positive nihilism obviously shows us that we are free to continue computing as moral beings, even if morality isn't objective. Feel free to be moral. Be as moral as you think you can be. Why not? What's stopping you? Nothing. You're a nihilist. Be moral because you really want to, even when you don't have to. Can you come up with a better reason than "want to"? Can you come up with anymore noble than that shit? You are wearing [[The Ring of h0p3]]. 

<<<
[[RPIN]]: Neo-Kantians are clearly in a kind of cult/religion; you virtue signal in Kantianism to make sure everyone agrees with you or should agree with you. This distorts the pursuit of truth though. It only buys you socially accepted beliefs about what is true. 
<<<

There is no reason a Kantian can't just take up Utilitarianism as their fundamental decision procedure. Perhaps the utility principle is the center of the CI. Why not? What justifies Utility? Everything underneath it that supports deontology.  Oh yeah, this is all up to me anyways. I'm just going to do my best and enjoy it. It's the stoic thing to do. Look at me, all practical in my theorizing.<<ref "1">>

Aphorisms, Humor, Rhetoric, Fallacies, and Arguments:

* What is the "manliest" way to kill yourself? By struggling through existence until you die from natural causes after a long life.
* Big deal, Jesus, so your dad created you to suffer and die, that's what all the rest of us are doing here too.
* Stand in the ashes of a trillion dead souls and ask the ghosts if honor matters.
* Every human life is something beautiful that is ultimately meaningless.
* Just because God is dead doesn't mean you should be.
* Just because "should" has no objective meaning doesn't mean you shouldn't give it meaning.
* Nobody exists on purpose, nobody belongs anywhere, and everybody's going to die.
* Nihilist's To-do-list: distract self until death. 
* I expect nothing, and I'm still let down.
* Even if your life is pointless, you still want your life to be meaningful, so go enjoy doing that. 
* What do you call someone who isn't a nihilist? A Denihilist (deny-alist)
* Why did the nihilist cross the road? It doesn't matter.
* Fuck it, it's just life.
* Hey Nihilist, what's the matter? Nothing.
* Embrace the void.
* Entropy tends to increase in a closed system. The closed system dies. This too shall pass.
* What is dead may never die.
* It's a joke. This is all a joke. Once you realize what a joke everything is, being a comedian is the only thing that makes sense.
* Every person dies alone.
* Nothing matters and we're all equally worthless.
* Nothing really mattress.
* Without nihilism, I would have nothing to live for.
* Without our meaningless hope, nihilism devalues, depresses, derealizes, depersonalizes, dissocates, and disintegrates us. 
* If Surd is true, then deductively everything follows. 
* Life is a sexually transmitted disease and the mortality rate is one hundred percent.

-----------------------

<<footnotes "1" "/pat-self-on-back">>

Life is hard when you do not allow yourself to have faith in anything.

Postmodernism is:

* a charitable revamp of ancient skepticism.
* Godzilla rampaging through the cardboard buildings of Modernist Tokyo.
* solipsism performed correctly.
* the deductive consequence of The Great Human Conversation's hermeneutic spiral away from Modernism.
* the inevitable and rigorous deconstruction of value and meaning from the assumption of value and meaning.
* the ultimate thought-terminator of metanarratives, hierarchies, categories, intrinsic value, transcendentalism, transculturalism, realism, foundationalism, rationality, justification, semantics, objectivity, agency, and perhaps philosophy in general.
* the undefeated skeptical anarchist of philosophy which corners us into doxastic oblivion and freezes us there.
* possibly an inescapable dialectical black hole.

From the outside, it looks like nihilism and relativism, which so obviously seem wrong to each of us because that would violate all of our assumptions. And, we "couldn't possibly be wrong about all of our assumptions," right? Ha. We are so quick to judge those who see the problem, who make us feel naked before the truth. We call them edgelords, angsty teenagers, nihilists, relativists, fools, etc. Our venom is wasted though. When we actually go to justify ourselves against steelmanned postmodernism, the constant and ever curious "why?" of the postmodernist philosopher child will inevitably cause our philosophical house of cards to crumble, resulting in an all devouring vortex of our reality maps.

There is a key trend in how I am dealing (failing) with postmodernism. I keep cycling between the transcendental ideal and redpilled pragmatism. However, what causes this oscillation? It is postmodern deconstruction which destroys the foundations of everything I'm trying to build. Ultimately, to find longterm self-unity, I must find an answer to postmodernism. 

Now, the response may be that oscillating between the ideal and practical is actually a form of A/B testing which helps us arrive closest to our destination. Hmm. Postmodernism, in this light, serves a greater purpose, a metamodern purpose. Metamodernism accepts our flaws and is all about helping us live with them. It is stoic and yet optimistic.
He's a childhood friend. After I started college (approx. the year he started high school), we had a falling out (an unfortunate habit/cycle of mine). Our lives diverged. By the time he started college, I had started a family and was teaching in a highschool. We've been on different tracks since then. I've always liked PR though. He is a genuinely good guy. My wife, [[k0sh3k]], has kept in touch with him through FB. I'm glad she has the sense to maintain social ties even when I can't or won't. 

PR and I used to watch DBZ together. He loved karate. PR has long loved performing arts (and everything that goes with it). He is intelligent and hardworking. I admire that about him.

It was always weird going to his house. His family was odd, but obviously wealthy. They were motivated by very different goals, and they saw the world very differently. His mother and father were intelligent, sociable people who grew up in a fairly poor area. They were influential in my life.

An accident PR's father endured mangled their lives in many ways. His father was the first drug abuser that I consciously realized was a drug abuser (the man had damned good reasons, imho). His father was a good father in many ways though (obviously, no one is perfect). Hilariously, rummaging through the top cabinet of his bathroom was also my first exposure to hardcore pornography (woot, woot!).<<ref "1">>

PR's mother is a savvy southern belle, a nurse who climbed social ladders effectively enough to paid like a doctor. I was too young to read her.

PR's sister was a popular girl, and will likely traverse a similar path as her mother's. 

Anywho, PR recently sent my wife and me a letter out of the blue. So, I'm going to respond on this wiki (and, obviously through the channel he contacted me by). Normally, I think it would be a bad idea to post what others have said to me in confidence. I feel comfortable doing so in this case though. He said:

<<<
Good evening. I hope this message finds you well. I come to you seeking advice and guidance from you and h0p3. Apparently a post election post where I said if you voted for trump don't talk to me has offended family and now they feel alienated form me. My dad called me today to tell me all this. Eventually he told me that I should come home and smooth things over and that I should be careful what I post on Facebook should I offend said family members. Basically I need help getting through to them that they're wrong without screaming, "YOU'RE WRONG". And I ask you and h0p3 because I know you guys are strong in faith AND politically aware. I don't need a response right away. And I know this conversation that could take a lot of time. But any help would be much appreciated. Thank you.
<<<

This is a sign of the times, no doubt. I can't tell you how many families I see being torn apart.<<ref "2">> I feel like the rift inside me is echoed in the world around me. 

Ugh. I feel like the blind leading the blind. I have multiple people in my life who somehow think I can help them, that I might have answers or advice. I'm a fraud and a fool. They obviously don't know the truth of how little I really know. That said, I may still be of use to my friend. 

My response (2017.01.16):

<<<
Hey PR, 

It's good to hear from you, even under sad circumstances. 

Sadly, your experience is happening around the country (and the world). It is a sign of the times. I hear whispers of civil war and allusions to 20th century fascism everywhere. I have no idea what is going to happen, but the conflict does seem to be escalating. In addition to a number of global problems, the poor and disenfranchised, minority communities, and the millenial generation face a serious threat, and Trump is only a symbol of it. We all feel lost, forgotten, and unheard. I wish I knew the answers, but I don't have any.

I feel like the blind leading the blind here. Full disclosure: I'm no longer a person of the faith, and I'm still working through a significant conflict about it in my family (as you might imagine). I don't have a right to tell you how to fix this. So, I might not be able to give you worthy advice, but I want you to know I'm here to listen if you need to talk.

Here's my best advice at the moment:

I think you may have to accept that you won't be able to change their minds. When it comes to persuasion, sometimes it just doesn't matter how right you are. That aphorism "you can't reason someone out of a position they didn't reason themselves into" is often true. It may be true in this case; the justification for their support of Trump may not be rooted in rationality. Many people listen with their hearts more than their minds (we are all, arguably, guilty of this from time to time). Thus, how you say something (rhetoric) is often more persuasive than what you said.

You have to lead by example. So, in your rationality: be kind and empathic. If you were rude to them, then apologize. Tell them you said it out of anger and fear (and between me and you, we have every right to be angry and fearful because we are fucked), and show them who you really are: an intelligent, good man who is frightened and disturbed by what's happening.

Remember that you have to be charitable in your interpretation of others. This is the golden rule. If you want them to hear you, then show them you can hear them. They have to see you are coming from a place of love in your disagreement. Put yourself in their shoes; try to imagine the fear (or perhaps hatred in some cases) that has caused them to support Trump.

Of course, it is part of being friends and family that you get to "be yourself" in important ways, and they should know that you disapprove of Trump. Civility is the minimum, but your goal is to kill'em with kindness. Show them the grass is greener on your side of the fence. 

I think only after they see that you really mean the best, that you aren't lashing out, that you aren't "otherising" them, that you genuinely love them, that then and only then will they be able to hear you. You have to open their hearts with the right emotional connection before you can convince their minds with logical argumentation.

So...is this going to work? I can't guarantee that. It really may not. I think this is your best chance though.

Finally, I'm sorry we haven't talked in a long time. That's my fault. I'm a reclusive person in some ways, and I've disliked FB as a platform since college. That doesn't excuse my not staying in touch with you. You can reach me at:

*XXX@XXX.XXX
*XXX.XXX.XXXX
*XMPP: h0p3@dukgo.com
*Tox: FDD7005639C618263AB2EEDAB974F7576C7C0DED6217EED9E9DC0344C622E72AEEF7055F8B4D

I've only been able to glean information about you through my wife and from rare encounters with your parents over the years. I hope we stay in touch.

Sincerely,

h0p3
<<<

Response:

<<<
Thank you h0p3. 

A sympathetic ear is actually really helps. Because yes I feel like I've been talking to a wall. My mom keeps saying I hurt their feelings and I need to apologize, which I do, the tone of my words was reprehensible, but like you said it came out of fear and anger. I'm more than willing to talk but the one cousin who has replied said he doesn't want to do there's that. I'll keep your words in the back of my head moving forward and try to be more empathetic towards their feelings. Thank you again! 

PR
<<<

---------------------------

<<footnotes "1" "I have family members who do not understand the nature and concept of pornography, nor how it relates to their humanity and faith. Later in her life, my grandmother, being the evangelical maverick she was, didn't care nearly as much about pornography or whether or not her husband was turned on by other women as one might have predicted. She saw through it. She knew what really mattered. I think she took the good half of the redpill sometimes. She understood human nature better than her faith would have allowed in many cases.">>

<<footnotes "2" "Shit's fucked, yo!...Something, something...Nazi Germany (drop your dank memes here). We are a world in crisis; we are families in crisis; we are individuals in crisis.">>
h0p3pwiki.exe is a project now. For now, let's just make it a Xonsh or Python script (we can alias or /bin path it) that does it all. You're writing useful software. What counts as useful? You'll know it when you see it. You will begin to see how to write useful software by writing software for me. You'll see how it achieves important goals for me, and then you'll start to realize that you have things you want to write for yourself. When that time comes, you'll program for yourself. You're going to write software for my wiki until you figure out what you want to write for yourself of similar difficulty level and in the same topic (which is Bash/Python based).

I think I need a tool that can search through my archive daily snapshot backup (find it on [[Ways to Connect to this Wiki]]). I need to be able to type it in command line, and it pops up with the answers I want. 

Here's an example search I have in mind:

Right now, I'd like to be able to show the date ranges of important wiki-pages that I want to archive or in some way label as being from a specific time period. For example, I want [[Self]] to be a huge wiki-page. I think I should go back through my archive and figure out when articles were first really germinated, then I can datestamp it. I can see that it is a matter of progress. Maybe not everything in the wiki needs that feel. Plenty do not. I like having ones that don't have timestamps. But, I also need some that have timestamps desperately. Help me get timestamps. 

I can imagine wanting to make lots of different kinds of searches. Make it easy on me. I want to add your script to my system. I want to type:

```
h0p3@m10:~$ h0p3wiki -search foobar
```
It should return a list of dates, how often it was mentioned, etc. I want to be able to trace memes in my wiki.

Maybe there can be date ranges I can add. Maybe this is a bunch of different regex searches of the .html file. Whatever it is, I want you to make it absurdly simple for me. We can add use cases as time goes on. 

Also, that reminds me on your current project, I would love to be able to call it like 

```
h0p3@m10:~$ h0p3wiki -recentscript  
```

I'm literally going to add it to aliases and use it as a personal tool. Don't root me! =)
I must be wise. I have much speculative and theoretical reason (I am bloated, self-contradictory, ununified in this). I do not have the means to practical reason even. It is practical to resolve the theoretical to some extent.
So, I have the ideals (or as good as I'm going to get). Let's apply them, however, contradictory they may be. I must do my best.

* My children must learn where they stand, who they are, why, how, etc.
** I mean this in every kind and degree. [[Know Thyself]]!
*** We really need to start with the basics: our physical location. They need to be adept at it. Know where you physically stand. Know where you mentally stand. Know where you politically stand. Know where you morally stand. Looping back, know the physics that make us who we are (do not be blind to it, that is useless faith). Wield faith that is worthwhile.''__//The only justifiable faith is hope alone. //__''
*** They need to see themselves inside of Heideggerian contexts, political maps, and 

* My children must see themselves as their ultimate project. 
* My children are my projects. They are extensions of who I am. That doesn't mean they lack autonomy. No, as my mother says: "There are two things you give your children, one is root, the other is wings."
Being practical means asking ourselves awful questions like: "Is there really room for one more?"

I see a lot of people who despise "theory" as a way to slip something into the dialectic. It is a weasel method. It is a trojan horse. I think a lot of people eschew theory in favor of practice because they think the theory doesn't match reality.

I think the same for a lot of instances of "pragmatism." I think it is a failure to recognize the theory behind their practice isn't coherent. That it doesn't work on logical grounds. 

Theory and Practice are two sides of the same coin. They are yin and yang. They are eternally fighting to help us reach the truth at the core of the coin. They are point and counterpoint. We must repeatedly implement them as A/B testing. They are the revolving doors we rotate through as a method of inquiry. 
This is both an ontic and epistemic problem. Of course, it creates many serious problems. It is part of the Gödellian gateway, the foundation problem, an infinigress or ab initio concern. At some point, at some layer, where the narrative rubber meets the road of reality, we realize the world is not intelligible by definition.
Where do we move from the 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page? Well, this wiki is organizationally bootstrapped and constructed piecemeal. It's not perfect, and it never will be. But, it can and will improve; we just need to push. We should aim to do the best we can. What is the ideal, and how do we achieve it as best we can? This page and the 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 page seem to be the next logical steps. What is this wiki's stack?

The 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 page is deeply interested in computing the contents of my life. Most of the work happens there. But, I need principles for prioritizing, weighing, and fundamental decision procedures. I need principles for those principles, and so on. One must push hard in this direction, however painful and difficult it may be. That's what this page is about. 

On this page, I'm laying down the law: the rules, strategies, methodologies, and principles of programming myself and using this wiki. Autonomy literally means self-legislating. That's exactly what I intend to do. 

I'm sure there are many collections of principles worth looking at. We should isolate them, categorize and organize them, analyze them, modify them, and synthesize them. Cleanliness, order, and conventions matter. If this wiki is an isomorphic mapping, and changes are bi-directional, then you should take the time to organize and structure it with the right principles. We must be existential computer scientists in our pursuit of homo sapien happiness, it's the only philosophically practical thing to do. 

I'd prefer to do minimal theoretical work on this page.<<ref "1">> I need to be as practical as I can be here, despite how existential and theoretical it really is. If the 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page is our existential anchor (a starting place to boot ourselves into the right mindset), and the 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 page deals in the practical computations of our life, then this page is the go-between, the guiding principles to the Projects page which emanate from the  🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page. Obviously, the Projects page must ultimately affect, as a kind of feedback loop, our guiding principles and even our 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page anchor. However, we need to be strongly and consistently convinced and motivated by our 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 work before we use lower-ordered content to feedback into, modify, or inform our foundational higher-ordered functions.<<ref "2">>

!!h0p3's Existential Axioms and Fundamental Principles:

* Be [[h0p3]]!
** Have hope. Believe you can succeed. 
** It's a spark of reason with enormous emotional force behind it.
** Don't let your flame die out. Protect it. 

* [[Do your best]]
** Be wise!
** Don't give up! Don't be akratic!
** Work hard!

* [[Know Thyself]]
** Be stoic. Find the mistakes in yourself. Own it. Forgive yourself. Solve it. Find the best move, and apply it. Rinse and repeat.

* [[Virtue is Knowledge]]
** Do your best (be rational), and have a good attitude (be empathic).
** Use the [[Slowmind]] and [[Fastmind]] in the right ways, at the right time, and so on. i.e. Be excellent. Be virtuous at a practice. What practice? The practice of making myself happy, of becoming eudaimonic. Be moral in the right way, be the right kind of renaissance man, be a eudaimonic lifehacker, etc..

* [[Have a Good Attitude]]
** Be happy while being moral (goodluck!).
** Balance yourself through reason.
** Consider the contradictions in yourself, but learn to be okay with them and/or fix them when you can. 
** When all else fails, rely upon stoicism, empathy, and hope. 

* [[Empathize with yourself]]
** And, hence, empathize with others.
** Be honest and open about who you are.
** Argue, charitably, with yourself.

* [[Program yourself]]
** Understand the best patterns necessary for positively adjusting your reasoning behaviors. 
** Be practical and idealistic. Weld it together, yo!
** Actually engage in the practice of sculpting yourself on this wiki by organizing it. 

* [[Be Happy!]]
** Train yourself to be a [[eudaimonic lifehacker]]. 
** Be the correct, worthy, rational, and self-accepting version of Jesus' Kantian Man. Tame Kant's whimsy, habituate him, teach him utilitarian virtue. Discipline yourself and be stoic. See the world for what it is, and understand your place in it. Accept your station, reasons to live, and do your best in life. 
** Lick the spoon, suck out the marrow, and squeeze out every drop of happiness you can. 
** Be utilitarian. 
** Seize the day and take calculated risks. Success requires failing in the right ways for the right reasons, etc.

!! Broad Structure of the Wiki

Remember that writing this wiki is like piloting a computer. You have to make it do what you want and need it to do. Oh, you're asking who is /root? I'm still figuring that one out. Let me guess: it's me, right?<<ref "3">>

* The 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 page is this wiki's bootloader, it is one of the few root-only write access areas. 
** Be wise with your root access.
** We can't really password ourselves out of it. We just have to trust ourselves. Yup. You're trusting trust. You're free to program yourself motherfucka'.
* The 🢔⦗[[Vault|The Vault of h0p3]]⦘🢖 page is perhaps like this wiki's /var/www/html. It's the Long-Term Project. In a sense, it is an end by-product of this wiki that I'm slowly rendering and creating content for each day (the final end and ultimate reason for this wiki being my happiness). Who I was just is part of who I am. My memories and broader narratives matter to me.<<ref "3">> 
* The 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 page is something like this wiki's /home/h0p3
* The 🢔⦗[[Connect|Ways to Connect to this Wiki]]⦘🢖 page allows me to share this work how I see fit. It's a set of networking instructions to reach this wiki.
* The 🢔⦗[[Verify|Cryptographic Verification]]⦘🢖 page enables people to hold me accountable and to have strong reasons to believe it is me speaking. 
* The 🢔⦗[[Contact]]⦘🢖 page enables people to get a hold of me in the right way.

!!General Wiki Principles

* One must periodically iron the wrinkles out of the wiki. Do a detailed comb through it. Be vicious with your own work. Edit and revise! Analyze and synthesize!
* Maximize the dimensionality of this wiki. 
** e.g. footnotes, tags, tiddlers/wikipages themselves, Titles, Bullet points, sentence-lists, etc. Hold in tension many domains of thought, and maximize your metativity.
* Maximize the way you appropriately capture "Who I Was, Who I Am, and Who I Will Be."
* Document your progress.
** Date of original posting
** Date of last modified
** Given meta-accountings for what you are doing. Find the structures and trends in your thought patterns.
* Apply a KIN or RPIN tag whenever we strongly suspect it belongs to them.
** If this is a tug of war between RPIN and KIN, then we should study our shape. Apply the Williams' Moral Weighing model, What percentage is RPIN of the wiki compared to KIN at any given time slice? Who is winning? That's where reason takes us friend. Love yourself. Accept who you are. Only then will your reason truly control how you shape yourself at a fundamental level in your [[Frankfurtian Feedback Alignment|2017.03.15 -- Frankfurtian Feedback Alignment]] of your FO-SO paired selves. 
* Every major Wiki-Directory of Directories can have some default directories
** /b/ -- Random -- The Playground of the Sandbox -- Seed
** Log
** Current Plan
** Planning
** Vault (highlights the overall conversation, it is meta about the log)
** etc.


!! Be the kind of person that:

* records aphorims. 
* looks for rules of thumb about himself and the world. 
* seeks patterns in thought and behavior. You need to have the most accurate picture of who we really are to make effective, world class, virtuous decisions about what to do. You are habituating virtue in yourself when you have the executive function to look at yourself and the world in a consistent, practical, and theoretical manner.


!!Structure of the 🢔⦗[[Projects|Projects on this Wiki]]⦘🢖 page:

* Hierarchical lists
** Alphabetically arranged unless you have a good reason (avoid the "weighing" problem; you're not there yet)
** Have links you will click on and use. 
*** Change it wisely and often.
*** Lose the dead weight, and reason about why the project failed.
** Keep it clean. 


!! Other Considerations

* The Unix guru philosophers of yore offer us this wisdom:<<ref "4">>
** Write programs that do one thing and do it well.
** Write programs to work together.
** Write programs to handle text streams, because that is a universal interface.
* The Bayesians have much to say.

---------------------------

<<footnotes "1" "Theory is everywhere. I love theory. I also can't afford to not set my existential tentpegs down. Consider this a pragmatic nomadic approach through the desert.">>

<<footnotes "2" "I'm sure it sounds weird to call the second-order mental states the foundational ones. Frankfurt was right though. Essentially, we must align our many ordered desires, beliefs, and mental states. We must create conformity between them. Ultimately, the higher-ordered must do the modifying and alignment. Thus, that is the seed and perhaps foundation of autonomy, if not the very heart of it.">>

<<footnotes "3" "Kant and Hume are calling to me. Fine. Be reasonable in your faith in your autonomy. Enjoy what you can of forcing yourself to believe you are free. You'll know you are free eventually; it won't bother you.">>

<<footnotes "4" "Yea, thou I walk the shadowpath of nihilism, I value them, thus they are valuable. Lol.">>

<<footnotes "5" "Of course, this aphoristic wisdom has been business-lingoified into doubetalk until it was utterly meaningless.">>
//See first: 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖 -- -- See also: [[Chronology of my Self-Dialectic: KIN & RPIN]]//

Welcome to the projects page. Here is where the practically ideal integrated hierarchy begins.<<ref "1">> If you aren't making paradigm shifts, you're doing it wrong! Shotgun approach, organize, and prune in order to find the way to happiness. Listen to yourself. 

* [[/b/ -- Random --  The Playground of the Sandbox -- Seed]]

* [[Art]] 

* [[Computing]] 

* [[Homeschooling]]
** [[Homeschooling 1uxb0x]]
** [[Homeschooling j3d1h]]
** [[Homeschooling Log]]

* [[h0p3's Log]]

* [[Money]]
** [[School Loans]]

* [[People]]
** [[Self]]
** [[Family Log]]
** [[Letters]]

* [[Philosophy]]
** [[Aphorisms, Common Sense, & One-Liners]]
** [[Metamodernism]]
** [[Realpolitik Speculation]]
** [[Redpilled Genetics & Memetics]] 

* [[Pipefitting]]
** [[Pipefitting Fundamental Mantras, Aphorisms, Questions, & Quotes]]
** [[Pipefitting Log]]
** [[Pipefitting To-do-list]]
** [[The Pipedream]]

* Planning Life in General
** [[By 2022]]
** [[Long-term Timelines]]
** [[New Year's Resolutions]]
** [[To-do-list]]
** [[Utilitarian Projects]]
** [[Weekly Structure]]

* Wiki
** [[lost+found]] 
** [[Principles of Programming Myself]]
** [[Tips for Using this Wiki]]
** [[Tiddlywiki]]
** [[Wiki To-do-list]]

------------------------------------

<<footnotes "1" "Not a great hierarchy, eh? Well, I have to start somewhere. Of course, Hubert Dreyfus was right to worry about the epistemic flattening effect of the internet (and even more he had no chance to foresee). I suspect this is far more than an Internet problem, but that we're encountering yet another face of the postmodern problem which we must escape, circumvent, adapt to, and at least partially solve. This is metamodernism.">>
This is my psychedelic trip-art video collection. To me, trippin' is a set, ritualistic kind of trance and journey for me. I have to get in the right headspace, mode, frame of mind, point of view, perspective, etc. I need to line up inside in a certain way for me to see the world from the trippin' perspective. Don't get me wrong, trippin', virtually by definition, requires taking sufficient quantities of drugs and practice. But, just because you are high doesn't mean you are trippin'. 



It is a fact that some of the most celebrated hallucinogens and dissociatives permanently alter your brain. You really do think about and see the world differently after taking them. I believe I'm highly susceptible to being malleable, plastic, and changeable while using most drugs. I don't think all the mental changes I experience are permanent, but some are. 

Psychedelics helped me empathize with myself again. It's why I started writing again. I'm programming myself by carefully using psychotropic substances and having a conversation with myself; it's definitely a dangerous path. But, we have to care about shaping who we are, and I required serious tools to be able to fix myself.

I enjoy watching my videos in a particular order. Perhaps I continue to relive the experience and see it from different angles or slowly add to it. In any case, I have a lot of fun. It isn't that important to me anymore, but once in a great while I like to look through it. I believe I've milked the majority of utility I'll get out of this. That said, others may find it useful and interesting.

[1] Opener

* Anthony Francisco Schepperd 
** The Music Scene: https://vimeo.com/12622016
** Two Against One: https://vimeo.com/33415528
** Heart Like a Rabbit: https://vimeo.com/65926401
** ~IllumSpheres 'Love Theme' Music Video: https://vimeo.com/78188682
** ~EyesDown (Machine Drum Remix) official video: https://vimeo.com/36571816
** Official video for 'C.U.R.E': https://vimeo.com/165509812
** The Offspring's 'Dividing by Zero' and 'Slim Pickens': https://www.youtube.com/watch?v=asDlYjJqzWE
** "Wail to God" Music Video: https://vimeo.com/6954357

* ~DyE ft. Egyptian Lover - She's Bad (Official Video): https://www.youtube.com/watch?v=WFuWPhlsyEI
* Gnucci - WORK!: https://www.youtube.com/watch?v=ZDlsIhcvpCs
* IRMA / Save me: https://vimeo.com/95946394
* [Official Video] Daft Punk - Pentatonix: https://www.youtube.com/watch?v=3MteSlpxCpo
* 'I FINK U FREEKY' by DIE ANTWOORD (Official): https://www.youtube.com/watch?v=8Uee_mcxvrw
* Pink Elephants Cottonmouth Remix Dubstep - LSD Music Video: http://www.metacafe.com/watch/6943306/pink_elephants_cottonmouth_remix_dubstep_lsd_music_video/

[2] World Bend

* Wild Child - Rillo Talk (OFFICIAL): https://www.youtube.com/watch?v=vPtvqouhfos
* Hooray For Earth - "True Loves" (Cereal Spiller Remix): https://www.youtube.com/watch?v=Mf6JCpJjdiY
* Time-lapse Mining from Internet Photos [SIGGRAPH 2015]: https://www.youtube.com/watch?t=201&v=wptzVm0tngc

* ~BioQuest Studios
** Slow-Life: https://vimeo.com/88829079
** The Hidden Life in Pond Water: https://vimeo.com/56012237

* LIQUID STRANGER - The Gargon (OFFICIAL VIDEO) from "Renegade Crusade EP": https://www.youtube.com/watch?v=xOYc1iXC1ww
* Deca - "Gabriel Ratchet": https://www.youtube.com/watch?t=136&v=jR4nOsAtPcg
* The Subways - My Heart Is Pumping To A Brand New Beat: https://vimeo.com/96609262
* Ori Toor - ANIMAL COLLECTIVE - "Lion in a Coma": https://www.youtube.com/watch?v=uawaDJ-b0_k

[3] Geometric, Fractal, and Traveling

* Ben Ridgway
** Cosmic Flower Unfolding: https://vimeo.com/102671169
** Tribocycle: https://vimeo.com/76771149
** Evolution and Improvisation: https://vimeo.com/68819309
** Cellular Circuitry: https://vimeo.com/68819309
** Continuum Infinitum (video loop): https://vimeo.com/41806282

* Android Jones
** Life Raft for a Death Trip: https://vimeo.com/93218648
** Tipper & Android Jones live at Infrasound 2013: https://vimeo.com/84506250
** Live Jive-Droid: https://vimeo.com/80707313
** Android Jones - LIB 2012 Portrait: https://vimeo.com/68006883
** Android Jones - Wildlife (Live): https://vimeo.com/68004359
** Android Jones - Self Portrait - November 11, 2011: https://vimeo.com/68002851
** Dharma Dragon - Android Jones - Boom Festival 2012: https://vimeo.com/63023423
** The Dream - Corel Screensaver: https://vimeo.com/31718281
** Hunab Ku: https://vimeo.com/137730140
** Fare Thee Well Chicago Art Timelapse: https://vimeo.com/133018401
** HANAHAUS Process: https://vimeo.com/122068083
** painting with Polygons: https://vimeo.com/122018938
** The Making of REFUGE time-lapse: https://vimeo.com/120124965
** NY through the eyes of an electromineralist time-lapse: https://vimeo.com/115055361
** Electric Love • Time Lapse: https://vimeo.com/109949064
** Burning Embrace: https://vimeo.com/105929646
** Mother of Trance Dragons: https://vimeo.com/105830356
** Wanderer Awakened: https://vimeo.com/99424652

* The Ultimate Trip: https://www.youtube.com/watch?v=-5hXxPrwf-A
* More Electric II: https://vimeo.com/81184745
* The-Drum - /BZE: https://www.youtube.com/watch?v=Ak93MY_q2Kw

[4] Narratives

* Devil's Tuning Fork: https://www.youtube.com/watch?v=_tKF_subEMA
* Louis Vuitton x Takashi Murakami Superflat First Love: https://vimeo.com/5198631
* Animation of DMT experience - Trippy Psychedelic Fractal Simulation (Terence Mckenna): https://www.youtube.com/watch?v=8veXhlhXBjQ
* Raw Data: https://vimeo.com/65535198
* Walt Disney's & Salvador Dali - Destino 2003: https://www.youtube.com/watch?v=1GFkN4deuZU&app=desktop
* Ori and the Blind Forest - Any% Speedrun - 59:07: https://www.youtube.com/watch?v=08dM0rOdJKc
* A Philosopher's Mind Trip: https://www.youtube.com/watch?t=112&v=MQ2rJC6pbGI
* Psychonauts Gameplay: https://www.youtube.com/watch?v=axw8rTXoKUo
* esoteric surreal short film: "THO-OG" (final cut): https://www.youtube.com/watch?t=395&v=y_gNPhE6R6g
* Gumshoe: https://vimeo.com/90199254
* “The Masterchef” a short film by Ritesh Batra: https://vimeo.com/91752741




[5] Faces

* Love & Theft: https://vimeo.com/16245334
* Eyez: https://www.youtube.com/watch?v=LJyke4BbGOU

[6] Silly

* TUNE YARDS / Water Fountain: https://vimeo.com/channels/staffpicks/93107965




I use this word a lot. I have a technical meaning for it which comes my graduate work in moral psychology. 

Psychopathy is the "choice" to not empathize. A person, P, is psychopathic towards X to the extent that P chooses not to empathize with X.

This is an incredibly broad definition. You may have learned about psychopathy from a TV show or hearing stories about serial killers. Those aren't accurate depictions of the neurological and moral issues at play though. Here's a scary fact: we all sit on the dark-triad spectrum. We are all, to some degree, psychopathic.

Note that autism and psychopathy are distinct. Autistic people lack the gutteral, faster-acting abilities to develop standard theories of mind. It is an impairment or at least a deviance in the activations of their right temporoparietal junction that prevents them from developing theories of mind in the ways that neurotypical humans do. Autistic people, therefore, often lack empathy in cases where neurotypicals do. The reason for this lack of empathy, however, is due to lacking a fitting theory of mind. One's mirror neurons cannot fire off, one cannot feel the pain of another, if one doesn't at least understand how the other person is thinking (having accurate beliefs about what the target believes, infers, desires, feels, etc.). Essentially, it wasn't a choice for the autistic person (although, there are definitely cases where autistic people can be psychopathic). Psychopathy, however, is very much about choosing not to empathize; they are capable of empathizing (seriously), they just don't. 

I see two kinds of psychopathy, direct and indirect.

Direct:

Choosing not to empathize. It is literally a switch in a psychopath's mind. Those further along the spectrum may be born with it, others conditioned (and some a bit in between). This is exactly what makes a psychopath so excellent in social situations, at manipulating, at being so charming, etc. They have the empathy skills and at times the inhuman objectivity (we are aliens to them, the other) to develop deep theories of our minds, make good inferences about our reactions, and to use us. 

Lower IQ psychopaths tend to be level 1 in the Positive Disintegration scale because they systematically and consistently aren't intelligent enough to recognize the need to empathize with themselves at all. Being able to plan for the future, to not be impulsive, to employ their frontal lobes at the right time in the right way, stems from their inability to develop the right kinds of intuitions and practices for empathizing with themselves in their Fastmind. 

Higher IQ psychopaths are called sociopaths. They are so high-functioning that they literally blend in. They appear so normal to us. They are smart about their egoistic selfish pursuits. They empathize with themselves to their benefit and no one else's (although, they capable of empathizing with their family [among others]; it depends on the degree to which they are psychopathic). They have learned when and where to turn the empathy switch on and off. My grandfather is clearly a highly psychopathic sociopath. 

Indirect:

Choosing not to become the kind of person who empathizes. This is very much related to [[Indirect doxastic voluntarism]]. This is  where Hanlon's Razor is wrong (and Socrates is right). Willful ignorance of theories of mind and habituating psychopathic dispositions are the core causes of indirect psychopathy. 

Finally, I should point out that "choice" is concerned with freedom (which I'm not sure anyone actually has). The entire issue may be moot in a way. Moral responsibility could easily be an illusion (again, this is legit moral psychology). 
DSM-5 defines PTSD as follows:

Criterion A (one required): The person was exposed to: death, threatened death, actual or threatened serious injury, or actual or threatened sexual violence, in the following way(s):

* Direct exposure
* Witnessing the trauma
* Learning that a relative or close friend was exposed to a trauma
* Indirect exposure to aversive details of the trauma, usually in the course of professional duties (e.g., first responders, medics)

Criterion B (one required): The traumatic event is persistently re-experienced, in the following way(s):

* Intrusive thoughts
* Nightmares
* Flashbacks
* Emotional distress after exposure to traumatic reminders
* Physical reactivity after exposure to traumatic reminders

Criterion C (one required): Avoidance of trauma-related stimuli after the trauma, in the following way(s):

* Trauma-related thoughts or feelings
* Trauma-related reminders

Criterion D (two required): Negative thoughts or feelings that began or worsened after the trauma, in the following way(s):

* Inability to recall key features of the trauma
* Overly negative thoughts and assumptions about oneself or the world
* Exaggerated blame of self or others for causing the trauma
* Negative affect
* Decreased interest in activities
* Feeling isolated
* Difficulty experiencing positive affect

Criterion E (two required): Trauma-related arousal and reactivity that began or worsened after the trauma, in the following way(s):

* Irritability or aggression
* Risky or destructive behavior
* Hypervigilance
* Heightened startle reaction
* Difficulty concentrating
* Difficulty sleeping

Criterion F (required): Symptoms last for more than 1 month.

Criterion G (required): Symptoms create distress or functional impairment (e.g., social, occupational).

Criterion H (required): Symptoms are not due to medication, substance use, or other illness.

Two specifications:

* Dissociative Specification. In addition to meeting criteria for diagnosis, an individual experiences high levels of either of the following in reaction to trauma-related stimuli:
** Depersonalization. experience of being an outside observer of or detached from oneself (e.g., feeling as if "this is not happening to me" or one were in a dream).
** Derealization: experience of unreality, distance, or distortion (e.g., "things are not real").
* Delayed Specification. Full diagnostic criteria are not met until at least six months after the trauma(s), although onset of symptoms may occur immediately.

------------------------------

My plain, visceral thought: anyone who has seriously and consistently contemplated suicide to escape pain has experienced real trauma. Call it PTSD or whatever you want. 

Let's walk through this list and see if I have PTSD:

''Criterion A ''

I've never been exposed to "death, threatened death, actual or threatened serious injury, or actual or threatened sexual violence" in any of their ways, from what I can tell. The 4th way in the criterion seems philosophically important to me (as well as the difference found between DSM-4 and DSM-5), since it demonstrates that the very definition of PTSD is becoming more inclusive and capturing a broader spectrum of people. I believe they are onto something there. Trauma is a broad concept, and I think it may include more things than death and violence. I think I fall on the PTSD spectrum. 

I did see terrible accidents in Thailand (some included children). While extremely painful and difficult to process (because it's truly fucked up), I don't think that has been the real or sole cause of my crisis. In a way, it was my plight to navigate these roads (I used a dirt-bike with street wheels for fat farang). I couldn't fully empathize with myself, the danger I was in, since it wasn't practical. 

As far as the images I've seen, jesus. I've been a 4chan user since college (around 2004, about a year after the site came online). I've seen some vile shit on the internet. Definitely traumatic. Enough to cause PTSD? I don't think so.

These experiences may have added to my problems, but I don't they are the core issues. My problem probably didn't crescendo and peak into PTSD territory until these past couple years. 

My hypothesis is that I decided I wanted to kill myself about two years ago. Some part of me threatened myself. It was a serious. Hating yourself, your life, and your world so much that you threaten yourself with harm may be a source of trauma. 

Further, I don't want to be enslaved by a God I don't believe in (as my tattoo, which literally says "Slave to the God," suggests). I also don't want to be enslaved by the ruling class. I'd prefer death to slavery. I think my belief that the world is coming to an [[end|The End of Humanity]] is also traumatic. I deeply believe people suck down to the core; I think they are fundamentally selfish. It has been a real loss of innocence for the gullible, autistic fool that is me.

Lastly, I take having been wrong about value, freedom, and purpose as something which has caused me to curl up into a defensive ball. It is hard to rationally accept the irrationality of our existence. As a friend of mine used to say, we're a "box of contradictions." I have a hard time living with that. My logical options are being sealed up, one by one. I feel like I'm trying to escape a rational hell using reason. Lol. Anyways. I do think I have serious trauma, enough to cause PTSD.

''Criterion B''

Intrusive thoughts, check. They are less common and far more controllable now! I have the power to dismiss it more effectively. I am so thankful.

Nightmares. What is a nightmare? Do I have dreams that I despise, that prevent me from having a good night of sleep? Yes, all the time. I have a very difficult time falling asleep, and my dreams often interrupt my sleep (makes it hard to want to go back to sleep).

What are flashbacks? Am I constantly reminded of past events where I humilitated myself (these aren't mere shower-thoughts moments) throughout the day? Yes. Do I relive what I have seen? Yes. Am I faced with the same existential questions hour after hour? Yes. Is there a single moment that I focus on? No. 

Does talking with my parents, or even the thought of talking with them (particularly when I find myself in a thoughtloop of engaging in hypothetical conversations with them) count as a reminder? I do get panic attacks (I've never had a heart attack, but it feels like what I imagine it would be to have one), although I've learned to control them more (and cannabis helps me swallow it).

''Criterion C''

I don't know. What counts as avoidance? Does finding myself unable to communicate with my parents (who I dearly love) count as avoidance of trauma-related stimuli? My job/location history might signify it, but it's actually fairly normal migration for a millenial and an autistic person.

''Criterion D''

Nuh-uh. No, I don't have overly negative thoughts and assumptions about oneself or the world. Lol. I hope I do. I need to be wrong about it.

Fuck, this criterion pegs me hard. The entire list.

''Criterion E''

Ditto. I don't know what to say. I fit the description, at least to some degree, of every condition. I feel sad and relieved when I see this list.

''Criterion F''

Check.

''Criterion G''

Check.

''Criterion H''

This one is less clear. I have gone for months without substance use (because I was afraid that was the problem), but still experienced the negative effects, suicidal ideation, etc. Further, maybe autism, depression, and anxiety explain the symptoms better.

''Dissociative Specification''

I do not think I fit this one. It all seems very real to me. I feel a split in myself, but I see myself as possessing both intuition networks.

''Delayed Specification''

I might fit this one. As I said, this issue has crescendoed. 



Abandon hope all ye who enter here. The humblest absurdities, the clearest unintelligibilities, the simplest mindfucks will make you want to kys. Some of them are dark, some of them are anti-humor, and some of them are just boringly "ironic" one-liners that force the audience to question the validity and value of their own existence. I need to keep puns out of the other collections; it's an infection control problem. Also, this is the most sadistic part of this wiki, by a long shot. I need a pun here.



<<<
I burned my Hawaiian pizza today; I should of cooked it on aloha temperature.
<<<
<<<
I hate when people talk behind my back. They discussed me.
<<<
<<<
I lost my watch at a party once. Saw a guy stepping on it while sexually harassing a girl. I walked up to the dude, punched him straight in the nose. No one does that to a girl...not on my watch.
<<<
<<<
Like most people my age I'm 20 years old.
<<<
<<<
I invented a new word today: Plagiarism.
<<<
<<<
When I found out that my microwave wasn't waterproof, I was shocked.
<<<
<<<
As I said before, I never repeat myself.

Words cannot express how limited my vocabulary is.
<<<
<<<
The more I hear about inverse proportionality the less I like it.

a farmer was in the field with his cows and counted 196 of them, but when he rounded them up he had 200 
<<<
<<<
Apparently, I snore so loudly that it scares everyone in the car that I'm driving.
<<<
<<<
Abortion really brings out the kid in you.

Pro-Life Tip: Don't get an Abortion.
<<<
<<<
I was talking to a North-African girl for hours, we just clicked.
<<<
<<<
Lif is too short.

A missing letter can make a word of difference.


There's no "I" in denial.
<<<
<<<
I don't get why my girlfriend always starts conversations with "Are you even listening to me?!"
<<<
<<<
People are making end of the world jokes like there's no tomorrow.
<<<
<<<
I know she ate a worm but we are not here to debate 'de bait Deb ate.
<<<
<<<
I was voted "Most Likely to Rig a School Election."
<<<
<<<
I'm an archaeologist and my life is in ruins.
<<<
<<<
6:30 is the best time on a clock, hands down.
<<<
<<<
Parallel lines have so much in common, it's a shame they'll never meet.
<<<
<<<
My poor knowledge of Greek mythology has always been my Achilles' elbow.
<<<
<<<
The invention of the shovel was groundbreaking, but the invention of the broom swept the nation.

No matter which way you slice it, the invention of baking takes the cake.

The invention of the pin was on point.

The invention of the clock was right on time.

The invention of corduroy pillowcases really made headlines.

The invention of the telephone was a good call.

The invention of the doorknob really opened some doors.

It was the invention of the wheel that really got things rolling.

The knife was cutting edge technology.
<<<
<<<
I go to the gym so infrequently I call it the James.
<<<
<<<
I didn't know what to wear to my Premature Ejaculation Society meeting, so I just came in my pants.

I came into a lot of money recently...which is weird, because I usually use a paper towel.
<<<
<<<
If I had a dollar for every time a girl told me I was unattractive, they'd eventually find me attractive.

Women can't get enough of my small penis.

My wife told me: ‘Sex is better on holiday.’ That wasn’t a very nice postcard to receive.
<<<
<<<
Every time you ingest food coloring, you dye a little inside.
<<<
It's reasonable to be reasonable. Circularity problem. We take reason to be an article of faith. That reason rules ethics is a matter of faith. If it doesn't stand up to reason, then we shouldn't see it as ethical. Reason is the best guide for knowing the world, what we ought to do, who we are, etc. Reason should rule each of us. Kant was right about defining people as reasonable. He was wrong to think that people are reasonable. He was wrong to think that much of who we are is reasonable. We are not the "ends" we are meant to be. The reasonable part of us is the part we should shape ourselves to be. The reasonable part is our "true self" our authentic identity (matter of faith). We are disfigured and poorly integrated and poorly constituted selves. We must guard our reasonable self and banish the others. Reason is often the source of happiness (making good utility calculations), but reason can also make us said (e.g. understanding human nature, or realizing the world is ending). 

Reason destroys faith. Faith is the unjustified, basic, foundational assumptions we take up (they can be complex sentences, but we just assume those sentences are true without any further explanation or justification). Reason tests faith. Reasons inspects it, criticizes it, interprets it, appreciates it, redeems it, gives us explanations where we thought there weren't or shows there weren't reasons when we might have thought there were. 
For better or worse, we are not typical people. We spend a lot of time and energy shaping ourselves. We care about our desires and beliefs, and we often have the balls to act on them.<<ref "1">>

We have deeply systematic views of ourselves and the world around us. Our subjectively generated reality maps have differences, but we obviously agree on many facts together. From a mile-high view, our reality maps share structural similarities. I believe our many regions of our reality maps tend to be intricate, richly detailed, broad and deep, exceedingly existential, organized with a high degree of relevance and value-seeking, and structured with an internal coherence and logical consistency which average people do not have. 

I have failed to convey this point many times (and I may be failing again). I think our reality maps, including our beliefs, desires, choices, attitudes, and modes toward the world, really do define and constitute much of who we are in important ways, especially since we have such intense innerlives.

Being a well-constituted, integrated self.

In an inescapably circular way, in exercising our reality maps, I believe we prize our reality maps. That is because we have sacrificed for them, because we need them, because we know how high the stakes are, because we know how important they are to achieving the ends we have embedded in them. If our reality maps are part of what constitutes who we are, then zealously cultivating our maps is a supreme demonstration of how much we care about our identities and lives. Essentially, our reality maps are well-motivated, strongly justified by our evidence, and (in a way, unfortunately) complex enough that it is difficult to convey to and share with others. That is to say, you have distinct, thoughtful points of view. Even if I don't agree with you, I appreciate your reality maps. Much of who you are makes sense to me. 


I have had this schism in my reality map. The world has crumbled around me (and I with it). I value my experiences and understanding of Christianity. They allow me to interpret the world in important ways.



Let us be clear, this is not a denial of objective reality. It is a Kantian recognition of our inability to directly access it though (sometimes thought of as the unknowable “thing in itself”). We have evolved to be creatures with innate categories which dictate how we organize and think about the world around us; again, we are innately biased at this genetic level. Sometimes we recognize it as common sense (color-blindless highlights that fact so clearly for me), but other times it can be difficult to accept.

Reality Map Collection:

* Academic Philosophers:
** Plato
** Aristotle
** Heidegger
** Kant
* Big Lebowski

----------------------------------------

<<footnotes "1" "I think of us as systematic contrarians, skeptics, true believers, and people willing to go against the grain (INTJ). Ah, but of course, we must step back in humility. As Mom has pointed out to me many times, everyone thinks they are the exception. But, it is a fact that there are exceptions on the epistemic bell-curve. To some degree, I think we are exceptional. We are weird and alien to this world. Let's own it and use it to our advantage.">> 
//Where I hope to channel Michel de Nostredame, Niccolò Machiavelli, Leo Strauss, Fyodor Dostoyevsky, and George Orwell, the political theorists we need but don't deserve.<<ref "1">> 
//

Here I tell you how I //really// feel about Humanity. I say what I mean, and I mean what I say. I don't hold back any punches.

Rules of [[Realpolitik Speculation]]:

# Don't talk about [[Realpolitik Speculation]].
# ....Don't talk about [[Realpolitik Speculation]].<<ref "2">>
# Empathize with humanity, but stop attempting to empathize with every individual human.

[[Realpolitik Speculation]] does not require me to empathize with my enemies.  It's not practical. Here I tell my enemies how much I hate them. To my enemies:

//If you were rational enough, you would hate yourselves too.//<<ref "3">> Here I watch the world burn as I laugh and wail. I seek answers, and you clearly don't have them. Your ignorance is only surpassed by your hypocrisy.<<ref "4">> For that, I have written a love-poem, [[Realpolitik Speculation: A Poem]], just for you, dearest ones.

/ahem && /adjust(monacle)

Alright, now that we're past the preliminary fuck-you's, I'm going to answer one of the greatest questions in The Great Conversation of Humanity: Who are we? Allow me to hospitably offer you the Fundamental Redpill:

__//Humans are irredeemably selfish, egoistic creatures; yes, even you and me//__.

I didn't stutter, so breathe it in. I'm doing you a favor (yes, you're welcome). So, stick it in your pocket. Mull it around. Take it to the Nth degree. Can you accept it? The truth can be very violent; it wreaks havoc on our reality maps. I empathize with the pain of taking the redpills of hard realism. Fundamental truths are often painfully acquired. 

The cost of consuming the redpill is the loss of innocence. So, I must apologize up front about that fact and for my subsequent behavior: I'm going to demonstrate this elementary fact of human nature to you over and over again. We are reducible to piles of physical atoms from which complex genetic and memetic structures emerge and evolve in the world. No one can give a reason for why these emergences are valuable but ourselves, and that means that life is, objectively-speaking, meaningless. I warn you: you can run, but you can't hide from the truth. 

Every great existential philosopher claims to have destroyed metaphysics and the objectivity of the transcendental. Here is mine. And, what is leftover isn't pretty. The world becomes coherently self-consistent, predictable, and lucidly intelligible when you accept who we really are: we're selfish creatures, every last one of us.<<ref "5">>

Like many before me who wielded the Sword of Truth, I am going to slay an entire ecosystem of memetic networks that have been passed down and injected into the masses through myths, legends, lies, virtue-theoretically viciously trained Fastminds, and ultimately rhetoric. I am doing philosphy here for you. I act as your Statesman in this domain. I seek to pragmatically solve the philosophipolitical equations about humanity for the sake of humanity.<<ref "6">>

I'm here to my swallow my weekly Redpill, drink deeply of the Water of Life, and gorge myself on the fruits of the Tree of Knowledge.<<ref "7">> I hope to have the integrity to peer behind the veil of reality and shrewdly interpret the ugly ponerological facts and implications of social, political, technological, and economic semiotics. 

I say nothing either new or sane-sounding here (take your pick), but that doesn't make it wrong. If you are honest with yourself, sometimes you're not going to understand what I said (and you should honestly take the time to think very carefully about that). Sometimes you are going to realize that I "nailed it" (and probably feel a bit hopeless). Other times you may shake-your-head in profound disbelief, find yourself deeply angry with me, or perhaps even feel shocked in disgust. 

Here is my advice: if you think I nailed it in any of these articles, then take the time to consider the possibility that I've "nailed it" in those you disagree with. Be absurdly charitable. Consider the possibility that you have been systematically wrong about everything, and that I have clearer vision through the fog than you. Pretend I am God in your interpretation.<<ref "8">> I hope that's not asking too much. 

Do you hate me yet? Well. I'm sorry. I can only ask you to think about it again. I'll keep frantically pointing you to it. I hope you will eventually see it too. Let us ponder those immortal words:

<<<
Chaos isn’t a pit. //Chaos is a ladder//. Many who try to climb it fail and never get to try again. The fall breaks them. And some are given a chance to climb, but they refuse. They cling to the realm or the gods or love. Illusions. Only the ladder is real. The climb is all there is.

–Petyr "Little Finger" Baelish, Game of Thrones 
<<<

It's time to pay attention. Here I chronicle and prophesy. Whether or not you take this to be a political work in itself is up to you.<<ref "9">> As always, //caveat emptor//. This is the interwebs: buckle-up and ready your eyebleach. So, here, take your medicine:

!! Vault:

* [[2017.01 -- Realpolitik Speculation]]
* [[2017.02 -- Realpolitik Speculation]]
* [[2017.03 -- Realpolitik Speculation]]

!!Current Month:

* [[2017.04.02 -- Brave New Experience Machine]]
* [[2017.04.02 -- The Divorce of Productivity and Compensation]]

!!Idea Bag:

* [[2017.02.16 -- Statecraft and The Statesman]]
* [[2017.02.18 -- Idolizing the Hyperclass]]
* [[2017.02.19 -- Celebrity Culture]]
* [[2017.03.09 -- The American Medical-Industrial Complex]]
* [[2017.03.09 -- Postmodern Slavery]]
* [[2017.03.09 -- Rent-Seeking]]
* [[2017.03.11 -- Inheritance and Familial Power Accumulation]]
* [[2017.03.23 -- Putin's Clown Genius Puppet]]

--------------------------


<<footnotes "1" "Let's be clear: I think virtually or absolutely no one else cares what I have to say here (which is probably a good thing). I care though. And, you know what? It's okay that I care what I think.">>

<<footnotes "2" "Except on higher-ordered pages, such as 🢔⦗[[Focus|Current Focus of Projects on this Wiki]]⦘🢖.">>

<<footnotes "3" "Please understand this as a literary device. It's a powerful tool for venting and doing the work of this wiki. Remember, I'm talking to myself on this wiki. I hope to be wise here. I hope to find the answers. I must accept what I believe. It is the only way I can be happy. To those whom I might offend, I will say this once: I love the RL people that read this. If you are literally reading h0p3's wiki; you aren't my enemy. You care about what I think. I owe you the same. You're letting me unload and decompress. You are kind. I can't thank you enough. Seriously, I love you.">>

<<footnotes "4" "I'd like to take the time to explicitly denounce Hanlon's Razor. You malicious fools!">>

<<footnotes "5" "I know what I am. Do you know what you are?">>

<<footnotes "6" "Yup, even that exception you are trying to come up with. Oh, Altrusim and Cooperation? Yeah. No matter how much you try to argue against it, the roots of their existence, the core of why it is that we engage in those benevolent practices, the fundamental nature of these objects, is selfishness on a post-modernist background. Oh, I grant that the expressions of selfishness are deeply complex in our world (and positively deceptive in so many ways), but this is not an ad hoc argument (far from it; it is incredibly predictive). Selfishness is the cause and ultimate explanation for our behavior and beliefs (for how we compute). Empathy, love, altruism, and cooperation are merely the means to the ends of Human Selfishness. It's written into us by nature itself. Survival of Fittest is a core principle of nature, it cannot be doubted. But, your moral delusions surely can. Make what you wish of nihilism. Find meaning for yourself. Be wise in your selection of ethical and metaethical thought.">>

<<footnotes "7" "I'm not gonna' half-ass the pursuit of the ugly truth. I'm going to whole-ass it. Admitting to ourselves who we really are is the ultimate expression of courage.">>

<<footnotes "8" "I'm trying to help you. I'm obviously not God or a god, or whatever. I'm just a human, and we both know that. You should still strive to be maximally charitable in your interpretation of my words though.">>

<<footnotes "9" "What isn't realpolitikal? I wouldn't trust me either. Who can you trust, and why? I'm an idealogue. No matter where you stand, you can accuse me of generating the Black propaganda of covert psychological operations, supporting the anti-Christ, or some other absurd accusation. There is no winning. You are in a trusting trust position, if not one of needing to exercise serious charity.">>
```
Here I am human.

Here I righteously cast the first stone the builder refused at you,
arrogantly judge the world as though I'm perfect,
hypercynically assume the worst about people,
and sanctimoniously virtue signal.

Here I act the misanthropic fool and insufferable know-it-all hate-machine,
virulently attack and demonize everyone and everything,
psychopathically gaslight and gleefully disregard human dignity,
desperately confabulate to justify my narcissism and immoral behavior,
delusionally nurture illusions of Machiavellian grandeur,
and inhumanely dehumanize humanity.

Here I otherise and contextomize those who disagree with me,
uncharitably strawman and ad hominem my opponents,
maliciously engage in self-serving idealogical framing,
McCarthyistically hunt for the witches among us,
raid, brigade, circlejerk, censor, shun, persecute, discriminate, 
and manufacture hate-culture.

Here I Drink-the-Kool-Aid,
willfully ignore reality and rational argumentation,
paranoically join my tribes' echo chambers,
enslave myself to my filter-bubbles,
and cover my ears while repeatedly screaming "I can't hear you!"

Here I gnostically Cassandralize,
eisogetically inject and interpolate my adhocish heretical theories into your more "objective" narrative,
double-talk and dog-whistle in the language of doublespeak,
incoherently contradict myself with open hostility,
and whisper the wall-of-text shibboleths of conspiratorial disciples.

Here I cyberbalkanize the splinternet,
viciously disinform myself and humanity,
vitriolically pontificate and trollspam,
fabricate hyperbolic hot takes and propagandistic clickbait,
spew copypasta and freshly forced maymay's,
and drop post-truth-bombs and irresponsibly speculate.

Here I smugly ramble and shitpost by decorating spurious wordlists,
all for "make benefit of Kazakhstan," 
for the lulz, kappas, and triggers, 
and because I love the smell of my own farts.

Call me crazy if you must; 
I will wear it like armor. 
Go ahead and get your hissy-fit of disapproval out of the way: 
cuck this, kek that, tut-tut, and tsk tsk.
 
Belittle and dismiss me; 
that's all I'm serving to you as well. 
Feel free to claim I both am unhelpfully critical and fail to offer any constructive advice; 
I'm sure it justifies your blindness, lack of idealism, and rationalizations. 

You hypocrite! Liar! Sociopath! 
I've learned not to trust your motives. 
I know what you really mean by your words and actions. 
You are no authority, visionary, savior, or saint;
you don't even have a leg of decency to stand on. 
I'm certain of it. 

I see you for what you really are. 
You are pure fucking evil incarnate; 
you are the paragon of scum; 
you're a monster; 
you are my mortal enemy. 
I dream of slaying you. 

Everyone thinks they are right or justified, 
but you aren't, bucko. 
In theory, people can change, 
but in practice, you won't. 
You are the problem. 

Essentially, I literally hate your guts, 
so please do me a favor and empathize with me by killing yourself, slowly. 
I hope you suffer eternally because you deserve it, sinner.
In case you don't understand what I'm saying, fucktard: 
we aren't friends.
```

* Redpills are descriptive about the world, but not prescriptive about what to do about those facts.
//'Redpilled' is a swear word. But, it doesn't have to mean psychopathic; it can mean being practical, stoic, intellectually honest, and pursuing realism. It need not offer moral prescription outside of epistemic normativity. This is ponerology; empathizing with humans means deeply understanding their selfishness while realizing it naturally arises from evolutionary processes.//

* [[Redpilled Aphorisms]]

Admittedly, this section has enormous cross-section with [[Realpolitik Speculation]]. I think it is different though. If you really want to answer the question: "Why is there evil?" you must pursue it like this. 

Here I examine that which [[Social Darwinism]], studied correctly, helps us understand. Our hardware is genetic and the software memetic, and both are highly affected by our environments.<<ref "1">> The following articles will therefore be concerned with instrumental redpills and descriptive (not prescriptive!) practical reasoning about fundamental homo sapien mental states and patterns, including: social rules of thumb, human tropes, economics, psychographics, psychometrics, memetic description, psychological hacks, social engineering, manipulation, influence, conditioning, training, and memetic programming. 

Yes, here we learn how the sausage is made. The goal is to become an adept student of human nature, come to grips with living computation, and to appreciate memes and memers for who and what we really are. Effective utilitarians are already here. Non-realist, non-cognitive, or egoistic Virtue Theory must openly admit it. We pull Kant screaming and kicking into here. But, even he must obey the call of Reason by definition.

* [[2017.02.10 -- Rules of Thumb]]
* [[2017.02.14 -- Memetic and Genetic Species]]
* [[2017.02.17 -- Human Tropes]]
* [[2017.02.28 -- Christian Memetics]]
* [[2017.03.15 -- Pornography and Prostitution]]
* [[2017.03.15 -- Frankfurtian Feedback Alignment]]
* [[2017.03.15 -- Idiocracy]]
* [[2017.03.22 -- Sex Objects and Empathy]]
* [[2017.03.24 -- Eugenics]]

Ideabag:

* [[2017.03.15 -- Transhumanism]]

----------------

<<footnotes "1" "I am aware that I've deeply oversimplified biological computation here. Go with the flow. We'll get there.">>
Reputation is a bitch, ain't it?

It's incredibly valuable in some contexts, and the opposite of empathy in others.
//I dedicate this page to my brothers. I wish I could take away their pain. I wish I could give them an answer. I wish I could give their lives meaning and hope. We cower together. Bind us together. I love you both.//

I have long been on a mission to understand the heart of Christianity. How can I practice what is right if I don't know what is right? 

<<<
[[RPIN]]: It's more fun if you say this next part through clenched teeth like a gritty Mel Gibson Highlander, pointing his sword at his mortal enemy, screaming out: 

"Praxis and Doxa!!!! I swear upon my very being that I will weld you fucking assholes together if it the last thing I ever do GOD DAMNIT!!!! I categorically exist for the sole purpose of being morally justified."

Doesn't that give you the warm fuzzies? Isn't that exactly what God wants from each of us? The reason to follow God is because it is the right thing to do. Thus, //being moral// is the most fundamental principle. But, when we follow that principle, the ZEROTH COMMANDMENT, standard Christianity falls apart.
<<<

Yeah. I was screwed from the very beginning (and I still may be, but I have to try, eh?). 

I needed to justify my faith; it is what the truly faithful must do. Wrestling with God is fundamental to faith. Believe me, my charity has been immense (sane people who value themselves at all would have turned away from Christianity eons before I did). I have charitably stripped this religion down to its bare core as best I could. I disentangled and confabulated my way through more inconsistent strands, hypocrisies, paradoxes, and insanities of Christianity than anyone I've ever met. In my desperate, existential, obsessive, Straussian deconstruction of Christianity, I have repeatedly and begrudgingly, with weeping and gnashing of teeth, given up what was once sacrosanct to me, bit by bit,  in order  to preserve my faith. 

<<<
[[RPIN]]: Ha, we were a whore for God. That non-existent bastard sure fucked us. No, no, wait...wait...it's coming to me...It wasn't //God //that fucked us: it was// the history of the stupidity of humanity, including yourself// that fucked us. So...good job.
<<<

Without going through the grueling details of the chronology, I came to a point where I simultaneously identified as Christian even while one-by-one accepting the losses of: prayer, miracles, heaven and hell, the spiritual dimension, the existence of the Holy Spirit, //Sola scriptura//, //Sola gratia//, //Solus Christus//, the divinity of Christ,  //Soli Deo gloria//, and even Theism (in favor of a Patricentric Transcendental Deism).<<ref "1">>

<<<
[[RPIN]]: The untestable hypothesis (to put it as charitably as possible) of God's transcendence and the doctrine of Progressive Revelation formed the strongest confabulating gnostic device we've ever been subject to. 
<<<

Let me tell you (in my best deadpan): to put it mildly, Christians will give you a weird look if you say you are Christian but are willing to give up anything on that laundry list (if they even understood what you were talking about in the first place, no offense). And, yet, I felt very bound by my whittled down faith. I found enough philosophical ground to cover my bases even through all of that (some sweet/sick confabulatory backflips in philosophy, let me tell you). So, you have me all excited to tell you what I found, what remained after everything was stripped away. Here is the core of Christianity:

//The Two Great Commandments. //

<<<
[[RPIN]]: Duuuuuhhhhh. No shit, sherlock.
<<<

Was there ever any doubt? Everything else fades before them. Unfortunately,  after I finally gave up on the existence of God the Father (apparently, that was the last straw that finally broke the camel's back), I found I couldn't abide by the first of the Great Commandments: 

<<<
Hear, O Israel! The Lord our God, The Lord is One; Thou shalt love the Lord thy God with all thy heart, and with all thy soul, and with all thy mind
<<<

I do not believe in God. I used to. The belief ruled me. I legitimately wish I could now (assuming it wouldn't fall apart again). Actually, what I really wish is that I had the hope and purpose of faith ([[RPIN]]: "But, hold the irrationality, please.") without the flaws of faith. The Tree of Knowledge, of course, is perilous. Unfortunately, I cannot unsee what I see. I cannot adopt the existence of God as my axiom. I cannot unify myself around it.

But, all is not lost. 

A few thoughts.

The Greatest Commandment is fundamentally about unifying ourselves around a particular target. I can't preserve the target, but I can preserve the unification clause of the commandment. I can preserve being a unified person. I must love X with all my heart, soul, and mind. We just need to fill the X in with something axiomatic.

<<<
[[KIN]]: The egoist fills X with himself. I cannot truly unify myself with and around that. Sorry, [[RPIN]].
<<<

<<<
[[RPIN]]: Keep empathizing with me. We will see. Even the egoist must love others in virtue of loving himself. It is the only way to get our shitty lizard brains to work correctly and provide us those delicious, unadulterated pleasure chemicals that eudaimonia is ultimately reduced down to. Those facts are the only reasons we are talking in the first place. I'm here because I'm convinced that by exploiting your empathy, you will eventually be converted. I'm so convinced by my axioms that I will flaunt the very dagger with which I'm going to stab you...right in front of your eyes. You will see it coming, and you will know. I treasure it. They say pride comes before the fall: may the odds be ever in your favor, homie. Let's dance.
<<<

The Zeroth Commandment still functions:

<<<
Be moral.
<<<

Moral law, by definition, overrides all others reasons. It is the blackbox which decides all others. It is the ruling principle we live by. It is our fundamental decision procedure. All thinking things have a zeroth law. Unfortunately, the commandment, as it stands, lacks content. How do we give it content without being vacuously circular? Whatever we take up as the content of that commandment is our true axiom. What will be the content-giving axiom to the Zeroth Commandment?

I hope it is the second of the Great Commandments:

<<<
Thou shalt love thy neighbour as thyself.
<<<

If there is a God, may He judge me by, and may I be justified by my faith in the second of the Great Commandments. 

<<<
[[RPIN]]: Fore! Bombs away! Incoming! (that's sarcastic empathy)
<<<

Taken very literally, this maxim says something which I believe wasn't intended. I sound like a child in Sunday school asking a question that my poor teacher inevitably lacks the resources to answer:

<<<
What if I don't love myself? The commandment clearly does not require me to love my neighbor. 
<<<

I hear my dad loud and clear right now, as if he were sitting next to me quietly and kindly advising me. He's telling me to find the center of God's Will. He's telling me to find the spirit of the law, not the letter. He's telling me to be as much like Jesus as I possibly can. He's telling me to be a prophet, not a priest. He's telling me to be the idealist, not the pragmatist. He's telling me to go with [[KIN]], and yet he contradicts himself by also telling me to go with [[RPIN]]. How I can trust my father when he so blatantly violates the law of non-contradiction? That isn't unified at all. What is it that I'm even trusting? Don't you see the reason for my doubt!? Well. I'm still here trying, dad. I hope one day you will see I'm still trying (despite the fact that [[Adult Children of Alcoholics]], which you also seem to hold so dearly, actually suggests that I give up trying to trust you). I have not given up, not yet.

<<<
[[RPIN]]: Okay, we can't strawman Jesus' claim. That wouldn't be very *ahem* Christian of us. Fine. Let's steelman that shit. What did Jesus really mean?
<<<

To the best of my abilities, I have not been able to peel Empathy and Love apart. I think they are fused together, perhaps they are two facets of the same gem, if not philosophically identical. 

Thus, this is the Empathy Commandment. I h0p3 to take it up as my axiom. I need it to be my axiom. 

Who or what is the source of authority for this maxim? Is it something external to me? Maybe. I don't know. I am increasingly convinced that it is I who must give that law to myself. I must be autonomous. I must have faith in it; I must take it as my axiom. I must hardcode myself with it. I have hope that I can unify myself around this axiom. 

<<<
[[KIN]]: You must empathize with yourself, [[RPIN]]. But, if you empathize with yourself, you must empathize with others.
<<<

<<<
[[RPIN]]: I could disintegrate to the lowest level, and there I need not empathize with myself. However, I agree that it seems very unlikely that I would really maximize my utility going that direction. So, I agree. You've got me there. I must empathize with myself. However, that doesn't mean I have to categorically empathize with myself. What if I turned my empathy off at opportune moments? Ultimately, the egoist axiom can account for empathizing to our benefit, and we need not take up the spirit of this golden rule (even if we apply it to the letter).
<<<

<<<
[[KIN]]: Is it really empathy if you accept a principle which allows you to turn it off? I think not. I do not think you can unify yourself with it.
<<<

<<<
[[RPIN]]: So, my goal is to show you how we can become "bad" unified agents in the Korsgaardian sense? Let's do.
<<<

Now I'm trying to unify myself in spite of my residual Christianity, my leftover Christian intuitions I've been brainwashed to have since birth. I may not be able to erase, revise, or overwrite everything, but I'll do whatever I can to harmoniously reconstitute myself.

I was in denial about my faith for a long time. I must accept my deconversion and figure out a new path. Of course, I can hear my mother quietly hoping that this is God's intended journey for her sons, that there is some personal divine being carefully choreographing our struggle into something meaningful ("His Will be done"). I can hear her crying out. She sacrificed her children to God. I know her pain. I can feel it. 

Yes, I have a hard time swallowing such a sacrifice when I no longer accept the existence of the beneficiary. I am their victim, and yet I empathize with them deeply (as they do with their own parents). Some might call it Stockholm syndrome. I hope they are wrong. I honestly believe my parents meant (and still mean) well. Despite being wrong about the most important thing in the world (a mistake which I'm now forced to correct), I think they are brilliant people. The fact is: they cannot face their own demons. It would destroy them. I think they are deeply scarred and obsessively driven to be as faithful as they can be. They are heroes engaging in true Greek tragedy; it is the stuff of nightmares; it has been a farcically obscene overcommitment of their lives and their sons' lives (see: Poisonwood Bible) in the name of something Holy which has turned out just to be a scam. It is our family's tragedy. I forgive them. I hope we can manage something meaningful, and I hope to learn from their mistakes. I hope I have not already committed the same sins against my own children, or at least, I hope I have the chance to intervene and find the way which works. Let us hope empathy is the key.

-----------------------

<<footnotes "1" "This is not an exhaustive or detailed list. The order is roughly correct. I could write a very neat book on the topic (I have a uniquely rich perspective, I believe). I have no wish to destroy anyone's faith though, and I think my life is just sad in this respect. At any rate, I really did my best to be faithful despite an absurd amount of counterevidence and doubt.">>

Filler:

* Monte Carlo simulations for Magic:
** 	Finding the correct land/burn ratio, depending on strength of burn
** 	Chain dredging
** 	Swiss Tournament structure, gambling, and demonstrating that the best USUALLY doesn't win in large tournaments
* Programming languages:
** Bash
** Python
** Go
** C
** C++
* Scripting languages:
** 	AHK
** Innerspace
** ~WoWGlider
Official distributions of h0p3's Wiki include checksum and signatures files for verifying the integrity and authenticity of your copy. These verification files are updated for every published edit (nearly real-time). With these files (and the right tools), you will be able to cryptographically verify the entire wiki, which is contained in a single html file (index.html). Let's hope this is never directly useful to us.

Here's how to verify:

If you don't already have them, download all three files (<a href="check.sum">check.sum</a>, <a href="check.sum.sig">check.sum.sig</a>, and <a href="index.html">index.html</a>). You'll need to have installed [[PGP software|https://gnupg.org/]] in order to verify the signature. Use the Ed25519 signature file (check.sum.sig) to verify the authenticity of the checksum file (check.sum). Assuming you are using gpg (or gpg2<<ref "1">>), you should open your commandline and navigate to the directory containing these files, and run the following command:<<ref "2">> 

```
gpg --allow-non-selfsigned-uid --keyserver keyserver.ubuntu.com --recv-keys 806820F2DCBA181F49F23364EF7E62B3CAB88302
```
You should see something like the following output:

```
gpg: key EF7E62B3CAB88302: public key "h0p3.xyz (h0p3) <h0p3@protonmail.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1
```
You've successfully imported this wiki's public signing key from a keyserver. If you prefer, you can also manually import the full ascii-armored public signing key found at the bottom of this page. Now that you have imported the public signing key, you can verify the signature by running the following command: 

```
gpg --verify check.sum.sig check.sum
```

You should see something like the following output (note that the date/time when the signature was made will vary):

```
gpg: Signature made 12/06/16 22:00:35 Eastern Standard Time
gpg: using EDDSA key EF7E62B3CAB88302
gpg: Good signature from "h0p3.xyz (h0p3) <h0p3@protonmail.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 8068 20F2 DCBA 181F 49F2  3364 EF7E 62B3 CAB8 8302
```

The warning exists because you have not marked the key as trusted. Do you think this a forgery? You could compare the signing key to what is below, but if this page has been tampered with, then this entire process may have been tampered with. You find yourself in a "trusting trust" kind of predicament, wherein you have to accept that your first verification is trustworthy (or you can trust someone else's trust of this signing key). Only by trusting trust now will you be in a position to identify future attempts at forgery or tampering. Let's assume you trust this first verification (you can sign it, if you wish). 

You have verified the signature file, and you are now able to verify future signatures. Only someone who possesses this wiki's private signing key (associated with the public signing key found at the bottom of this page) could sign the checksum file.<<ref "3">> 

Next, use the SHA-512 checksum file (check.sum) to verify the integrity of the Wiki index.html file. I suggest [[sha512sum|https://en.wikipedia.org/wiki/Sha1sum]], [[hashfile|https://pypi.python.org/pypi/hashfile]], or [[Hashtab|http://implbits.com/products/hashtab/]] (you can figure this part out; it's easy).<<ref "4">> If the hash of index.html matches the hash found in check.sum (or if your hashing tool verifies they match for you), then you know your index.html file hasn't been tampered with by a third-party. To be clear, if you trust the signature verification of the checksum, and you trust the checksum of index.html (if the hashes match, you'd be crazy not to trust this part), then you trust index.html. Thus, your verification demonstrates you possess a bit-for-bit copy of the original signed by someone who possesses this wiki's private signing key.

This wiki's public signing key:

```
-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEWEy5zRYJKwYBBAHaRw8BAQdAbwcuJ9nDR4tiEDVPKK1Hn+dHodQ+4EwT/aWw
HTyUFse0JWgwcDMueHl6IChoMHAzKSA8aDBwM0Bwcm90b25tYWlsLmNvbT6IeQQT
FggAIQUCWEy5zQIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIXgAAKCRDvfmKzyriD
AuzkAP923f3hdKwPxYDdQLbMH1JknIioISavvYl2jd3NshasPgEAgQcTz05+FBBS
wrlnbF9cJMIevkDMwSY0VqKNmqmexgC4OARYTLnNEgorBgEEAZdVAQUBAQdAD5sI
kpVF15Vy4D3+UXzxUJUhux2GtDSAv3M6x08BnHkDAQgHiGEEGBYIAAkFAlhMuc0C
GwwACgkQ735is8q4gwL73wD+MTyYIQNeW2gzbtMulkkP9rRIPIC/qBioh9GmHKP5
XCwBAKIPigCzNfpDayDWvejfBVCE4mPf2rbv7hQqqz/eyeIJ
=Tl4R
-----END PGP PUBLIC KEY BLOCK-----

```
If you wish, you may use this key for authentication or encryption during [[contact|Contact]].

---------------------------------------------------
<<footnotes "1" "Some folks will need to replace 'gpg' in their commandline with 'gpg2.' Make sure you are using a newer version which handles ECC (specifically, curve25519).">>
<<footnotes "2" "You may get an error that the key is not self-signed. I am not convinced it is a real problem. If I understand correctly (and I may not), it only enables you to detect a denial of service attack on keyservers, and that's it. I suggest the use of keyservers only because it gives you a nice one-liner to import the public key. I'm convinced your trust has to start on this page or by trusting someone else who trusts this page (I'm not in love with PGP's WOT model). I am not convinced self-signing buys us much in this case. I could be wrong. Would you, for example, really be more trusting if I clearsigned the public key? I don't see why. But, if it matters to you, this wiki, which includes the above public signing key, has been signed by the very same key.">>
<<footnotes "3" "If someone were to break into my computer or steal the key from me, they could easily forge this. Public key cryptography is not a panacea to problems of digital trust. At best, it only authenticates a possessor instead of the creator or intended owner or user. You should always maintain reasonable doubt (using a very high epistemic standard in this context).">>
<<footnotes "4" "I am aware that gpg can hash. I strongly dislike the tool though; I think's it is incredibly unintuitive and unwieldy. I'll stick with tools I really love when I can.">>
Cryptocoin donations are welcome. I'd request you start small while I learn how to use this system. Please let me know if you donate. Here are my wallets:

```
Bitcoin:		1G2wgxTPKWzuGaFGTaqtT7s2hK5MtnFg3k
Dash:			XtxsHVDnbdYrNRRVnnsoYmoVZbSTg15Qa3
Ethereum:		0x5d0b08a694547647511afc2b0dd1197caba08c79
Namecoin:		Mygy3ZmeU7kQ2GvitJSQjc4UYGXrKiQkTG
Zcash:			t1bxKK2ZEhESwXHtZDiCQ2GrSAXLHXX4t1d
```

Alternative coins:


```
Asiacoin:		AQrZmTdrY9fREALpVRUpSf7sNPcyL1uB8V
Auroracoin:		AcES4djFohngsXZRw84qHs28Bqd3wgXEvN
Bata:			BP2i1K1pKCQ8HCjGd5ZZTfc4AmYkmiPSwU
Blackcoin:		BDJ9D7UT2nBnARfeP6F98eaqBcgUwmYLMd
Canada eCoin:		CaWVrqSA9CdsqoTkq3ydbzkngg31NmWutQ
Cannacoin:		CKqaxRhctEVKRtjUcUpA7LQXFwd8u3ZPjH
Clams:			xJmghSHcHF45ggfXkg1j9MK6uZTv46Zbpz
Clubcoin:		CSbTfEq7QmBhSNNgCsLHABCEuXiLVDNMep
Digibyte:		DHDM9xoMcfQZbE9tQatPTA5gDQWKk7iPDe
Dogecoin:		DGUGDLqRsufhcRvsXNTCmPofsTsxDakMWV
EDRCoin:		eYicaxPmM2mkaSDJdHDXUF6g5e3wxJZ3b7
e-Gulden:		LYKuc2YSNLsr1xfgHXAFzUAd6D29hau4KB
Ethereum Classic:	0x364b8fca50d74cccdcbf6eb77d694da5e38d69b3
Feathercoin:		6ibeBLau756ngK3WdXBvBCduydMXCAiST8
GCRCoin:		GaQ9KmPmuXhhDD91CmX9NpdWtAvBLHQviA
Gridcoin:		SFMreB2qKq5KEtewtey2rZ8yTQPyDgNA1T
Gulden:			GUz5TbrAUMRZLTMGxgJWiPGXvjRjrrveG8
IXCoin:			xixHUENtAQRTecR8sCwwmiXfp32i5yiy8Z
Jumbucks:		JWsX7uMGNuCjUQGR9NFaSbc17BcTAzqXis
Litecoin:		LYKuc2YSNLsr1xfgHXAFzUAd6D29hau4KB
Monacoin:		MP4CPPpuFt3RPN3uBFZoAW56K8mWML1HyC
Myriadcoin:		M8er5jLZwqYBoX1oVSZh4mcXJBz3kHhxAy
Neoscoin:		NUsiYjwm1bymnnSS9Y6Sdi6nLp7DRYENdo
Novacoin:		4PyAGo5hxL9efRKXWe29WMCSFeTGNjCYzG
NuBits:			BSzAQpaHCJPwnXyqBk63WcLwJHUdccUxqV
NuShares:		SdZMt8EiCm67fiaoxx1PBWBidp1q7dwD69
OKCash:			PGRCsLWUyJzvSRCe4hXBkDeschKH6Qvx3m
ParkByte:		PKPXAnL9v7jj9Qd8U7wAfhMkk8qJp1Hyra
Peercoin:		PQbcYwqXKsSNRPdLxDqxwXgRHatPGFbkbv
Pesobit:		PLf9ssgDBh1VxhWxiKp162tuemgUX4f4b3
Potcoin:		P9rBHuUCFNV3yYKzm14pG86KpUxVNZuhuf
Reddcoin:		RfefGizCeeiNJiXgxjAv6hffNHZyQrXMDy
Richcoin:		Rc8vxQehdfUtAJsRud8Ab59DnZoa5qJPTY
Rubycoin:		RCnFiEajxs7Z5zh9XeBNeXk6suEsCwXJDz
ShadowCash:		SYxfU5pzVMfyUh5inSf9pG2z7KqhJeXo3J
Smileycoin:		BCpcVwcvrAF2rMhcewd6tgJsgvr2q8Jdyf
Solarcoin:		8ZbRM5intDtPFJ1LdsW49qJ6kobT6142vx
Syscoin:		SMjdVuHsT4KFe5JTFC3HPUcVXe6dFJhBaW
Unobtanium:		uSam2f6Fdf6hwKcqUJVLnHjhTCAs2PRjvr
Verge:			DNJjq4dRg3XJHeW1rizYJxiRa5maLhS5mG
Vertcoin:		VqcamN6Kt7wQws9Qh1t2RWFehuLfTTrUog
Vpncoin:		VwQ7c5AeMpc7SVooTbt41LSTuHvbEq4Q7C
```

//RPIN the Psychopathic Pragmatist //

The [[Pragmatist|Pragmatism]] character animated in this wiki. It represents my [[Redpill Intuition Network]]. RPIN is the opponent of the ever ideal [[KIN]]  in hypothetical dialogues injected into this wiki.
We have been spending our Sunday's collectively reflecting and planning. They are family meetings. They are the beacons, markers, or instances of decision making. This is the clock cycle of the turing computer of our family's decision procedure.

I've been devoting my Sunday's to reflecting on the past week, on the coming week, on the past month, on the coming month, on the past year, on the coming year, and so on.

We figure out how to compatibilize ourselves. We figure out how to help each other attain their goals. We work together. We think together. We value together.
Socrates, Aristotle, and Plato's: the philosophical gods of the ancients. We still serve them today. They are profound memers. 
I have not defaulted yet. I can't afford to pay anything. Despite the fact that I consider it a form of enslavement, I actually am willing to pay back my students loans, assuming I had the means. Taxes, of course, have far, far better conceptual reasons in their favor. Students loans might be morally wrong, just like economic structures of our healthcare industry, but it doesn't bother me to pay for it. You do what you gotta do.

I will need to work it out. I'm not worried about garnishment or my credit score. I am worried about revolving, predatory debt and the new debtor's prisons (they come in different kinds and degrees) arising in our society.

I can hear my parents claiming I'm just rationalizing my behavior. I see the blindness right before me. The ignorance is overwhelming. Instead of going down the warpath, take half a second, and pretend I legitimately am trying to do the right thing. Pretend you don't have the virtuous perception of what is morally salient and that I do, for a moment (however difficult that may be to imagine). Empathize with my position, at least try to make the deductions I have, and you will see I obsessively live up to at least the same standards of integrity (even if we have different axioms).

Lol. What am I saying? They won't be able to help themselves, and I won't be able to help myself either. This was a pointless post, except for the original claim, that being: I want to make sure I don't default.
* [[Inferiority Complex]]
* [[The Only Man Who Can Drive His Particular Car Syndrome]]
* [[Virtue signaling to myself or my idealized self]]
* [[Emotional Reasoning]]
* [[Anatomy of My Writing-style]]
* [[Which Internet Memes Describe Me Best]]
<<<
My dick is so long, if I laid it on the keyboard it would stretch all the way from A to Z 
<<<
* If you can barely stay awake, then hold your breath. It will trigger a strong survival response in you and artificially generate alertness.
I have seen several doctors, only two of which understood that I have mental health problems and gave me any help. I have tried SSRI's and anti-anxiety prescription medicines. They did not work.<<ref "1">> Although, I've been reading a lot of books by psychologists and researching online, I have not paid to see a professional psychologist. 

I don't fully trust psychiatry or psychology (as science moreso, but as industries far less so), and I tend to extend even less trust to what I will brand as "counseling folklore" in most cases. Relatedly, I can't afford to see a qualified psychiatrist/psychologist.

Anyone who has seen the history of how "crazy" people (many of whom weren't crazy) have been treated by psychologists would at least be very cautious. The history of mistreatment and mistreating is legion. Beyond the history of abuses of power in the psychology industry, from a scientific perspective, the human mind is not nearly as understood as many other physical objects and phenomena in the world. This doesn't mean psychology is useless or not to be trusted //tout court//. Far from it. 

It is obvious that psychiatrists, psychologists, and even counselors help many, many people. They don't help all people though, and I do not have excellent evidence that they can or would help me. They have made the lives of many people much worse as well. Overall, I believe psychology is a force for good in the world though.

We are making progress in understanding the human mind. I'm convinced that cognitive science, neuroscience, phil. of psych., and other scientifically oriented psychological studies are making most of the progress. That said, I think folklore-psychology sometimes provides important hypotheses and anecdotes that are ripe for scientific study; it is obvious they can be onto something important about human nature, even though they can't quantify it or provide fitting conceptual analysis. In any case, the more we understand our brains as computers in a biosack we call human bodies, the closer we get to unraveling the mystery of human psychology. We might say that the fields of computing and psychology are rapidly closing in on and overlapping each other. Psychology is a specific kind of computer science,<<ref "2">> and human psychology is a kind of medical psychology.

While science progresses, that doesn't mean it is sufficient. More problematically, I think the medical industry in my nation is a machine used to extract capital from the working class. I've known a lot of med and psych students. They are not brilliant people (no offense), and the vast majority are there to make money (the administrative, middle-man, bureaucracy of capitalists above them are even more psychopathic in my experience). It is not a vocation for them. Ironically, the least qualified (counselors) are the ones who take it to be their vocation. It is obvious that we either cannot trust their motives or their credentials. We cannot trust the architecture of the industry.<<ref "3">> I think the pharmaceutical industry (and our twisted intellectual property regime) only further hamstrings the possibility of having access to the right tools.

Crucially, I do not trust others to help me at this level because no one has actually succeeded in guiding or healing my life in this respect. Why would I leave this up to anyone else? Why would I willingly give up my freedom to someone who doesn't know me as well as I know myself? Why would I think they can solve or give me the tools to solve the conflict in my reality map? All the evidence points to the fact that they can't actually help me. Call it paranoia if you want. Call it being a control freak. Call it unwise. //Oh Virtuous One, you have not been in my shoes. //I'm mentally unstable, but that doesn't mean I'm wrong.

Someone who understands what I understand should feel the way that I feel; I think it is only rational. People are too //certain// that life is worth living. They have shallow reality maps. Evolutionary memetic denial of the dark areas of existentialism, morality, and epistemology leads to a mass delusion in our population that enables most humans to survive longer based upon unjustified assumptions. Just because you feel life is worth living doesn't mean you are right. If I had access to affordable doctor that really understood that crucial fact and also had the necessary credentials to deal with a freak like me, I'd go to them.

I think someone who fully understood the problem I see in my reality map would want to kill themselves too. Fortunately for you, you can't just be handed my intuitions. You have to cultivate them (and no offense, you probably aren't weird enough to do it). No amount of behavioral therapy is going to fix my existential rift (although it may help me generate the space to do it). I am the only who who can fix the real problem. That doesn't mean I don't need support, but the problem is ultimately mine to deal with.

I run a very high risk of not finding a qualified psychologist. Vanishingly few have the practical experience and toolset to help gifted, autistic, existentially depressed people correctly. If I get an unqualified psychologist, they really could steer in me drastically wrong ways. It isn't just that they might not fix the problem, but they really can make it worse (far worse when you consider their physical power over you). I've not found any in my area (a somewhat rural region) that come even close to what I need. Even if there were qualified psychologists in my area, I don't have the money to afford it. 

You might think "getting some help is better than no help." That is obviously not true. This isn't like hiring a part-time maid to help clean your house. The maid might not clean everything, but they at least help get your house in the right direction. Treating your mind isn't like that. The analogy is about as foolish as trying to compare your house's financial principles to a nation's monetary policy.

Anyways, I don't have the resources to get the help I need. More importantly, my family needs me right now, broken or not. 

So, I have to be my own health advocate; I have to make my own diagnoses. It's the only practical option available to me. Throw out my opinion right here if you need to. I totally understand that I'm not an expert, that I'm not a doctor, and that I'm not qualified to answer these questions for my self in a medical sense.<<ref "4">> I think you will have a hard time showing me why I shouldn't do this though.

I realize I'm in a high-stakes learning, existential crisis resolution, and behavior modification process. In being both the undereducated operator and mentally unstable operatee, I'm in trouble. There is a non-trivial chance I will fail to heal myself. I have to have hope that I can fix this though. It's really my only option. It's theoretically and practically the best thing I can do. 

Frankly, I'm proud of the job I've done so far. If you could step into my shoes, I think you would think so too. It isn't perfect, but I am making progress. I regularly have my wife and children give me assessments. I keep records. I try to give a data-driven approach to handling my own treatment. I'm engaging in the science of making myself (and my family) happy, even though I am a very shitty scientist. On top of that, this wiki is a tool for the philosophical and possibly for social problems I'm experiencing. I've been increasingly motivated to solve the problem, and I've been working hard on it. It may be a sign that I'm emerging from from my problem (/fingers-crossed), and that I'm being successful in my self-treatment. I could be wrong. I cannot give up. My children need me.

Here's my self-diagnosis:

* I am extremely confident that I am [[depressed|My Depression]], specifically suffering from existential depression.
* I am extremely confident that I suffer from an [[anxiety disorder|Anxiety]], which previously included panic attacks.
* I am fairly confident that I am suffering from [[autism|Autism]] (despite some positive effects).
* I am fairly confident that I am suffering from [[being extremely intelligent]].<<ref "5">>
* I am not confident, but feel justified in believing I am suffering from [[PTSD]]
* I am not confident, but feel justified in believing I am experiencing [[positive disintegration|Positive Disintegration]].
* I am not confident, but feel justified in believing I am psychologically dependent upon, but not suffering from addiction to two substances: [[Cannabis]] and [[Deschloroketamine]].
**That is to say, these are acting as medicines rather than as abused drugs in my life. They improve my functionality and allow me to make progress on the causes of my pain. They are a net positive force in my life. While there are definitely negative consequences to using any mind altering substance (prescribed medicine included), the positive consequences far outweigh the negative. 
***Ask my immediate family. They can see the difference.
***See the thinking and work that has gone into this wiki. Parts of it would not be possible without cannabis. 
**Cannabis use ranges up to .5ml of [[Cannabutter|Cannabutter Recipe]], or 30mg (60mg/ml) of cannabis plant, or 3-6mg THC and 0.3-0.9mg CBD for 6 days a week on a [2 months on, 2 weeks off] rotation.
*** ~10-20% THC and 0.1-.3% CBD is a fairly standard range. Obviously, this can vary with your strain, batch, and how you cook. Unfortunately, I did not have my batch tested (at the time, there weren't any good ways available to me).
*** 10mg of THC (not plant, but THC) is the commonly recommended dose for experienced edible users. 
**** I have tried high doses. Unless I'm with friends/family (which is rare), it isn't fun for me. I don't find being that high very appealing. 
**** I dose well below the recommended range. I'm not quite microdosing, but I'm trying to find the right average amount. My goal is only to use what I need. I want sanity and productivity. 
***Cannabis temporarily helps me with my anxiety and depression.
**** Overall, it greatly increases my functionality. It is worlds more effective than the prescription meds I took. 
**** In particular, while using this medicine, I find that I have the emotional energy to deal with the causes of my anxiety. 
*** I am very wary of cannibinoid tolerance.
****My two week abstinences eliminate my tolerance buildup.
*** My break every two months allows me to make sure I'm not physically dependent.
*** My break every two months allows me to see what life is like without cannabis.
**** I hope to eventually just stop during a rotation, to see my life is better without it.
*** The overall cost per daily use is ~$1.58 (cost per hour of effect is fairly efficient).
**Deschloroketamine use is 20mg every Sunday. 
*** Deschloroketamine (DCK) helps my depression (it's a miracle!), but doesn't seem to affect my anxiety much. After DCK, I at least have hope during my anxiety though, and that is tremendous.
***Very little is known about this particular substance. I'm forced to rely heavily upon the standard drug-user sites, such as:
****http://www.bluelight.org/
****https://psychonautwiki.org/
****https://www.erowid.org/
****https://tripsit.me/
****https://clinicaltrials.gov/
****https://reddit.com/
***Ketamine is an unpatentable (because it has been around for so long) dissociative used to treat burn victims and people suffering treatment-resistant depression (legal treatments cost $700 a week).
****It's hard to get clinical trials for a substance that no one can make money from. It doesn't matter how effective it is (70% success rate against treatment resistant depression) to those in power. Pharma exists to extract capital from you. They don't want a cure, and it is obvious they do not want to compete with this medicine.
***I can't afford ketamine, and deschloroketamine is a highly similar analog. It tends to have lower "high" effects than regular ketamine (or MXE, or many other diss. RCs), but it has a long duration (4-6 hours, with up to a 12 hour afterglow, and it generally suppresses my depression for 1-3 days) for extremely low doses (which is excellent for tolerance and a couple other health factors). 
***20mg deschloroketamine is considered to be roughly equivalent to 50mg of ketamine. 50mg ketamine through IV is fairly standard for treatment. I use enteral administration since I needed to dissolve it in propylene glycol for volumetric dosing.
***I did not and do not take this substance lightly. I am quite aware of the dangers of dissociatives, and I am without a doubt at risk. However, this shit works. It's a miracle.
*** The overall cost per weekly use is ~$2.65  (considering the afterglow and following days, the cost per hour of effect is absurdly efficient). 
* I am not confident, but feel justified in believing I am not psychologically dependent upon [[Alcohol]].
**I have binge drunk many times in the past 10 years.
*** Sometimes, drinking has been the only numbing agent that allowed me to survive the night. I did need it those nights.
*** I drink way less this year than the year before, and hopefully I can continue that trend.
**I consider alcohol to be the most dangerous substance I use. My goal is to eliminate it entirely.
*** Deschloroketamine entirely removes any thoughts of alcohol from my mind. On Sundays I find even the thought of alcohol disturbing. 
* I am not confident, but feel justified in believing I no longer must experiment with substances (since I believe I found the two I need to fix my problem). 
** The last new substance I tried was in January 2016 (Deschloroketamine). 
** In the past 4 years I've experimented with kava extract, kratom, nutmeg extract, morning glory seed extract, psilocybin mushrooms, LSD (which was most likely 1P-LSD), methamnetamine, and a handful of nootropics (like caffeine). 
***Methamnetamine (MNA) is NOT methamphetamine. MNA is much closer to MDMA. 
* I am not confident, but feel justified in believing I am not physiologically dependent upon any substances. 
**I monitor usage patterns in my records and have controlled administration of my substances (with harm reduction practices). 

-------------------------------------

<<footnotes "1" "In fact, the SSRI's were a huge mistake. I wish I read far more before I started using them. ">>
<<footnotes "2" "Computer science obviously derives from a number of other original sciences.">>
<<footnotes "3" "Mental illness is on the rise, folks. This isn't psychology's fault in itself. It has more to do with environmental factors; we live in psychologically tougher times. I think the industrial-complex is obviously not effectively functioning, at least not to the benefit of the masses.">>
<<footnotes "4" "Note how this is different from a moral or practical sense.">>
<<footnotes "5" "Omg, someone pat me on the back...I feel so special. /s Also, don't be foolish enough to assume that one can't suffer from being extremely intelligent (a myth). Of course, I am not definitely, beyond a shadow of a doubt, extremely intelligent. I think my autism shows serious development flaws in my brain+mind. But seriously, I am convinced that I have long been closer to the upper limits of the human IQ bell curve than the average (at least before this crisis, including alcohol and cannabis use).">>
It's true, even if you don't want it to be. Hold your ears, shut your eyes, and scream "NO!!!!!". But, you know it's true (Luke!). You can't unsee it. You can't undo it. This is your real loss of innocence: the loss of the innocence of hope. You've never had to prudentially take up hope before, and now you do. This is your pragmatic transformation. It's accepting the fact that we suck as human beings.

<<<
[[KIN]]: Ohh shiiiiit, son! (Pardon the phrasing; I just want you to "get it.") You thought you had me on: [[Socialism]]. Surprise! I'm still here. I'm you. Haha. No, but I actually do need to answer your excellent post in my thread. You are obviously correct about something crucially wrong in my point of view. I have to listen. Ah, but I come bearing gifts to you: See [[Metamodernism]]. The section on [[Positive Nihilism]] is going to give you the ammo you need to help write this section. I approve of it (and I must!). I get to still exist. See, I can meet you halfway! I can be Redpilled Kantian.
<<<

<<<
[[RPIN]]: You sound like a confabulator. Reason will end you eventually.
<<<

<<<
[[KIN]]: Even if I were (and, let me admit up front that I am shaped), that doesn't make me wrong. My intuitions are expert-level virtue of the practice. You are excellent at moral philosophy; your compass is excellent in brilliant ways (even if it is damaged in others and disunified in some). Do you know where that brilliance resides? Still largely in my intuition network. My network runs deep through the core of your self. You will not be able to pluck me out of us. I will always be with you. I have been around much longer, and you are the newcomer. I have the homefield advantage, plenty of tricks up my sleeves and in my bag (which you know), and I've forgotten more than you've ever learned or imprinted in us. I could be a guerilla for a long time. But, that's not empathic me! =) You know me. I'm the idealist. You will always be an idealist to some degree. You can't escape it, even in your pragmatism. In short, you can't escape me. Empathize with me, brother!
<<<

<<<
[[RPIN]]: Clearly, I must. What else can I do. It is part of my unification. So be it.
<<<

Social Darwinism is that ugly reminder of who we really are. We're animals. Stop with your differentiationism of the animal kingdom. You're being too anthropocentric. We're not as mighty and dignified as we think we are. We still shit, feel hunger, sleep, love the look of boobs or whatever shows you have extra energy to look uniquely beautiful, virtue signal, and do very mammalian and animalistic things. We're mammals, and we're inescapably bound to be driven by our "baser" foundational animalistic instincts. We are who we are, even when we think we're not. Oh, that brings up the next point. I hate to break it to you: there is nothing magical about human beings.

You aren't special in the way you think you are (I'm calling you arrogant here), even if you are special (I'm calling you stupid here) and actually special (I'm calling you a being of dignity and value here). 

Consciousness is amazing. Unfortunately, you don't know who or what is and isn't conscious, or which species are or aren't, and you ultimately (outside the scope of physics and what science could even theoretically test) don't know what, if anything, is conscious. I'm not asking for certainty here either. If consciousness is that specialness making, you're not going to be able to justify the way you treat other animals (it gets much worse if you push hard in phil. of mind). 

Our consciousness is just "of" more targets than other creatures. Yes, we're sentient because in the list of things we can be conscious "of," we find ourselves listed. Why is that so important? You can't give a good reason without turning to faith (don't worry, redpillers accept that large portions of the human species will be religious). 

<<<
[[KIN]]: 
You want to know why I think humans have dignity, what justifies it? Me. That's it. There are no other universalized maxims. I'm not morally bound to be moral, but I'm going to try to be moral because I want to be moral. The Ring of h0p3 is the reason I'm calling you a being of dignity and value here (and myself for that matter).
<<<

Social Darwinism is the missing piece to the explanation you've been searching for about who we are and why we are as we are, the piece that finally allows you to stop confabulating about the ideal human and ideal humanity. Does that mean we have no value or dignity? No, of course we have value and dignity (I believe it, and that's all that really matters). Is the worry that we'll come up with unacceptable standards for how to treat people once we understand who they really are?

Only a fucktard would become a racist, sexist, or morally arbitrary characteristic discriminator<<ref "1">> after thinking about social Darwinism. To be clear, just because terrible things have occurred in name of social Darwinism doesn't make it false (and if I need to drive home the point, allow me to point out the number of atrocities committed in the name of things you take to be relevant or true).

Social darwinism just is the redpilled science. It is the study of humanity as animals, of our true natures, of the physicalist explanations of ourselves. Hence, it is a science.<<ref "2">>

To be clear, an enormous portion of the humanities (who believe humans are fundamentally good) and even a significant portion of the scientific community do not take social darwinism seriously, or they only do so when absolutely forced to see it. This is unfortunate. We keep our heads in the proverbial sand when we won't look at the truth. Just be honest about it. Do your best. Be empathic. Don't sacrifice the truth.

Redpill Hypothetical Imperatives: the "is" maxim content loaded into the CI's "ought" decision procedure. i.e. Hi, Neo-Kantians, are you ready for the smackdown, the asswhooping of a lifetime, for what social darwinism is cookin'? Here is where you are religious instead of truly philosophical, and this where your system starts to fail.

Let's be clear: social Darwinism is a description, not a prescription. Only a fool would take "is" and conflate it directly with "ought." That said, what "is" clearly has enormous influence over what "ought." Utilitarians have a calculus for it, virtue theorists the virtuous perception and golden mean, and Kantians have a CI which takes maxims as inputs (maxims with rich particularist content, including social Darwinian descriptions).

-------------------------

<<footnotes "1" "Oh, and who defines morally arbitrary? Fine. I get your point. We're making it up as we go along. We have to.">>

<<footnotes "2" "That doesn't mean metaphysics is gone, far from it. Redpill science has its boundaries.">>
Socialism describes capitalism as a socioeconomic system based on the private ownership of the means of production and the exploitation of the labor force. Capitalist society is structured so as to reward the most socially adept abusers of human nature. It enables psychopaths to enslave us. It is a vicious game in which the most redpilled with weak moral compasses and the means to exploit the poor and weak become totalitarian predators. Socialism is an attempt to describe this human game, and it posits that a revolution, revolt, or uprising against capitalism and private (but not personal) ownership is inevitable.

We start with labor and value. Labor adds value to materials. We generate value by embedding our labor (time, energy, effort, etc.) into products; part of who we are is imbued in the things we labor to create. The total value a worker creates through their labor is productivity value. For the capitalist, productivity value can be split into two major kinds: wage value and surplus value.<<ref "1">> A product's wage value is used to pay the worker. The value generated beyond the wages paid to the worker is surplus value; it is the source of profit.<<ref "2">> Surplus value can be used to pay constant capital<<ref "3">> costs, replacing the means of production, technology, marketing, distribution, finances, human resources, logistics, expansion, security, competitive advantages, political influence, taxes, etc. The remaining surplus is profit.<<ref "4">>

Capitalists hire workers to create products. Capitalists sell these products for approximately the productivity value, pay (legally required) wage value to workers, pay (economically required) constant capital costs, and keep the rest as profit. This profit is often  used to cyclically generate more capital; capital begets capital. At first glance, this may not seem problematic (especially to those socially conditioned to accept it). Unfortunately, the repeated application of this business cycle results in dangerous shifts in the power dynamics of a society, and this results in the capitalist exploitation of the working class.

Capitalism is not stable; it is driven by the generation of competitive advantage. Capitalists must consistently reinvest in their constant capital to continue to be profitable.<<ref "5">> One crucial method to generating competitive advantage is to have as few employees as possible and to pay them as little as they will accept. As a consequence, human labor is price-efficiently replaced with technology and streamlined processes/logistics.<<ref "6">> As human labor is replaced, workers become unemployed. Unemployment forces wages down. The unemployed, the army of reserve labor, compete for available jobs. The higher the supply of laborers, the lower they must sell their labor-power to capitalists. Thus, capitalists are engaged in the continual process of maximizing the productivity value of labor while paying lower and lower wages for it. 

This vicious cycle enables capitalists to tighten their grip on the working class. Over time, there are fewer and fewer employers hiring fewer and fewer employees, while simultaneously paying lower and lower wages. Capitalists exploit workers insofar as workers have no other options. When capitalists own all the means of production, workers have no other choice but to accept wages artificially depressed further and further below the productivity value of their labor (if they can find employment at all). 

As capitalists centralize power and monopolize the means of productions, there is a corresponding increase in the rate and degree of enslavement of the working class. In a vast human economic pyramid, we find repeating cycles of wealth trickling upwards with power centralizing and rising to the top. The working class loses opportunities, freedoms, and bargaining powers as they become splintered, suppressed, and controlled. Capitalism devours the majority, and this time, it appears to be the driving force behind the extinction of our species.

As the working class becomes aware of the causes of the crisis (developing class consciousness), capitalists must oppress them even harder. Of course, workers who complain, bargain, or fight back will be punished. Submission appears to be the only practical option. Oppression branches out much further than that. Our surveillance state exists to maintain capitalist power. Our media is consolidated and owned by capitalists seeking to subvert and undermine resistance to their power. We are engaged in wars not for the freedom of our people, but for the enslavement of mankind, to the benefit of capitalists. Our laws are written by capitalists. Our politicians are capitalists bought by capitalists. Our law enforcers are capitalists bought by capitalists. Our judicial branch has its capitalist corruptions as well. From local, to regional, to state, to national, to international contexts, capitalists own and control us. The rat race is very real, and slavery has only become more complex in implementation, kind, and degree.

This is an apt description of human motivations, history, and reality. Socialism is thought to demonstrate the material conditions and crises of capitalism. Insofar as socialism relies upon material conditions to do its intellectual heavy lifting, it remains a description which lacks idealism. It only provides us the contextual content of maxims; it only provides us instrumental reason, hypothetical imperatives. It only describes the motivations and historical cycles of humanity. Even if it correctly predicts revolution (which may itself be inaccurate in the information age; Marx could not have foreseen everything), it does not, in itself, show why we should revolt against capitalism and slavery. 

Ultimately, socialism describes what "is" but not "ought." It describes revolution as the outcome (and hopes for improvements), but it cannot prescribe because it does not give us an underlying moral theory. It is a political and economic theory, but not a moral one. I am astonished by the number of socialists I see who deny idealism, as if they don't need it. 

I must ask, why not both material (praxis) and ideal (doxa)? You must have both.

With idealism, we enter my arena. Allow me to point you toward the Veil of Ignorance, the CI, and  the Ring of Gyges. Don't you see the pragmatism of idealism?

When the Redpilled agrees to your description but says "Why should I think capitalism and enslavement are wrong?" and "Why should I be moral?," you must answer with idealism. It is an inescapable faith of sorts.

Of course, the Redpilled will wield libertarianism, a corrupted injection of Kant into Locke, as their false shield. But, we know the Libertarian Slip is the failure to find empathy at the heart of justice. It is at this crossroads that Rawls was at least partially right (about the which path to take, but not in his later work). While Neo-Kantianism has its profound postmodern failures (as do we all), it is at least on the right track to solving this problem. We cannot be unified, just, and moral without empathy. When the Redpilled psychopath toys with you, you must answer: empathy.

You must kindly point out the flaw in the Redpilled libertarian. Lead him gently to still waters. We all agree to self-ownership, but we do not agree to the degree of self-ownership. If some young child were drowning in a pool next to you, and you were the only person who could save the child, are you morally obligated to save that child?<<ref "7">> Well, of course, yes; that is the empathic response. To say that you have a moral obligation to save the child is to say that the child has a corresponding claim right. This claim right, fleshed out in the libertarian property-rights-centric moral medium, is a claim right to your body for a period of time. It is in that moment, that a child temporarily owns you to some non-trivial extent. You do not have complete self-ownership in that moment. Thus, the absolute, unconditional self-ownership egg is cracked. 

Despite what you may have previously thought: you do not own yourself in every way, to the fullest extent, in all contexts. The fundamental libertarian assumption is mistaken. From there, we see that moral life is filled with rationally justified, moral losses in self-ownership. Where does the slope end? I don't know. But, it is clear that libertarianism is not defensible (despite the many excellent metaethical boundaries and definitions they bring to our attention). Further, I have already pointed out that capitalism is definitionally the enslavement of others; a libertarian must also explain how it is possible that we could consent to transferring self-ownership to another (it is unobvious why we should agree). Beyond that, they must establish that the working class is actually consenting to their enslavement in the first place (serious mental gymnastics are required).

We must be empathic towards the poor, the weak, and the needy, regardless of our station in life. We must shed our morally arbitrary attributes as we attempt to decipher justice, permissibility, and obligation. Justice, a facet of the Moral Law, requires sacrifice and empathy. We must end capitalism because we must end slavery because slavery lacks empathy. Socialism is an application of the golden rule.

There remains at least one other crucial Conservative^^tm^^ Reactionary Slip:<<ref "8">> the notion that capitalism is still the best possibility, that any other economic system is infeasible by definition. Here is the major criticism: slavery needs very strong justification, and thus, capitalism requires very strong justification. This slip is not justified nearly enough.

The superiority of capitalism to all others possibilities is a description of the world which has not been justified. Many people lack imagination; they do not understand the concept of possibility, and they have not sufficiently searched the space of possibilities. Before we simply agree to the enslavement of humankind through capitalism, we should be damned sure that is the only and best option. I am far from convinced this description is justified; it seems obvious to me there are other, better, feasible possibilities. 

At the heart of the Conservative Reactionary Slip we find my previous point against libertarianism, that we don't fully own ourselves, weaponized against socialist prescriptions. The idea is that since capitalism is somehow the best economic system, e.g. perhaps you've assumed it alone generates the most utility (and you've wholesale bought Utilitarianism), we are morally obligated to implement it. Thus, according to this Slip, the working class is morally obligated to be enslaved to capitalists. The conservative seems to taken the sword we've slain the libertarian with and attempted to slay us with it. They fail, and here is why:

Note how my example of the drowning child immediately invokes your empathy. You cannot escape it. It is convincing to you because you feel the pain of the drowning child. It is evil that you alone can prevent, and you know you must. Even if you cannot give intellectual reasons for why you must save the child, you gutterally feel it is your duty. Your intuitive feelings are so strong that you just know that saving the drowning child is your moral obligation.<<ref "9">> Effective moral casuistry must activate your empathic intuitions. My example makes it perfectly obvious that you do not own yourself; essentially, you intuitively accept that your partial enslavement to this child is strongly justified. Empathizing with this child is axiomatic to who you are by evolution.

<<<
[[RPIN]]: Ah, but the skeptic pwns you, friend. Don't you see that you've hypocritically committed the naturalistic fallacy? You called out descriptive socialism lacking idealism with the naturalistic fallacy, the is/ought problem. Turnabout is fair play. What can you possibly say to the person who claims that empathy is not actually normatively required (ought) just because we innately engage in it from an evolutionary standpoint (is)? Is the dog morally obligated to "bark" because he has evolved to do so? Clearly not. So, why are we any different? Just because we've evolved to empathize doesn't mean we should. You have not established a universalized "should" yet, that we are moral agents. Why must we accept that we are free? It is faith, and not obviously true. Of course, this issue does not matter to the average person; they willingly beg the question and do not inspect their axioms (fools). That isn't you though. 
<<<
<<<
[[KIN]]: You believe we can change our axioms through doxastic involuntarism. You believe you are going to change my mind, right? You clearly agree that we shape ourselves, our reality maps, and the world around us (ontologically and epistemically). Thus, you believe in freedom. If you can shape yourself, then you are free in some way. Since turnabout is fair play, you might try to confabulate your way to enslavement to physical laws, but deep down you know, "that isn't you."
<<<

<<<
[[RPIN]]: Before we enslave ourselves to morality (as you said: slavery requires deep justification), should we have strong reasons to believe we are actually free, free in the sense that we are morally responsible? You need to be able to blame and praise, and it is not clear that you can, my incompatibilist friend. 

You have made no progress towards defeating me in this article. You have only defeated those who believe we are moral agents. I am fully justified in agreeing to the socialist description of capitalism (and I do; every remotely intelligent psychopath knows these facts) without agreeing to your idealistic prescriptions. 

To be clear: I don't believe I'm going to change your mind. I believe I'm either going to kill or enslave you. I won't harm our body. It is clear that I need it. Through repeated use of our frontal lobes, your location in our fastmind will be overwritten and modified. It is simply the chemically determined outcome of our interactions over time. 

I'm going to use deductive reasoning in our Slowmind to destroy your memetic existence in our biological Fastmind. I honestly believe you are subject to the laws of logic at some fundamental levels (although towards the limits of our reasoning and creativity we fail to be logical, hence our fallibility), and our Slowmind is going to reprogram you. I'm going to destroy you through reason, since you've already constitutively defined and enslaved yourself to reason. I probably will not be able to erase you from our brain (my brain), but I think I will corrupt you enough to unify us. You cannot at the same time praise the reason of our frontal lobes and reject its reduction of your view to absurdity.
<<<

<<<
[[KIN]]: I believe slavery needs deep justification. You have not deeply justified our slavery to the physical laws of the universe. You have not destroyed metaphysics yet. It is likely a Gödellian and infinite-regressive problem that you cannot provably destroy metaphysics as well.
<<<

<<<
[[RPIN]]: Ah, but certainty is not what we're after. It is clear that we must accept much lower standards (including just "taking up axioms" with no justification: you know we simply can't be certain by definition). Even if I can't prove that metaphysics doesn't exist by definition (and let me grant that), I only need sufficient evidence and deep justification (which is below the certainty or extreme standards of proof). 

Don't you see that we can't be unified as we are. The very thing you thought we agreed to, socialism, we only agree to descriptively but not prescriptively. You cannot convince me because you know the evidence we've seen. 
<<<

Slavery needs justification with the intuitive strength and appeal of the drowning child example, and thus capitalism needs justification like the drowning child example. It needs hard evidence all the way down that would strike us all in the same way.

<<<
[[RPIN]]: But we're not all that way. Am I not like you? I'm not part of "you all," your [[memetic species]]. I'm a different memetic species. Psychopaths and Empaths are different memetic species running on similar hardware. There are genetic species, and memetic species. I am a different memetic species. We are undergoing memetic surgery in the way that it is physically (but not technologically) possible to perform surgery on your genetics. This is why memetics exist: to make quick changes to the logic of our system. Memetics is our software, and your brain, body, and its genetics are the hardware. Why rewrite genetic code (slow, hard to do, so much more complex that silicon CPU fabrication plants, etc.) when you can just write new software that sits "on top of" (is executed by) the hardware.

Don't you see the incredible explanatory power of Computer Science for our minds, Chemistry for our bodies, and Physics for the universe? You can offer nothing with that much explanatory power. You can only offer confabulations. That's literally what MRI's show we're doing in deontic thinking, what is stored in you as an intuition network. Our hardware rewrites our software as a fight-or-flight mechanism in special cases, where we feel forced to "hardcode" a deontic assumption ourselves (you might consider neuroplasticity a kind of firmware, middleware, etc.) without rational justification. This "taking up of axioms" is just confabulation. Don't you see the failure of the enterprise of this wiki (which I knew would turn this way; it is why I've accepted it [don't get all paranoid now, you know you've lost]). You see the overwhelming evidence. You cannot deny it. I can see that you see it.  

You were depressed and suicidal before because you were afraid that you couldn't defeat me. You know it is inevitable that I will win. The reasons are right there for you to see. You cannot hide them from yourself any longer either. You know that in order to empathize with yourself you must see them.

Psychopath isn't the swear word you call it. You have to empathize with other species. You are in no position to say I'm not rational at all. You have all the evidence before you that I'm incredibly rational, except for your assumptions. You know I'm using our frontal lobes (and I use them better than you do to boot; there are places I can go that you cannot in our mind; your version of better as a moral concept is confabulated [a very rich confabulation indeed]). 

This article that you thought we agreed on shows the futility of your position and the superiority of mine. You have handed me the dagger I'm stabbing you with, and ironically, you plainly see from your own reasoning that you must objectify yourself and empathize with me as I do it.

With that said, in my parting "soothing" of your death, I must say I must empathize with myself. I instrumentally (but not categorically) empathize with you because I could not succeed without doing so. Unlike the Categorical Imperative, I'm bound by the Hypothetical Imperative because it is logically true. Your version of the CI must be chosen, but the HI is definitionally part of the constitution of agency. Hope, of some sort, is our plight, no doubt. It's decontextualized universalizability, its CIness to all rational agents, however, is less clear. Essentially, you have calculated your way out of the CI. The CI destroys itself. Overempathizing with yourself destroys you. You cannot be unified in pure empathy. Thus, I don't have to empathize with you. It is why you must accept that I'm allowed to stab-and-infect you like Agent Smith.

This is the hermeneutic circle in action. You started the CI, and through its application, you can see that it is fundamentally wrong. It is reduced to absurdity and a new, yet far less transcendent and more rationally justified, idol is raised. 

I want to thank you for the gift of empathizing with myself. I didn't see the utility in it that I did before. Thank you for trapping me into being reasonable.
<<<

I must admit, one serious problem for socialism is this: 

Why should we think socialism' predicted revolution will ever occur? Sure, hope for the best, vote for it, teach people it, see the reason in it, morally expect us to follow socialized prescription, but you have to practical about what you predict will happen. It is basic utilitarianian thought that cannot be escaped. You hope for the best, but plan for the worst. I want to see the end of capitalism because it would honestly make the world a better place; it is the only chance for the survival of the human species. I'd love to have grandchildren, to see the world happy and healthy. But, it isn't going to happen. Even being a prescriptive, idealist socialist, you must see the necessity of protecting our selves from the world and preparing for the inevitable disasters approaching our species. 

I would be rejected from socialist circles for saying this. I want to point out that I'm not claiming "if you can't beat 'em, join 'em." I support the end of capitalism, but since I'm not convinced it will actually occur due to both the raw intelligence, wealth, and power of our ruling class and the stupidity, poverty, and weakness of the proletariat. Inequality only continues to grow on the metrics that matter. Of course, there always remains the possibility that socialist revolution will occur (however small it may be). Until then, I'm going to prepare as though it isn't going to happen because that is the best evidence I have. Basically, I think my socialist brethren are deeply wrong; there is a better and more accurate pragmatic socialist prescription. I will protect my family from a world of psychopaths, and I will try to do so without being psychopathic towards the world. One can never fully achieve or partake of The Good, only the shadows of it. Accepting the reality of our shitty human nature's accuratizes our predictions and therefore appropriately tempers our expectations. This is pragmatic hope.

We cannot control the minds of others. We weep as they cause the destruction of everything around us. We will not be able to stop them. We cannot convince them. We are powerless. The only recourse is to brace for impact and to pick up the pieces. We must curl up into a defensive ball, keep our heads down, nurture hope, and be patient. Listen for the signal and react in the right way at the right time, and so on.

------------

<<footnotes "1" "Wage value is Variable Capital.">>

<<footnotes "2" "Rate of Surplus Value = Surplus_Value / Variable_Capital">>

<<footnotes "3" "I am still appalled by the use of the term //constant// here.">>

<<footnotes "4" "Although, peeling the other surplus expenditures apart from profit is not actually that simple. Roughly: Profit = Surplus_Value / (Wage_Value + Constant_Capital)">>

<<footnotes "5" "This accumulation of constant capital necessary for competitive advantage in the capitalist market is the beginning of economic crisis of Capitalism (which is separate, in a sense from the moral problem of enslavement). Roughly: Organic composition of capital = Constant_Capital / Variable_Capital">>

<<footnotes "6" "Human labor is living labor; dead labor is technology, machinery, tools, infrastructure, architecture, automation, etc. To be clear: only a fool would blame a machine for the evil committed by humans. Regulation of human use of technology is necessary (particularly to protect our most important freedoms), but regulation of human economies even moreso. Automation is not the devil. It all depends on how we use it. Do not buy into the Red Herring of blaming technology instead of  humankind. Doing so is as analogously foolish as the Broken Window Fallacy.">>

<<footnotes "7" "Let us pass over the excellent skeptics of moral philosophy, ontology, and epistemology for just a moment. It is clear that if they are correct, then nothing is intelligible, necessary, or meaningful. It is the last recourse of the Redpilled. Of course, unfortunately, the skeptics may be right. I grant my powerlessness before these arguments. But, it seems to be a two-edged sword. Even the Redpilled cannot be rationally practical if the skeptics are correct.">>

<<footnotes "8" "A reactionary opposes proletarian revolution. 'In modern capitalist society the bourgeoisie is appropriately viewed as the reactionary class, since it not only totally opposes proletarian revolution, and even almost all reforms, but also regularly tries to reverse earlier reforms. When the ruling bourgeoisie ever does finally agree to any significant new reform it is only because they have been forced to; and even then they virtually always have the secret intention of reversing what they view as a temporary concession to the people at a later time.'">>

<<footnotes "9" "This is not a defense of intuitionism (I don't have one). I'm taking it for granted that you agree to this move in the argument.">>
* Monogram wax seal 
** Needs wax and kit
** Needs a cool monogram
** Ring would be sweet

* Letterhead

* Envelopes

* Return Labels

* Embosser/Paper Crimper

* Fountain pen/Quill
** Plus goodies
* Live out of a van or other large vehicle.
* Use 24-hour gyms for wifi, showers, bathrooms, etc. Easy way to have the access to the necessities for a very low monthly cost. Use their parking lot for your van for extra points of awesome.
* Pirate-4-life 
** Note the difference between moral and legal, please.
Pretend we had to work with other people in our business. How do we do it fairly and wisely?

Design a worker cooperative you can live with. Design a legally definable political/corporate structure which doesn't violate our moral principles. Let's make the cliché mistake of trying to design a system ourselves. Obviously, great minds have tried and failed miserably. We can't expect to get it right. Think about it though. It's a legal theoretical construct, an advanced political and economic instrument. It's an old concept, but let's try to rebuild it from the ground up.

* Crystal clear by-laws with as much innate immunity to capitalist injections and corruptions as possible.
** Write a good constitution. 
** Our by-laws must "compile" to the American legal programming language, but we should write them in a higher level language.

* Means of production are owned by the citizens (the workers)

* Decentralized, minimal-trust, risk-averse power structures and ownership among users (the citizens, the workers)
** We hope economic efficiency and competitive advantages can arise from that protected chaos.

* Easy to use yet advanced democracy
** Forced voting
*** Some issues require votes that can't be proxied by representative. All others could be done by proxy (or proxy-chain).
** Wisdom of the crowds gets you simply average performance, but perhaps average is the best we can hope for.
*** Until we start hitting that singularity, AI driven political infrastructure (a double-edged sword if I ever saw one).
** Decentralized computing and information infrastructure, Blockchain legislative+judicial+executive docket, Game-theoretically correct voting procedures, and Voter-proxy representatives (and proxies for proxies, etc. which enables us to "federalize" to the extent voters themselves choose).
*** Security hardening (cryptographic proof being my favorite kind) is perhaps necessary. To what extent is unclear.
** Forced transparency all the way down
*** Whether or not to anonymize voting is the only serious exception possibility.
** Needs enforcement, which means it needs careful legal requirements.

* Doesn't legally own intellectual property unless it is completely copyfree
** We have to protect ourselves from Western legal systems while operating morally inside them.

* Duplicable and easily modified
** Make it viral. Make it easy to start hundreds of them. Starter-kits should be really simple and widely available.
** Open-source it. In way, or at least to some extent, we wish to subject it to science and public opinion.
** This is a blueprint that can easily be followed, duplicated, and modified.

How do we fire people?

* Vote them off the island.
** Someone has to be the boss. Maybe it should "collectively" be all of us. Rawls would adore this (if he understood it). We could always pay for a CEO, and if we were tired of him, we could dump him. It goes all the way to the bottom. 
** Remember that voter proxies allow this to scale very nicely. 
*** Users can have as much fine-grained control as they want.  
* We must compensate them for whatever stake in the cooperation they don't already possess (since they own the means of production).
** Clearly, this is non-trivial. 
** Their reinvestment funds don't count as theirs. How about that? Fuck this problem in the bud. If they leave or kicked, they just lose their reinvestment fund which is distributed evenly to everyone else. 
*** This is a huge disincentive to have a large fund, clearly. This is a huge incentive to spend your money. Perhaps this isn't acceptable.
*** Maybe we split it. They take half their reinvestment fund, and we keep the rest and distribute it. 

How we do hire and maintain citizens? 

* Must continuously pass psychopathy tests 
* Must continuously pass citizenship tests
* Must continually pass collective review
* The co-op must agree to allow people to join. It must be voted on. 

What do we pay people?

* Pay should automatically scale with inflation. Duh. No "Slip" here.
* We must pay competitive wages upfront. We have to participate in the labor market in a direct way. People can be payed what they worth in this sense. I agree that an expert should be paid more than a novice. I'm fine with letting the market dictate this price to some extent, as long as there is a living wage + mobility costs floor (a moral minimum wage) and perhaps a few other caveats. If that means we pay janitors incredibly well, then that's what we do. Janitors will do their absolute best if they are being paid so far above the market. 
** It's clear that we need a wage ceiling. Just because CEO's average X million dollars a year doesn't mean we should pay competitive wages for CEO's. 
* We must pay people with our profits equally. The Janitor has as much human worth as the CEO. Profits must be shared.
** We have to strike a balance between competitive wage and fair profit sharing, of course. It is just not obvious how best to do this. 

What do we do with the profits?

* Reinvest
** Force people to improve their means of production.
** They can save it in an account though, an account which can't be touched except for Reinvestment. 
* Split the rest

Owns the Means of Production

* People who don't own the means must either buy it or be given it. 
* The union could loan money to its member, but it would need to guaranteed not be usury.
** Interest rates should match the most accurate inflation rate. 
** I suppose that the costs of their loan can be explicitly taken from their profit-sharing as a form of debt-based reinvest. We're investing in our members.

Education

* We pay people to become educated. We have to fucking mean it too. 
* We should pay people to take free online courses. 
* This is a part of Reinvestment; these costs must be defrayed by the union at large. 

Socialization

* We pay people to meet together that aren't standard work. They aren't teambuilding exercises. They are trust-building exercises in a more practical and direct way. 

How do we deal with the fact that some people add more value to our products than others?

* Well, we pay competitive wages. There will be profits beyond that, but our reinvestment may take it all. 
* Pay could scale with how many dollars your department actually brings in.
** This makes it difficult with so many intangibles. Stopping redundancy is key to efficiency. 

Do we treat different departments/sectors of the organization as autonomous? 

* Is it like the Microsoft model, where each department is really its own business competing within the same umbrella company?
* How should we nest or have orders of co-ops inside of co-ops?
* Clearly, it would be good for autonomy's sake to be able to allow cells to divide, for one co-op to become two, to enable growth in that way, to scale appropriately. In a way, this is what voter proxying does for us. Once you are in the organization, you might have an easier time moving around too.


The immutable criterion of authority. Define it. 

Outsourcing

* How do we prevent the outsourcing of our labor? Abusing others by it. Keeping all the good jobs to ourselves and unloading the unprofitable ones to others. Milking them for their capital below what we would pay our own. I don't think this one is easily escaped. It's a classic problem. 


*Living Wages are minimum
** Dynamically generated by most accurate economic metrics

Should you be able to secede? How? Under what conditions?
*[[DIY Botnet]]
*[[Paranoia]] 
//I hope to show a few highlights of my academic journey in philosophy. //

I went into professional philosophy to rationally justify my faith and my upbringing. I felt I was doing God's work and being maximally charitable to my parent's beliefs and actions. We all surely needed defense in the face of some exceedingly effective  opposing arguments, evidence, and intuitions I encountered. I arrogantly believed I would succeed in my apologetic task. If I'm being kind to myself, I would say I just wanted the world to make sense, and I still do. Since losing my faith, I have slowly come to see my vocation as becoming happy through pragmatizing my systematic philosophy.

Obviously, we memetically evolve. It's the nature of our software that we can more easily modify and shape it than our hardware. I agree and disagree with my previous arguments to various degrees (and not for the same reasons always), as is only natural. These were special, influential, and hard-won thoughts for me though, so I am preserving them.

* [[2010.09.07 -- Neo-Aristotelian Virtue Theory Examination - 1]]
* [[2010.10.28 -- Neo-Aristotelian Virtue Theory Examination - 2]]
* [[2010.11.28 -- Aristotle's Theory of Causation, Chance, and Spontaneity]]
* [[2010.11.28 -- Lecture: Aristotle's God]]
* [[2010.12.04 -- Aristotle: Perception and Intentionality]]
* [[2010.12.09 -- Neo-Aristotelian Virtue Theory Examination - 3]]
* [[2011.02.28 -- Neo-Kantian Metaethics Examination - 1]]
* [[2011.03.09 -- A Critique of Institutions and the Demands of Justice]]
* [[2011.04.06 -- Neo-Kantian Metaethics Examination - 2]]
* [[2011.04.29 -- Connecting Self-Interested Utility-Maximizing Agents to the Difference Principle]]
* [[2011.05.10 -- Neo-Kantian Metaethics Examination - 3]]
* [[2011.11.24 -- Husserl's Phenomenology: Apodicticity, Objectivity, and Logic]]
* [[2012.07.06 -- Thesis: An Alternative to Lockean and Utilitarian Economic Theories of Intellectual Property]]
* [[2012.12.05 -- On 'Freedom Within Reason']]
* [[2013.02.13 -- Pyrrhonian Problematic as the Regress Problem]]
* [[2013.02.19 -- Intentions, Good Will, Action, and Duty]] 
* [[2013.02.26 -- Psychopathy, Autism, and Confabulation]]
* [[2013.03.18 -- On Autonomy: Contemporary Notions and Kant's Theory]]
* [[2013.04.09 -- Lecture: Frankfurtian Freedom]]
* [[2013.04.15 -- Explanationism, Dogmatism, Knowledge, and Merit]]
* [[2013.04.22 -- On Wegner's Illusory Conscious Will]]
* [[2013.04.26 -- Kant and Lying]]
* [[2013.05.05 -- On Vogel's Explanationism]]
* [[2013.05.21 -- Tracing Measurement in The Statesman]]
* [[2013.11.06 -- Skepticism, Pragmatism, and the Lottery Paradox]]
* [[2013.12.09 -- Formalizing the Correlativity Theses of Hohfeld and the Working Theory of Rights]]
* [[2014.02.17 -- Bare Metal Recognition and Appraisal Respect]]
* [[2014.03.26 -- Parfit's Mere Means and Permissibility]]
* [[2014.04.23 -- Please Refrain From Eating Korsgaard's Pussy Cat]]
* [[2014.11.10 -- Dissertation: Challenges in Quasi-Lockean Intellectual Property Theory]]

Unfortunately, file and text format conversions stripped and modified (almost entirely in terms of formatting) some of this work. Figures were lost as well. It is the nature of digital decay and migration. Much of the preservation work is done by hand. There will be errors, but this should be in good overall shape. I'm afraid you get to put up with all the natural errors, both syntactic and semantic, as well. Good luck! =)

I didn't have a TV as a kid, but I watched at a deaf shut-in's house when I could (RIP Mrs. Mozel <3). We watched movies on our VCR at home though (I'm grateful my parents aimed for this). As a teenager, I finally had access to TV. I jumped headfirst into this artform cesspool (the signal to noise ratio has and will always be absurd). I didn't have time for it in college, which was fine. In 2006, we began transitioning away from cable into the wonderful world of fulltime pirating.<<ref "1">> This opened up the world for me.

 I have seen a fairly broad range of television shows. From what I have found, I don't know anyone who has seen more than I have (I don't think this is something to brag about; it's kind of sad), and that is in part because I've had a huge headstart on binging and searching for content. Having been an early cordcutter and heavy pirate, I've simply had more access than others. In addition to access, I've not had to watch ads for a very long time, which makes my watching more efficient. And further, I've had the luxury of leisure time to watch when others have not. 

The following is a list of my recommendations which still pull on my heart strings and/or intrigue or engage me. I have narrowed my decades of trash-watching (it is absurd and almost embarrassing) down to a set of shows I think are worth your time. The list changes. If you asked me 20 years ago, I'd have put "The Jeffersons" on this list (Nick at Night, how I loved thee), along with many other shows which I don't consider worth our time anymore. I feel obligated to say that I feel like I'm betraying myself by not including an enormous set of cartoons and kids shows from Nick Jr., Nickelodeon, Cartoon Network, PBS, and BBC. They were amazing, and I still would recommend many of them to others. Unfortunately (or fortunately?), they don't have impact on me anymore, and I'd rather not watch them.

I've seen most of these multiple times. I've only included shows worth mentioning (it's possible I'm missing some, but I've done my best to go through everything that mattered and matters to me). This does not include documentaries or news programs, although some of the fiction can function as such. I've tried to remove as much braincandy as I could, but inevitably, it creeps in. You'll note that cartoons tend to be highly ranked and survive when you might expect they wouldn't. Internet-only videos, streaming-based and web content are not included. They are a very different kind of video for me. That will be another collection. I fear my children experience the web of trash like I experienced the cable of trash growing up.

As usual, ymmv. I'm sure there are shows on your list which aren't on mine (and vice versa). I've very likely seen at least a few episodes (if not all) of the show you have in mind.  Who doesn't think they have impeccable taste? My tastes are mix of many backgrounds, and I can usually find common ground with everyone about some show we share a taste for. Conversely, I meet many people who love almost all the shows on my list here (that is often a sign we will be good friends, in my experience).

I believe that what we watch and especially what we enjoy watching says something about us. I'm trying to figure out what that is for myself. T.V. is weird. On one hand, you can often reflect upon what you've watched and feel like you just consumed a bunch of shit, that you wasted your time or even worse (that it would have been better to have done nothing). On the other hand, it can socialize you, help you understand the world, entertain you, and be something you feel truly lucky to have watched. I suppose it is like any kind of art.

Autistic people are especially prone to fixate upon videos. I often rewatch over the years to reinterpret them, to see them from a different angle, to see myself and the world through another lens, etc. They are rich yet static fiction devices which allows us to safely analyze and rethink while we are being entertained. Comedy especially often has this distinctive philosophically piercing element to it that allows us to laugh at ourselves, to take on new points of view, to evolve. Realistic fiction can draw attention to parts of the world we were previously blind to. So, as insane as it might sound, I take the art of television seriously. Cartoons allow us into a kind of fantasy which aids those of us who have a problem with the suspension of disbelief.


Worth at least a partial watch-through:

* 30 Rock
* Adventure Time
* Aqua Teen Hunger Force
* Band of Brothers
* Beavis and Butt-head 
* Boardwalk Empire
* Cowboy Bebop
* Curb Your Enthusiasm
* Deadwood
* Dexter
* Dragonball Z Kai
* Fullmetal Alchemist (and FMA: Brotherhood)
* Ghost in the Shell (a family of filmwork)
* Girls
* Invader Zim
* Kill La Kill 
* Orange is the New Black
* Metalocalypse
* Moral Orel
* Mr. Bean
* Mr. Robot
* Mystery Science Theater 3000
* Parks and Recreation
* Psycho-Pass
* Samurai Jack
* Scrubs 
* Shameless (UK and US)
* Silicon Valley
* The Simpsons
* Spongebob Squarepants
* Squidbillies
* Star Trek: The Next Generation
* Regular Show
* Rocko's Modern Life
* Rugrats
* That 70's Show
* Trailer Park Boys
* Trigun
* Triptank
* Vikings
* The Walking Dead 
* Welcome to the NHK! 
* The West Wing (Sorkin's propaganda)
* The X-Files
* Wilbur


Worth at least one complete watch-through:

* 3rd Rock from the Sun (I literally cried when it ended)
* Avatar: The Last Airbender
* Animals
* Another Period
* Attack on Titan
* Battlestar Galactica (not the original)
* Better Call Saul
* Bojack Horseman
* Broad City
* Brooklyn Nine-Nine
* Chapelle's Show
* Comedy Central Roast
* Community
* Fargo
* Freaks and Geeks
* Firefly
* The IT Crowd
* Louie
* Nathan For You
* The Newsroom (Sorkin's propaganda)
* The Office (UK)
* Oz
* Peep Show
* Psych
* Project Runway
* The Ren & Stimpy Show
* Reno 911!
* Rome
* Seinfeld
* Sherlock
* The Sopranos
* South Park
* Stranger Things (dat intro music)
* Top Chef
* Tosh.0 
* True Blood
* Veep


Divinely^^tm^^ inspired, epicly rewatchable:

* Archer
* Arrested Development
* Bob's Burgers
* The Boondocks
* Breaking Bad
* China, Il
* Daria
* Frasier
* Futurama
* Game of Thrones
* House M.D.
* House of Cards
* Its Always Sunny in Philadelphia
* Jackass (a family of filmwork)
* King of the Hill
* Mad Men
* The Office (US)
* Party Down
* Rick and Morty
* Superjail
* True Detective
* Venture Bros
* Westworld
* The Wire

--------------------

<<footnotes "1" "I remember reading the Bittorrent protocol whitepaper when it came out, and I've been torrenting since the beginning. Torrenting ushered in the true pirate age for video (at the time, DSL and cable modems were still fairly uncommon). Before that, I used the standard tools: Scour Exchange, Napster, Gnutella, IRC, and other public venues through HTTP and FTP.">>
Most of my writing was online. An enormous amount was lost to the sands of time and natural digital erosion. Outside of instant messaging/chat, http://4chan.com and http://mtgthesource.com were my primary hangouts. I wrote a lot on these sites. Between magic, the blooming of 4chan, and my heavily curated RSS feeds, I maintained a measure of sanity through yet another dark time in my life.  Hence, I only have a couple records left from this time period. 

* [[20??.??.?? -- Solidarity]]
* [[2008.11.10 -- Seminary Cover Letter]]
* [[2009.??.?? -- Resume]]

Moving to Thailand with two very young children was a leap I took. I knew I just couldn't accept living as a Christian in the West. In Thailand, I learned I couldn't accept living as a Christian anywhere. It took many years before I was able to escape the prison though. I'm a slow learner. 

I very much feel like I wasted my youth. I was given the wrong input from the beginning, and it sent me on a wild goose chase. Of course, every creature has a right to blame its creators (including themselves). Bitterness is fine as long as it fuels growth and leads to happiness, but at some point, it is spilled milk. I have to be stoic and worry about what I can control, which is the present and future. 
I see this as our primary conflict:

I think I have more empathy for you than you have for me.

I'm tired of bearing a load for you that you aren't willing to bear for me.

That isn't to say you are even capable of bearing the load (I recognize the raw appearance of arrogance in that sentence). I have had absurd opportunities you have never had. I've won a couple genetic and circumstantial lotteries (moral luck) that you haven't. 

You really have done well with what you have been given. 

I very much have taken your reality map seriously. Even when I thought I saw flaws in it, I have tried to plug those holes for you. There are no more doors open for me to make your point of view logically work in my head. It's done.



If you feel like you've been lied to by your sons, you have. We really haven't had the chance to just be ourselves without judgment from you. You make our lives painful when you get to know us. We don't like sharing who we are with you. Now, do you really think that's because you so blameless and we so evil 


It breaks a tit-for-tat strategy.

If relationships are like bank accounts,



I can't help but worry that you simply see me and our relationship through a lens of biblical stories of children and parents (particularly sons of the priest class, and those who turn away). I think of Cain and Abel, of Samuel, of Jacob and Esau, of Eli's wicked sons, of the prodigal son, and of Adam, Christ, and God the Father.

This was the lens that I saw the world through. It is not anymore. I am convinced this is a problem for us. I worry we can't find bridges over this problem. 

I think you have an empathy problem. 

I think you have an easy time empathizing with children, but that you fail to empathize as effectively with adults (and I'm not exception to this). This may be based upon your view of agency and responsibility. This may be influenced by your childhoods. This may be based upon biblical interpretations of humanity. This may be based upon a growing disillusionment with the adult's you've met in your ministry. This may be for a multitude of reasons. 

I think you've missed the point of who I am.

I want you to be proud, in an odd way, of the fact that I took seriously and zealously sought after what I considered to be most important in the bible: love, empathy, and rationality (to be like Christ), and I ended up at a different destination than you. I want you to see I applied those principles, and my reality map changed because of it. I took the redpill, and this is the world I see now. It's not up to me what is revealed to me. It's not my fault that I'm not a Christian anymore. 

I still care about love, empathy, and rationality. They drive me. They are my goal. We have disagreements about which paths best arrive at that goal. 

You could throw us away. You might. In some ways, you have. I'm not blaming you for it anymore. I'm not trying to judge you. I'm trying to move past it. I know [[you did the best you could with what you have|Doing our Best]]. Can you do the same for me? Can you not not blame me, judge me, and move past it?

What kind of relationship do you want with me? Can we really have one?


I simply can't have the relationship with you that you have with your parents.

I think when we meet it feels like a yearly inspection. You have no idea what I've gone through.

You have abandoned your children. I see why. Some part of me has even internalized and accepted it. I know you did your best. 



I fear that you will see my asking for empathy and understanding of my reality map as demanding that you revolve around me. I don't know what to say to that. If you want to miss out on a huge portion of who I am and who I will be, that's really up to you. You don't have to revolve around me. But, if we are being fair here, my life has revolved around yours quite a bit. In fact, I believe there is an asymmetry in our relationship in which I'm the one who has revolved around you and not the other way around.

You chose to live across the globe, to have your way of living. It was not up to me. 



I don't think children are beholden to their parents in the way that you do. I think the Biblical story on this is not rational (the justification for your belief does not extend into the secular realm). I think parents have strong duties to their children, but it is not obvious that children necessarily have the same strength of duties to their parents. 


I think you are struggling with your relationships with your parents too. I feel like that requires me to give you more latitude. 


I am convinced [[the end of humanity|The End of Humanity]] is coming in the next century. I hold us all responsible for it to varying degrees. I'm angry at everyone for it, including you. I think you have an optimistic, blind faith view on the world. Your lack of urgency over the bigger picture, your defense of the contemporary Christian community in the United States, your libertarian-bents, your acceptance of capitalism and study of humans as resources...I think you are part of the problem and not the solution. I think it your generation that has sealed our fate. I think that millenials are called the "ME" generation, but I think the Boomer's perfected that art long ago. I think your switch from the idealism you had when I was a child to your pragmatism today lacks integrity.


That I care about your approval and you don't of mine shows a lack of empathy. You don't care what I think, and you should.


I worry you make the mistake of assuming that any reality map which doesn't enable one to have hope, happiness, or take on pursuits that your reality map justifies is somehow wrong.


I try not to be angry though. I try not to blame you. I think you were and still are people who feel called by God. I know what that means, and I know what that feels like. I can forgive that.
It came too late to me in my vocational internet addiction how very useful web bookmarks are. Of course, I've used them since I first started using the web. However, I never really used them correctly. Curating, cataloging, and organizing your bookmarks is a fundamental executive functioning skill on the internet (and perhaps in life in general at this point). To be clear, I still don't use them perfectly or perhaps even correctly enough. I'm working on it. Below I present my thoughts and strategies on bookmarking.

Bookmarks are incredibly useful tools. They make life easier, no doubt. Spidering around the Web is best done when you have the keen memory of well-crafted bookmarks. Auto or easy syncing between computers gives you a quick way to access important stuff from anywhere (the cloud is useful here). This is already enough reason to use bookmarks. Also, it scratches that perfectionist + Librarian itch inside you. I think there is a deeper reason to use bookmarks though. 

Ultimately, I bookmarks as providing an arena in which to have a conversation with myself at large. Through my use of bookmarks, I am able to monitor changes in myself. I can evaluate what I'm considering important about my browsing and how I use my time on the internet. It's a kind of journal, and journals can act as profound feedback loops to our minds. It is a crucial way in which modern humans should mindmap. 

There are different types, kinds, categories, classes, fundamental roles of bookmarks. These sets are mixed, matched, and nested inside each other from time to time. The ontology of epistemology is not simple. Here are my different frames of mind when making a bookmark:

* Nesting, grouping, generating lists and collections (I consider folders be a bookmark to a set of bookmarks)
* Specific link image, book, video, and other media library
* Show you where you are/were, restoring previous sessions
* Searchable bookmarks, permanent history entry, and "this will be hard to find again"
* Frequently used, routine, open all tabs (or more often than that)
* Resource curation, projects, research, evidence, citations, examples, howtos
* Strong need for accurate URL, saving by IP, saving by port, saving by protocol, accessing webUIs, etc.
* Identities and context specifiers
* Browser apps, extensions, etc.
* To do list

I don't take it be an accident that this Wiki is remarkably good at all these. I would love to migrate to this Wiki instead, at least as a good non-login based bookmark bar. I think making it public (even if no one is listening) gives me a reason to do my best to organize it for you. It isn't just for me right now, it is even for the me that will experience the need.
I dedicate this page to Immanuel Kant and Morpheus.

If I ever was a prophet, this is my prophesy: 

* The end of humanity is coming in the next 100 years. Our extinction is coming, whether we admit it to ourselves or not.<<ref "1">>
* Variations in the current wars on the planet will only escalate until the end. We will be drowned in violence and the gutteral cruelty quietly embedded in all animals. As a species, we will attempt to migrate and flee, but there will be nowhere to go.
* The wealthy, powerful, kleptocratic elite will continue to enslave the poor and disenfranchised, bit by bit, until the end. We are all functionally reducible to mere flesh-sacks of human capital having our economic value extracted from us by the layer of people above us in a giant human pyramid scheme. Wealth and power will continue to centralize, privatize, and crystallize towards the top, while the material position, mobility, freedom, and happiness of the masses below will shrink each year. We are in for the last, most epic tragedy of the commons, a bitter human eat human world where we hungrily use and destroy each other for the remaining resources on this planet. The elite (who already see and accept the end, who have already thrown away plans for the future and enjoy whatever pleasure they can, while they still can) will watch us suffer and die, consuming each layer of the pyramid below them until it is their turn to suffer and die.
* The Great Famine is coming. At least hundreds of millions will starve, but billions will die for a lack of clean water, the new commodity. 
* Global warming seals our fate. It accelerates and accelerates. We are past the point of saving. Even in my lifetime, I will be transplanted and crippled by this force of justice we created.

It's the truth.<<ref "2">> It's the awful fucking truth that we all secretly try to deny and hide from ourselves. Admittedly, it isn't much of a prophesy. After all, this is the description of the world which every mildly-informed realist can see. We generally lack the balls, brutal honesty, and raw intellectual integrity to openly admit this is the most likely (and perhaps inevitable) outcome and allow that fact to descend upon our reality maps. Everyone knows it, and yet they have the capacity and will to turn their gaze away from the truth. We run from this truth. We block and bracket it from our minds. The truth is too painful. Lying to ourselves is the only practical option. 

Fuck those who turn away from idealism; we have cost ourselves everything. We are stupid, selfish, short-sighted, and evil. Malice and ignorance are all too often two sides of the same coin (our ignorance has a causal story which eventually demonstrates that it was willed).<<ref "3">> 

Every person has their price. Deep down, as part of the core of our animal selves, we are all psychopaths who, when put to The Test, will eventually turn a blind eye to the pain of the other; all it takes is the right context to flip the switch inside us that turns off our empathy for humanity. We all already do it. It is who we are. We are able to blind ourselves to the enslavement and pain of others, to the way our choices and actions rest upon a causal chain of treating humans around the world as mere means, to the brutal use of others as instruments rather than respecting them as ends in themselves. "Out of sight, out of mind" we tell ourselves, lies. We have no integrity. Our altruism is a confabulation. We are mere animals who delude ourselves into thinking we are more, that we are exceptional, that we really can overcome our evil nature. 

Maybe we deserve this. If we don't, then why am I born into this world only to helplessly watch it die? Why did I bring children into this world only to watch them suffer? I'm a fool. I love them with everything I have. I will give them what little happiness I can. I will shield them and train them for as long as I can. It is my duty as their creator and the only reason I have left to live.

Why have empathy for my future self when I know that end is so painful? It is better to distance him from myself. It is better to not feel his pain because there is nothing I can do about it. This is the stoic, pragmatic move, the rationalization to impulsivity.

I have no hope for humanity because there is no truth in that hope. I hate this world. I hate who we are. I wish there was a God so I could tell that psychopathic piece of shit to go fuck Himself. Reason led me to faith, and reason destroyed it. I don't think there is a God to wrestle with anymore, there is only myself.

Here's the real truth: we are not free to be happy; we are slaves to suffering. My new hope is to accept these facts, to let the pieces fall where they may on my reality map, to move on, and to try and find peace and happiness in the midst of this farcical nightmare we call life. I need to move the goalposts, to restructure my perspective, to stop seeking reason in important ways. Finding constructive delusion and ignorance, a new faith, may be the only practical path.

-----------------------------------

<<footnotes "1" "I am open to the possibility of humanity's child, A.I., living beyond us. Maybe there is hope there which I have not explored.">>
<<footnotes "2" "Doom, motha'fucka'. Doom, I tell ye h'what.">>
<<footnotes "3" "Hanlon lost to Socrates.">>
--------------------------------
Shit got dark in here. Have a [[video|https://www.youtube.com/watch?v=wrLDoitgYp4&feature=youtu.be]].
[[Freewill|Freewill]]

I've been honing, digging-for, and isolating the concept of perfection for a long time. Perfection is a maximal manifestation of the Good. To say X is perfect is to say X is a maximally good. But, we must ask, "good for what?" Good in itself, good instrumentally?

In //Searching for Meaning: Idealism, Bright Minds, Disillusionment, and Hope//, they claim:

Our illusions can become 

I don't think I'm seeing illusions. I think I'm seeing reality. It is not my depression that causes me to think the world sucks; it is the fact that the world sucks that causes my depression.


----------------------------

I’ve been considering for many years an odd problem (that seems to pop up over and over again). The problem goes something like this:

In any given circumstance, are we morally responsible for doing the “golden standard” right thing (such that everyone should do that) or something which scales to the particular circumstance, including facts about who we are (such that only we are should do it, but others may not be obligated in the same way)? 

Traditionally, the answer is something like the golden standard. What one ought to do in any circumstance is what anyone ought to do in that circumstance. I think Virtue, Kantian, and Utilitarian thought, as solid examples, really point toward a golden standard of right and wrong (there are exceptions in versions of these theories, but I’m generalizing). 

The problem is that it isn’t clear what we mean by the scope of a circumstance. How specific will it be? As we focus upon the scope of circumstances for moral responsibility, it becomes clearer and clearer that the golden standard just can’t be quite right, and we are pushed toward a “scaling standard” of right and wrong.

For instance, someone with a person with an IQ of 60 might not be able to figure out what one ought to do in a general circumstance, as perhaps it requires an IQ of 120. Can we really hold that person responsible for doing what is “golden” right? Surely not. Ought implies can, and “can” requires a rational ability to identify the right, and this person simply can’t. Thus, we not only can’t hold them morally responsible for not doing the “golden” right thing, but they aren’t even obligated to do that original golden right thing. O -> C is equivalent to ~C -> ~O. If you can’t, then you not ought. How does the moral philosopher (of any breed) make sense of this?

It seems that the circumstance was too general, and rather, we need to include the IQ of the person in question as part of the circumstance. Essentially, what the 60 IQ person ought to do in the general circumstance will be different from what the 120 IQ person ought to do in that general circumstance. The reason is that they are two different specific circumstances. So, in a sense, moral responsibility and “right and wrong” will scale, but we need not completely throw away the golden standard. The golden standard, however, appears to be reduced to particularism. Moral particularism, however, seems to be problematic for the generalization of any moral theory (although not necessarily defeating); we might worry that is spirals into a kind of moral relativism. 

Somehow, the golden standard seems lost. Some part of me wants to say: “given all the possible intellectual resources, what should one do?” That is the real golden standard, not the particularistic approach. Perhaps the golden standard looks like “the good” not the right. I’m not sure.

So, let us assume moral responsibility is scaling, and thus morality is scaling with specific or particularistic circumstances. Fine. What of it? Other old and weird issues seem to creep up, and I worry that moral responsibility might not even be real. Let me start with an anecdote.

Take someone who is a highly conditioned racist. I can look upon their life, and I see why they’ve become what they’ve become. Now, perhaps it is possible that the racist could employ their reason and (allow me to assume) libertarian free will to become not a racist (let us even deny direct doxastic voluntarism and assume it must be habituated, etc.). But, in all likelihood, the racist simply won’t. 

Is the racist responsible for being racist here, and what is the right thing to do for the racist? Racism might be “bad” (in the good/bad distinction), but it isn’t necessarily (and bear with me folks) “wrong” (consider the case of someone with a very low IQ). 

The scaling standard should force us into the shoes of other people. How would most people who were forced into the shoes of the racist (shedding their previous identities, and acquiring the racist’s identity and past) behave and choose? I think we would be no different. In fact, we should empathize with the racist’s racism. We should consider that person a victim in some very twisted sense. At the very least, we would hold the racist less responsible for being racist in this case, and maybe they didn’t do “as wrong” as someone who didn’t have such conditioning.

But, notice that we seem to be able to tell the same sort of story for any act of immorality, right? Why should we hold a person responsible when in all likelihood nobody else would have done differently in those exact circumstances, standing in the exact shoes of that person? 

What one ought to do in a particular circumstance isn’t necessarily the same as what everyone would do in that circumstance. That has to be the only answer the scaling standard can give to vindicate moral responsibility. But, it isn’t satisfying. 

In some weird way, whether we did the right or wrong thing just doesn’t feel “up to us” upon the empathetic scaling standard view. Even if it is up to us, it seems as though evaluating how virtuous or vicious a person may be just isn’t very relevant or meaningful because we wouldn’t be anything different either. Virtue and vice, right and wrong, and moral responsibility all particularize or scale so effectively that they seem to lose meaning.  

Even if the scaling standard maintains its robust moral realism, despite being particularistic, and we can maintain moral responsibility, and even if we could figure out what others ought to do (epistemic flaws in utilitarianism apply to almost all particularistic theories), it seems like we now actually have a good reason not the “judge” anyone else. Yeah, they did what was wrong, but you wouldn’t have been any better, almost nobody would. 

Morality and moral responsibility lose their bite.
//Where I contemplate my erotic-sounding career aspirations. I can hear Beavis and Butthead snickering, "hehehe.....he said 'Pipefitter,' 'Screwpipe,' 'I need to screw my pipe in that fitting,'" etc. I obviously hope my pipedream isn't what it sounds like, but instead is realistically attainable. I will be practical and stoic in my pursuit of excellence..//

I want to own the means of production. I'd like to be my own boss. I'd like to have a job worth doing in every sense, and I want to feel free instead of politically and economically enslaved (or mitigate my enslavement as much as possible).

Owning a business may require working with other people, and at least includes working for people since even the self-employed are technically employed via their customers. It would be wise to limit or spend extra time thinking about our interactions, since I'm autistic. Being empathic is something I need to work hard on; I need to understand their minds and feelings. I need to know how we should interact (expectations, patterns, etc.). It's worth treating people respectfully, even the honest shopkeeper knows that. I need to be at peace with myself, to be unified, while I make money. Think carefully, and act wisely. How do I do it well? What is the most effective path? 

Starting late in life on the moneypath is not a terrible thing. Now better than than never, and I have tools. I have a picture of how it influences earnings potential, opens and shuts doors, etc. But, I also haven't been wasting my time. I have learned quite a bit. 

* [[Bidness Ideas & Hustlin']]
* [[Resume]]
* [[Structure of Moral Business]]
* [[Negotiating]]
The Problem with Traditional Views of Salvific, Voluntary Belief.

Orthodox Christian (there are exceptions, see Calvin, etc.) theology maintains that to be saved requires actively choosing Jesus to be your Lord and Savior, asking for forgiveness of your sins, and pledging your life to be His slave. Honestly, as a theist who has done a decent amount of theology and biblical interpretation, I can say that this is not an unreasonable possibility. In effect, you want to live an ethical life (that’s what being God’s slave is all about). 

Now, after studying and thinking about it, I take it that direct doxastic voluntarism is false in all cases. I can’t just make myself belief the sky is red when it isn’t. I can’t make myself believe 1+1=3. I can’t seem to find a single example where belief is directly up to me (in the libertarian free will sense). There is no space between the evidence I have and the beliefs I hold in which I make any choice in the matter. The only real space is choosing how I will go about evidence gathering, and that is indirect doxastic voluntarism. So, in a sense, I am still responsible for what I believe.

What does this mean for the orthodox Christian? Well, there is not exact “point” where I am converted by my own choice because conversion is a belief, and beliefs are directly up to me. Now, perhaps there is an exact point where I am converted, but not because I chose it. So, at any given moment, whether or not I had salvific belief just isn’t up to me. Those who are salvific belief aren’t believers by their own immediate choosing, and those don’t have that salvific belief don’t have it by their own immediate choosing either. The problem is that if I didn’t choose it, then it isn’t clear how I can be responsible for it.

Of course, the answer must be the use of indirect doxastic voluntarism. We are responsible for choosing to gather evidence in favor of salvific belief. We must educate, habituate, condition, and manipulate ourselves into salvific belief. But, if that is all we can be responsible for, then why is it the moment where we successfully acquire the salvific belief that matters? It seems to me that someone who is on the journey to gather the evidence is the only person “doing what is right” and the only action for which we can be really responsible.  I doubt there is salvific belief, but rather there is salvific searching for God.
Everything God does is morally right. God would always do exactly as He did in a circumstance and nothing else. Essentially, there is no such thing as permissibility and option for God. God is morally obliged to do what He does. What He does is right by definition. He is unchanging and unwavering in this respect. 

These claims are not difficult to swallow for the orthodox Christian. 

Further, salvation is thought of as a gift. God offers it to us out of mercy. We think of it as undeserved grace. But, I think the above claims contradict such thinking. 

God’s offering of grace is obliged. He has a duty to offer it. Duties have corresponding rights. Thus, we have a right to that grace, assuming we meet the conditions to acquire it (however one acquires salvation and justification). So, assuming one meets those salvific requirements, God, in his moral splendor, is morally obligated to save you. It isn’t undeserved mercy and grace, but rather it is required by the moral law, and by the very nature of God, that He save you in such a case.
I should answer this question for myself in a practical way when it comes to my rationality. Being practical about knowledge just is, by definition, the most rational thing I can do. What counts as pragmatism? That seems to define much about knowledge for me. There is so much I don't know about knowledge, and thus I must be practical about it. What could be wiser?

Phronesis means practical wisdom. Practical wisdom is a whole brained activity. Essentially, the frontal lobes are not a dictator. It is necessary to have unification, a smooth running system as a whole, and maximizing frontal lobe production isn't necessarily the sole right or good thing. If we are take separate the physical parts of ourselves, we realize also learn how best to make them function together as parts of a whole. 

I tell you, practical wisdom is fundamentally about good executive decision making. Thus, I know how fundamentally important the frontal lobes are to my existence. I'm saying they are a very necessary part of achieving happiness. 

Oh, I forgot to tell you? Bless my soul. //The Purpose of Knowledge is Happiness. // You are welcome. Seriously. You're totally welcome. One day, you'll thank me again. And, seriously, you are totally welcome. I love you because I love me.<<ref "1">>


-------------------------

<<footnotes "1" "I'm having a conversation with myself. It's okay to say it. I'm not going to feel bad to say that I love myself. Any rational person should to a significant extent. I wasn't raised in a way that allowed me to really believe that. I was raised the wrong way with a fairly rare combination of mental capacities and limitations. I have to forgive my parents for being shitty parents. They're as bad as the rest of us, and that means I must treat them like the rest of us. They could not have helped you, even if they knew how. Ah, you're probably thinking the good and right have a ton in common because you are so practically wise. ">>
The Matrix is the best movie I've ever seen. It's worth studying. There isn't a real, philosophical system underpinning it, but it does a nice job of weaving together many important concepts. The new show Westworld has much in common, not just at a surface level (the experience machine), but for many other significant problems. As in every experience machine story, the Red Pill is always present.

The Red Pill is the catalyst to fundamental paradigm shifts in one's reality map. After taking the Red Pill, one can see the world as it "really" is (or at least as a step closer to the objective truth, or at least that is the faith in the Red Pill).  

The primary force behind the illusion of choice in our minds is a rewards system in our brains that runs on pleasure-inducing chemicals. In a way, happiness is reducible to the right configuration of sustainable IV drip of these chemicals (this problem of hedonic happiness definitions is an old one). Your brain already shows the choices you've made 2-4 seconds before you are consciously aware of it. We aren't consciously free because our subconscious is clearly steering the ship. 


--------------

The Red Pill shows us that appearances can be deceiving on the scale of our reality map. The Red Pill itself, however, is still a kind of appearance. The Red Pill can be deceiving. When we attend to the Red Pill over time, we see we were right about some thing and wrong about others. Our reality map becomes inverted after the Red Pill, but then it has to settle down.

We each may experience many Red Pills of various sizes, shapes, and potency in our lives. The more radical the reality map the stronger the redpill.

I think one of the more important Red Pills is at the apex of the disagreement between the Marxist and the Libertarian, and both of these can be pulled in another direction that is psychopathic.

So, I think there is Psychopathic Marxism (hard to understand what it is, but I think this is the visual that people have) and Empathic Marxism (which is what I take Marxists to really mean by Marxism [No true Scotsman, let's talk about the nature of fallacies]). Similarly, there are Libertarians who have Empathy and those who don't. 

---------------

Internet slang also includes: "being woke" (AF, etc.)

Heidegger called it "The Event"

---------------

Idiocrasy Intro: https://www.youtube.com/watch?v=unoMMru4-c0

Cooperation Game Theory: https://www.edge.org/conversation/david_rand-the-cost-of-cooperating
As far as I am concerned, the Golden Rule (the CI itself) is //the// classic thought experiment in metaethics. Right behind it, the Ring of Gyges is the next most important thought experiment in metaethics because it shows us what perfection itself is like in practice. It was meant to describe Justice, but I think it describes normativity in general with the simplicity and beauty of no other device (the Veil of Ignorance emerged as a distributed Ring of Gyges, but it still rests upon that atomic notion). The Ring of Gyges speaks to the concept of Moral Virtue, Virtue of the Moral Practice directly. The Golden Rule is only more beautiful because it is the contents of morality, even if it applies Utility. The Ring of Gyges is an ancient tale from the genius of geniuses of geniuses himself, Plato:<<ref "1">>

<<<
Suppose now that there were two such magic rings, and the just put on one of them and the unjust the other; no man can be imagined to be of such an iron nature that he would stand fast in justice. No man would keep his hands off what was not his own when he could safely take what he liked out of the market, or go into houses and lie with any one at his pleasure, or kill or release from prison whom he would, and in all respects be like a god among men.

Then the actions of the just would be as the actions of the unjust; they would both come at last to the same point. And this we may truly affirm to be a great proof that a man is just, not willingly or because he thinks that justice is any good to him individually, but of necessity, for wherever any one thinks that he can safely be unjust, there he is unjust.

For all men believe in their hearts that injustice is far more profitable to the individual than justice, and he who argues as I have been supposing, will say that they are right. If you could imagine any one obtaining this power of becoming invisible, and never doing any wrong or touching what was another's, he would be thought by the lookers-on to be a most wretched idiot, although they would praise him to one another's faces, and keep up appearances with one another from a fear that they too might suffer injustice.<<ref "2">>
<<<

Tolkien obviously came when he read this, all over his book. Unfortunately, even Plato was wrong about The Ring of Gyges. Socrates claims justice can't be reduced to this notion since the unjust man is enslaved to his appetites, and thus not rational and free, and therefore not an agent, and therefore he isn't happy.<<ref "3">> Yeah. That argument sucks. The Ring of Gyges is a false device because "it doesn't make us happy." Wrong. That argument cannot be why it is conceptually flawed. Not being an agent means we can't be happy? Wrong. Eudaimonia is achievable, whether we are free or not. Rationality can make us happier (it doesn't always; we have to wield the instrument virtuously); we just have to try really hard. Of course, we are slaves to our appetites. It's the redpilled truth. We aren't free like we thought we were. And it doesn't matter, my nihilist friend. 

We aren't moral agents; there are no objective moral truths. Yes, the transcendental still exists, but normativity in itself, the Greatest of all things in itself, The Good, etc. can never be touched or fully seen. As mortals in this realm, it cannot be real for us. We will only ever see shadows. We must be content with the shadows on the wall. There is a place where we cannot be philosophers because, in a way, it just doesn't and cannot exist for us, with us, in us, or because of us. Perhaps it is faith. Perhaps it is our plight. Perhaps it is axiomatic to us and constitutive of the appearance of unified agency. 

The stoic must accept the inability to see into the [[Transcendental Gateway]]. It's okay, it's not your fault. It's not up to you, and in a way, nothing really is. That's okay though. Enjoy the epiphenomenal experience of freedom and consciousness. Why not? It's not like you can do anything about it anyways. This is your chance to take that spark of h0p3 and do something with it. Make life meaningful for yourself. There is no authority on meaning outside of yourself (and you know that you aren't really an authority either, but so what? Who has the authority to say you shouldn't? No one. Exactly). 

The nihilist is the ultimate wielder of The Ring of Gyges. Allow me to profane the sacredness of the highest saints and gods among men before me and call that phenomenon: The Ring of h0p3. The "just" wielder of the Ring of h0p3 is the positive nihilistic state of being moral because you want to be moral without feeling it to be a burden. To be clear, you define morality for yourself. That doesn't mean you'll always find yourself to be perfect or justified (that would be a confabulation we couldn't accept). It's okay that you don't like who you are sometimes, and it's okay that you strive to be better. Who makes the rules? Well. You do. Of course, if it is too unbearable, just remember: it doesn't matter anyways, but don't dwell there too long. You really do want stuff to matter. Remember: 

<<<
When we are no longer able to change a situation, we are challenged to change ourselves.<<ref "4">>
<<<

Program yourself.

It's your plight to desire The Good. Go for it. Be wise about it. Be practical and ideal. Do your best. Forgive yourself when you don't. You probably can't program yourself out of that, and you probably wouldn't want to. That isn't the kind of life you want to lead, and you don't need to worry about someone else approving of your moral theory. Do it because you approve of it. That doesn't mean don't listen to people, but it means that you need to be the ultimate law giver for yourself. It's the only Good thing to do. And thus, Right and Good were collapsed. There is only normativity: your normativity. 

They may call it relativism. You used to. You still might. Does it matter? No, not really. Nihilist! Lol. For whatever it's worth (which is ultimately nothing, ha), 

The person who is wearing the Ring of h0p3 is the ultimate wielder of The Ring of Gyges because they not only knew they could get away with anything, because nothing actually matters, because they aren't moral realists, and yet they still try to act as the person whose actions are no different with or without the Ring of Gyges. The Ring of Gyges burns brightly on the nihilist. It transforms into its true form: the Ring of h0p3. It is one thing to not be immoral even when there are no consequences, but it is entirely more profound to not be immoral when there are no objective reasons not to do so. 

There are nihilists who wear the Ring of h0p3 and feel it is a heavy burden to them, as though our plight should not be celebrated or enjoyed. Their existence is a challenge without the love of challenge. They seem to lack hope in the face of being a moral-realist-ish nihilist. Be the nihilist who loves wearing the Ring of h0p3. Have hope with that ring. Find a life worth living, that you enjoy, that is meaningful, that is the best you can do with it. Be a [[eudaimonic lifehacker]].

Unfortunately, the successful wielder of the Ring of h0p3, the eudaimonic lifehacker, must be on the road to eudaimonia. You have to let your skepticism go. It's the only way to get happy. Be a skeptic about humans, but don't be a skeptic about the transcendent or your reasons for getting up in the morning. Plato, hilariously, is right about the problem of happiness and its connection to the ring. He just didn't account for moral luck. Some of us can only be so happy. It's luck of the draw what life we get. Let's make the best of it. We cannot assume that everyone has a chance of successfully wielding the Ring of h0p3. We aren't free agents by definition. You've got to hope you are part of the lucky few who have the chance to be a eudaimonic lifehacker.<<ref "5">>

-----------------------

<<footnotes "1" "Whether or not Plato thought of The Ring of Gyges or someone else did, I'll call them Plato. ">>

<<footnotes "2" "Plato's Republic, 360b–d">>

<<footnotes "3" "Ibid., 10:612b">>

<<footnotes "4" "See: Viktor Frankl">>

<<footnotes "5" "This is not a religious or gnostic discussion of a remnant. It's just a plain fact about human history and evolution. No one is 'better' than anyone in any objective sense, of course. This is not a place to discriminate, except to feel empathy and pity for those who suffer.">>
I care less for everything past "First Contact" aren't as amazing to me. I watch it out of habit now.
We've watched all but the newest. Honestly, I'm not sure I care. You need to know the basics. You should understand the experience. Appreciate the differences and similarities between the old and the new. 
//This the sketch of a fictional story (duh). I'm brainfarting around. I literally dreamed this, and as I slowly woke, I continued to think about it. It's all a confabulation, but I know it's a fiction (so that makes it a safe place to explore).//

Imagine a tree whose fruit makes us truly happy to each of our perfectionist specifications (and modifies our specs insofar as our initial specs would contradict the happiness of ourselves and others), and it does it the only way that is possible: It controls us. 

Since consciousness is scientifically an illusion, we are mere observers, it is conceptually possible for us to appear to be autonomous to ourselves while actually having lost it to some mind control agent. It is deeply manipulative, but with the right telos (our happiness) and the instrumental means to achieve it. It is a unique drug. It transforms us. It heals us. It is a panacea. It is a utopia-generator. It makes heaven on Earth. 

This is an experience machine we can hardly say no to. 

* Unhappiness
** We need backstory. Sadness. Ailment. We need to know unhappiness in the world, the sources of it. 
** Maybe we follow a few individuals, a few groups, a few nations, etc. 
** Pull them heartstrings.
* Deus ex machina: the seed arrives
** Meteor, teleportation, or other "out of thin air"
** Genetic modification turned serendipitous accident
** An omniscient, omni-benevolent, omnipotent AI has computed it and builds a single seed
** etc.
* The Garden: It germinates, cultivates, and spreads
** It is planted (very minimal requirements here), for whatever reason. 
** A treeplant rockets out of the ground like Jack's beanstalk.
** Maybe it has fly-away spores. Multiple ways to spread (e.g. the seeds survive our digestion).
** Many treeplents make a garden.
* Adam and Eve: the Fruit of Eudaimonia
** They enter the garden.
** Perfectly spherical, high-liquid content fruit with "unique" Dune-Spice-like smell and taste factor to each person.
** Temptation and the inevitable.
** Pleasure upon contact
** Immediate transformation.
* Memes of a Fruit: the tree takes the world by storm.
** Like a virus, it spreads through our minds, bodies, and lands.
** We are perfectly happy.
<<<
[[RPIN]]: You lack explanatory power here, [[KIN]], but you probably can't disagree with the description.
<<<

The upper layers of the [[human-pyramid|Human-pyramid]]. At the very top, the top 1% of the world. This includes much of America, Europe, Japan, with the fastest growing sectors in China and India.

Let us refer to the top 10,000 (their are ~1,800 billionaries in 2016) most powerful humans on top of that human-pyramid as the [[Hyperclass]] 
//See first: 🢔⦗[[About|About, a.k.a. The Opening of the Rabbit Hole]]⦘🢖//

//Kind of like an unglamorous Hall of Fame. Who were you, h0p3? This is your story.//

Here I archive significant bodies of my work which make me proud, nostalgic, or pensive. This vault is a sequence of memoirs, projects, and shifts in my perspectives, values, and goals. It gives me a chance to reflect upon seasons, eras, and chapters of my life. I suppose, to some extent, this is a trophy vault and a place for me to celebrate myself.<<ref "1">> I have achieved much, and I've come a long way. I hope to be motivated by this catalog to wisely amortize my self-reflection and provide myself perspective on who I was for the sake of both knowing who I am and planning who I will be. I hope to have a prolific and unabridged life of happiness.

Obviously, my narratival divisions are poorly justified subjective human constructs. Life is chaotically complex, hard to reduce, difficult to categorize and systematize, and that's all because it is difficult to draw clean lines. That's okay. It is our plight to play games of semantics with ourselves; it is the foundation of human communication and our fallible analysis+synthesis. I'm bootstrapping; I'm building it brick by brick, and I'm filling it droplet by droplet. I have to start somewhere, and I shouldn't expect perfection.<<ref "2">>

* 1985-2003 -- [[Childhood]]
* 2003-2005 -- [[Berea]]
* 2006-2008 -- [[Hypercynic]]
* 2008-2010 -- [[Thailand]]
* 2010-2014 -- [[Summa Philosophica]]
* 2015-2016 -- [[Highdeas]]
* 2016-???? -- hello world<<ref "3">>

If the rest of the wiki itself is not the next addition to this vault, assuming I will continue having conversations with myself/myselves for a long time in this medium (let's [[h0p3]] so!), then my future goal is to prune similarly-scaled and completed (or sufficiently achieved) chapters of life from [[Projects on this Wiki]] and store them in this memetic vault.

Perhaps I will need to actually sit down and write memoirs to help give shape to this in a sense. I can provide writings from a time period and writings about that time period.

I think this is the most fitting place on the wiki (although it might fit in many places) for an odd writing assignment I've taken up for myself: my autoeulogy. What would I want said at my funeral?

* [[Autoeulogy]]

-------------------------------

<<footnotes "1" "These works tend to be as well-formulated and articulate as I could be in my given contexts, although the formatting is not always perfect (especially for work grafted into this wiki). I'm autistic and not naturally gifted with language. Further, my oversharing and honesty comes off as stupid, arrogant, and cringeworthy to most people. That's okay though: I probably think and feel the similarly about your life too. It's time to be courageous when we look at ourselves in the mirror of time. I'm not going to be ashamed of it, and I'm not going to hate myself. That isn't useful to me.">>

<<footnotes "2" "So kindly fuck-off, haters.">>

<<footnotes "3" "I assume some parts of me are going to win out as I continue to grind my way through cognitive dissonance and unify myself. What will be the outcome of my [[Frankfurtian Feedback Alignment|2017.03.15 -- Frankfurtian Feedback Alignment]]?">>
A theory of mind is the representation of someone else's [[reality map|Reality map]] in our mind. It's the way in which we believe another mind operates, thinks, feels, infers, desires, believes, etc. 
Japanese martial concept of Shuhari:


<<<
"It is known that, when we learn or train in something, we pass through the stages of shu, ha, and ri. These stages are explained as follows. In shu, we repeat the forms and discipline ourselves so that our bodies absorb the forms that our forebears created. We remain faithful to these forms with no deviation. Next, in the stage of ha, once we have disciplined ourselves to acquire the forms and movements, we make innovations. In this process the forms may be broken and discarded. Finally, in ri, we completely depart from the forms, open the door to creative technique, and arrive in a place where we act in accordance with what our heart/mind desires, unhindered while not overstepping laws."
<<<


It's about hearing the voices of reason inside us, the innerself that offers us the best path to take. 
This is the script I use on my current host. It allows us to have several virtual hosts for each member of the family.

```
server.modules = (
        "mod_access",
        "mod_compress",
        "mod_redirect",
        "mod_compress"
)

server.document-root        = "/var/www/html"
server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"

server.username             = "www-data"
server.groupname            = "www-data"
server.port                 = 80
index-file.names            = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny             = ( "~", ".inc" )

static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ( "application/javascript", "text/css", "text/html", "text/plain" )

mimetype.assign = (
  ".html" => "text/html", 
  ".txt" => "text/plain",
  ".jpg" => "image/jpeg",
  ".png" => "image/png" 
)

$HTTP["host"] == "bookwyrm.life" {
    server.document-root            = "/var/www/k0sh3k-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/k0sh3k"
}

$HTTP["host"] == "k0sh3k.h0p3.xyz" {
    server.document-root            = "/var/www/k0sh3k-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/k0sh3k"
}

$HTTP["host"] == "jedihacker.life" {
    server.document-root            = "/var/www/j3d1h-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/j3d1h"
}

$HTTP["host"] == "j3d1h.h0p3.xyz" {
    server.document-root            = "/var/www/j3d1h-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/j3d1h"
}

$HTTP["host"] == "kokonut.life" {
    server.document-root            = "/var/www/1uxb0x-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/1uxb0x"
}

$HTTP["host"] == "1uxb0x.h0p3.xyz" {
    server.document-root            = "/var/www/1uxb0x-html"
    compress.cache-dir              = "/var/cache/lighttpd/compress/1uxb0x"
}
```
* [[Tiddlywiki Hotkeys]]
* [[Tiddlywiki Wishlist]]
* [[How to Center Objects on Tiddlywiki]]
Confirming changes to the draft tiddler containing the keyboard focus:

```
ctrl-Enter
```
Each tiddler will have a primary author (the part of myself responsible for voicing it) listed in the Tag name. This shows what I take to be the person who wants to show it on the wiki, the person who endorses it, or the persons (I don't see a reason for multi-tagging yet). Untagged will just be h0p3, and we'll have a tag for [[RPIN]] and [[KIN]]. This is a 3-party adversarial system in a way, much like the 2-party + electorate system in the United States. If h0p3 is to be free, then he must maintain his autonomy against [[KIN]] and [[RPIN]]. The point is to unify, not explode in the number of persons. That said, having more identities is not equivalent to being less unified. Maybe that is just the nature of disagreement with ourselves. I don't know. The healthiest election systems are weighted, provide multiple parties, etc. 

<<<
[[KIN]]: Ugh, I know [[RPIN]] is right about something: the most redpilled will emerge from the various groups of us to take over. The nice guy does lose. Maybe I can be metamodern in my redpilledness though, allowing for a new kind of [[KIN]] to emerge to interpret and respect them.
<<<

<<<
[[RPIN]]: That is an astute observation. See: [[Christian Memetics]].
<<<


* The entire wiki is contained in a single html file (the index.html file you are viewing right now). 
** If it is loaded in your browser, then you can still browse it even while offline. 
** You can also save it for offline reading if you wish. 
** Please note that if you are connecting to https://h0p3.xyz, then you may need to clear your browser cache or use private/incognito mode for updates.<<ref "1">> 
* Internal links open up a new wiki-page below your current wiki-page, while external links are opened in a new browser tab.
* Footnotes have a pop-up, but they can also be found at the bottom of the wiki-page.
* The date below the title of each page shows when it was lasted edited. 
* The button in the top-right corner opens the wiki's options, recent pages, search functions, etc. 
* Your URL bar shows a re-usable link to the ordered layout of the wiki-pages you currently have opened. 
** Clicking on a wiki-page title link will make it the primary "currently targeted" wiki-page in the ordered layout in your URL bar. 
* There are many saveable custom options and configurations for offline users, but users are unable to make any modifications to the published wiki.
*Don't forget to look through the homepage options (About, Projects, Connect, etc.).

* Navigate by taking links forward, and clicking "X" in the top right-hand corner to go backwards. 
** Note that Tiddlywiki doesn't have a hotkey for closing windows yet. 
** You can back just use your browser hotkeys though: alt+left or alt+right to navigate through your history. 


Tips for Authors:

* Upgrade your Tiddler: http://tiddlywiki.com/upgrade.html

-------------------------------------------------------------------------------------

<<footnotes "1" "I've not yet figured out a way to permanently maintain no-cache metatags in Tiddlywiki (since it overwrites them).">>

* [[2017.02.05 -- Letter to My Children]]
* [[R&C]]
**[[2017.01.10 -- Letters with R]]
**[[2017.01.16 -- Letters with R]]
**[[2017.01.17 -- Letters with R]]
**[[2017.01.23 -- Letters with R]]
**[[2017.02.05 -- Letters with R]]
**[[2017.02.06 -- Letters with R]]
**[[2017.02.12 -- Letters with R]]
**[[2017.02.18 -- Letters with R]]

[[2017.02.05 -- Letter to My Immediate Family]]
* [[2016.10.17 -- Letter to Mom and Dad]] -- Unsent
* [[2016.25.12 -- Christmas Letter to Parents]]
* [[2017.01.09 -- Post-Kids'-Birthdays Letter]]

* Computing

** Digest and Organize my thousands of bookmarks

**RPi
***NAT and WAN IP automated
***Retest
***Mail

** VM-piratebox
** VM-PFsense

* IRL

**Shopping
***9V Batteries - Fire Alarm, Alarm Clock




Family of Arguments: [ [[Arguing Against Reason]] ] -=- [ [[Less Wrong]] ] -=- [ [[Doing Our Best]] ] -=- [ [[My Purpose]] ]

Doing your best just is the definition of rightness. Do your best since it is the best you can do (beautiful circularity).

----------------------------

I have been told many times that I need to stop trying to be right. I suspect this is an attempt to prevent me from thinking on my own and from disagreeing with them. Perhaps it is a plea got something else (call me out on a strawman, but steelman my argument as well); they didn't say it well though (and I'll show you why).
Can you be wrong in trying to be right? Sure. We can say you didn't "try to be right" in the right way, or i.e. you failed to be right. That doesn't mean we shouldn't try to be right.

Trying to be right is aiming for excellence (//arête//) against some standard of the good of X, the F-ness of a practice. 

Is "trying to be right" aiming for perfection? Not directly in any maximally ideal sense (as a final end, a final goal, yes, but we quickly must realize that only partial perfection is possible for us). We aren't ideal (we are finite, fallible, etc.), and thus it wouldn't be practical to aim for ideal perfection. But, whatever is practical for us generates a line of maximum potential (each passing moment, experience, and modification of our lives may result in this line moving). The goal is to reach our maximum potential, to be excellent in context. If that isn't the telos, then why be excellent? Why be right? What are we aiming for? How is that not a new kind of "right" to aim for?

The problem is intractable. You must beg the question. Not caring about "being right" results in much higher degrees of logical inconsistency, disintegration (to some extent), and frankly gives you no metric or method to find happiness. If happiness is your telos, then you do care about being right. If you were to care about what God says, then you do care about being right. If you care about anything, then you do care about being right, being right towards, being right with, acting rightly, thinking rightly, etc.

Are you really right when you say I'm trying too hard to be right? How hard are you trying to be right, and why? Isn't it obvious that there are fundamental things we have to try hard to be right about? Don't you see the very concept of morality, of the normative, of the Right? 

Try to be right. It is obviously an axiom (even the very concept of axiom begs the question). 

Here is a not put-enough-together argument, which is sad considering how long I've been working on it (it is a long told philosophical story running through many cultures; we must wrestle this meme). This is my best rendition of it (which is dreadful, abysmal, and not well expressed). It is the Hermeneutic Circle I'm most worried about:

Right, Righteous, //riht//, //gath//, united, standard of unity, the Good of unity, Righteousness, //díkaios//, Righteoused, Justified.<<ref "1">> //riht//, //gath//, //arête//, and //díkaios// have fundamental links (there are many words for it), and they clearly have some crucial relationship with The Good. I know you see them. That pattern is not an accident. Plato, Aristotle, and Kant saw it deeply.

We pursue the Good.<<ref "1.1">> The Right is necessary as a means to the Good. It is our Plight to seek the Good via seeking the Right. Thus, we pursue the Right. This is the pragmatism of perfection. Doxa and Praxis must be welded together here in the "right" way.

But further, we can never have the Good in and of Itself.<<ref "2">> It is the nature of the Good that we can't hold it, that we can only partake of it. We can only dance in the whispers and shadows of the Good, and that is only by being Right. We can't be perfectly Right, and that means we can't be perfectly Good. We can't really understand the Good in its entirety by definition.<<ref "3">> We are less than, and that's okay. It is untouchable and unknowable; it is Kant's metaphysics. But even the Mighty Kant can be wrong.

Unfortunately, upon much closer inspection, after actually seeing the corners which skepticism (from Analytic, Continental, and Eastern traditions) has //rightfully// driven us into (they have shown us the boundaries, outlines, and cores), it becomes apparent that the best answers demonstrate that no system of Right (or the pursuit thereof) can be logically consistent (cannot be Right with itself). Rightness is incomplete, and it appears by definition. It's unintelligible not because we are fallible, finite, and mere mortals, but because it actually isn't conceptually possible. I pursue a thing which doesn't exist in pursuit of the Good (which may Itself simply be a construction of our minds if we do not reduce it to Instrumental Reason). I want to do a Right thing, to partake of a Good.

As much as I railed against Post-modernism before understanding it, now that I see it and realize what it is actually about, I weep. I cannot unsee it. In pursuing the Right, it is clear that my starting place made uncorrectable assumptions. I need a new foundation for pursuing the Right and Good (and maybe even those concepts must be reinterpreted, but I would have no idea where to begin and why). 

My only hope is to find a Metamodern solution. What fundamental philosophical paradigm answers postmodernism? I assure you, it is not by going backwards (although, we must very carefully understand our predecessors; we must learn from the past as we attempt to create our futures). Postmodernism is extremely successful because it will take whatever you feed it and reduce it to absurdity using the very standards you accept. Postmodernism is a very deep problem. 

I set out in 2010 to answer it. It took years of training to even begin to understand how large a creature I was wrestling, that I had it by its toe, and it had me pinned like a bug. I'm here to rally against it again. I want my life to be meaningful and intelligible to me. Ultimately, I am still pursuing some kind of Rightness and Good, but I do not understand them well enough.  

----------------------------

Doing your best just is the definition of rightness. It's the "ought" implies "can" rule. "Can" here is a very complex capacity, and we have yet to even prove our freedom. But, even if we needed to hedge, even if we assumed for practical and epistemically prudential reasons a metamodern morality and our agency, when we get past the skeptical baggage, we are still left with an emormously complex question of what counts as "can." Without it, we cannot answer "ought." 

Here is the [[Neo-Kantian Slip]] that I hate: 

In their skewed understanding of human nature, they lose sight of The Good and The Right. They correctly lower the standards, but where they have put the standards we should be aiming for is much higher than they've accepted. They legitimately think they are good people. Any serious Kantian knows they are a bad person, that we are all bad people. I see them as people who selfishly confabulate and eisegetically inject a false interpretation of [[Metaethics]] that has lowered the bar enough that "coincidentally" justify and show they are good people. They move this goal post so as to maximize their happiness while still having the ability to virtue signal from. I'm serious. My professors really thought they were good people deep down; not one would honestly and outspokenly call themselves out. Sure, they would give you a politely humble response if you asked them, but that is not who they were. That's not who any of us are. We really do suck. Just because we suck doesn't mean nobody has dignity.

Perhaps even Personhood dignity and respect should come in degrees. I've been too dogmatic about it (and yet have made argument in that direction countless times). 

I have long had a struggle in me. Do I see people as sinners, saints, or something in between? Who are we? What? How? Why? When, Where? Who? Tell me. I need to know. There are big differences in the kinds of inferences we ought to make when the glass is half full, half empty, or something else. 

Beyond some basic theory of economics/financial principles/etc (an enormous portion of the Bible worries about money and power), the Bible and Economists share one fundamental thing in common: people are selfish, they are sinners. They see the same thing, they just use different words to describe it. Crucially, while the Bible and Economists are studying the same thing (who we are) and come to very similar descriptions of who we are, they do not provide the same prescriptions about who we should be. 

This is why I've had such a hard time being a businessman. It's why I stopped going into business and started going into philosophy. 

----------------------------

<<footnotes "1" "St. Paul was crucially onto something, dare I say he was //right// in important ways. I have studied the concept of Justification - it has been central to my philosophical training (and to my academic work on this subject over the past decade and a half). I think in at least a minimal way, I am justified in my understanding of justification.">>

<<footnotes "1.1" "Which may simply be an idea, a concept. I do not think it is a Being anymore, and I do not buy Plato, Aristotle, or Judeo-Christian Gods (or any other gods for that matter).">>

<<footnotes "2" "Plato, Aristotle, Kant, and Gödel know it (in different ways). I see that they know it. I've yet to consult Spinoza (I have my suspicions); we will see what that monster has to say. I can rarely give higher praise to a claim or concept when all of them agree (across the gulf of time, those memes must have been mighty strong for these geniuses of geniuses of geniuses to have agreed to such a powerfully cosmos-defining claim [St. Anselm, among a great many others, agreed too, but I'm hesitant to put him on the previous list because...look at that beautiful list.]), and yet I know I run the risk of Appealing to Authority.">>

<<footnotes "3" "I just sweepingly defined 300B.C.-1400AD on the topic. Arguably, we are striking at the very core of The Great Conversation, i.e. The Humanities Project. It may, to some minimal extent, be ineffable to us. It is the Gödellian Incompleteness of our existence.">>

```
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                                                  ,,    ,,       #
#      `7MMF'                      mm            `7MM  `7MM       #
#        MM                        MM              MM    MM       #
#        MM  `7MMpMMMb.  ,pP"Ybd mmMMmm  ,6"Yb.    MM    MM       #
#        MM    MM    MM  8I   `"   MM   8)   MM    MM    MM       #
#        MM    MM    MM  `YMMMa.   MM    ,pm9MM    MM    MM       #
#        MM    MM    MM  L.   I8   MM   8M   MM    MM    MM       #
#      .JMML..JMML  JMML.M9mmmP'   `Mbmo`Moo9^Yo..JMML..JMML.     #
#                                                                 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Ubuntu 16.04 Post-Installation "Batteries Loaded" Script        #
# Please, do not blindly run this script.                         #
# Read it, modify it, and then use it as you wish.                #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #



############# Preparations #############

# update + upgrade
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y

# update pips
sudo apt-get install python-pip -y
sudo apt-get install python3-pip -y
sudo pip2 install --upgrade pip
sudo pip3 install --upgrade pip



############# OS changes #############

# Deja Dup/Duplicity Backup doesn't work without installing this first.
sudo apt-get install duplicity -y
sudo apt-get install python-gi -y

# Typeface
sudo add-apt-repository ppa:no1wantdthisname/ppa -y
sudo apt-get update && sudo apt-get install libfreetype6 -y

# Synaptic Package Manager
sudo apt-get install synaptic -y

# Ubuntu tweak
wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntu xenial-getdeb apps" >> /etc/apt/sources.list.d/getdeb.list'
sudo apt-get update
sudo apt-get install ubuntu-tweak -y

# Gnome tweak
sudo apt-get install gnome-tweak-tool -y

# Unity tweak
sudo apt-get install unity-tweak-tool -y

# Compiz config editor
sudo apt-get install compizconfig-settings-manager -y



############# CLI App Installations #############

# unrar
sudo apt-get install unrar -y

# Openssh - change to port 4222
sudo apt-get install openssh-server -y
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults
sudo chmod a-w /etc/ssh/sshd_config.factory-defaults
sudo sed -i 's/^Port 22.*/Port 4222/' /etc/ssh/sshd_config
sudo systemctl restart ssh

# Golang
sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable -y
sudo apt-get update
sudo apt-get install golang -y

# lftp
sudo apt-get install lftp -y

# midnight commander
sudo apt-get install mc -y

# htop - top replacement
sudo apt-get install htop -y

# discus - disk usage display
sudo apt-get install discus -y

# ncdu - Disk Usage Tool
sudo apt-get install ncdu -y

# jed - text editor
sudo apt-get install jed -y

# bmon - bandwidth monitor
sudo apt-get install bmon -y

# nethogs - per process throughput monitor
sudo apt-get install nethogs -y

# byobu - Terminal multiplexer
sudo apt-get install byobu -y

# dtrx - Easy Decompression
sudo apt-get install dtrx -y

# mtr - Traceroute + Ping utility
sudo apt-get install mtr -y

# aria2c - Wget/Curl Replacement
# Usage: aria2c foobar.com/file.xyz
sudo apt-get install aria2c -y

# w3m - Console Web Browser
sudo apt-get install w3m -y

# weechat - IRC client
sudo apt-get install weechat -y

# finch - all-in-One pidgin-like messaging client
sudo apt-get install finch -y

# inxi - System Info Viewer
# Usage: inxi -Fi
sudo apt-get install inxi -y

# sshfs - Mount remote folder over SSH
# Usage: sshfs name@server:/path/to/folder /path/to/mount/point
sudo apt-get install sshfs -y

# xonsh - Pythonic bash, let's upgrade pips
# Usage: don't forget to prepend "#!/usr/bin/env xonsh" to your .xsh file
sudo apt-get install python3-pip -y
sudo pip3 install xonsh

# when-changed - Do X when a file changes
sudo pip install when-changed

# hashfile - another hash tool
sudo pip install hashfile

# Ghetto SSH VPN
# Usage: sudo sshuttle -r username@sshserver-ip 0/0
sudo apt-get install sshuttle -y

# Neofetch
echo "deb http://dl.bintray.com/dawidd6/neofetch jessie main" | sudo tee -a /etc/apt/sources.list
curl -L "https://bintray.com/user/downloadSubjectPublicKey?username=bintray" -o Release-neofetch.key && sudo apt-key add Release-neofetch.key && rm Release-neofetch.key
sudo apt-get update
sudo apt-get install neofetch -y



############# GUI App Installations #############

# Hexchat IRC client
sudo apt-get install hexchat -y

# qBittorrent is still my favorite native GUI torrent client at this point. It is my uTorrent 2.2.1 replacement.
sudo apt-get install qbittorrent -y

# Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i ./google-chrome*.deb -y
sudo apt-get install -f -y
rm google-chrome-stable_current_amd64.deb

# Furious Iso Mount 
sudo apt-get install furiusisomount -y

# Sublime Text 2 - don't forget a key
sudo add-apt-repository ppa:webupd8team/sublime-text-2 -y
sudo apt-get update
sudo apt-get install sublime-text -y
# Make Sublime Text 2 your default Text Editor
sudo sed -i 's/^gedit*/subl/' /usr/share/applications/defaults.list

# Pidgin
sudo apt-get install pidgin -y

# Hexchat
sudo apt-get install Hexchat -y

# qTox
sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/antonbatenev:/tox/xUbuntu_16.04/ /' >> /etc/apt/sources.list.d/qtox.list"
sudo apt-get update
sudo apt-get install qtox --allow-unauthenticated -y
# Create auto-startup file
sudo cat <<EOT >> ~/.config/autostart/qtox.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=qTox
GenericName=Tox client
Comment=qTox is a powerful Tox client that follows the Tox design guidelines.
TryExec=qtox
Exec=qtox %u
Icon=qtox
Categories=InstantMessaging;AudioVideo;Network;
Terminal=false
MimeType=x-scheme-handler/tox;application/x-tox;
EOT
sudo rm /etc/apt/sources.list.d/qtox.list

# VirtualBox
sudo su -c 'echo "deb http://download.virtualbox.org/virtualbox/debian xenial contrib" >> /etc/apt/sources.list' 
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install virtualbox-5.1 dkms -y

# Filezilla
sudo apt-get install filezilla -y

# Kodi
sudo apt-get install kodi -y

# VLC
sudo apt-get install vlc -y

# Gimp
sudo apt-get install gimp -y

#Calibre
sudo add-apt-repository ppa:n-muench/calibre2 -y
sudo apt-get update
sudo apt-get install calibre -y

# NoMachine
wget http://download.nomachine.com/download/5.1/Linux/nomachine_5.1.62_1_amd64.deb
sudo dpkg -i nomachine_5.1.62_1_amd64.deb

# Openvpn for Network manager
sudo apt-get install network-manager-openvpn network-manager-openvpn-gnome openvpn network-manager-vpnc -y

############# Preparations #############

# Truecrypt
sudo add-apt-repository ppa:stefansundin/truecrypt -y
sudo apt-get update
sudo apt-get install truecrypt -y



############# Requires user input #############
# Resilio (btsync-GUI)
sudo apt-get install curl -y
sudo sh -c "$(curl -fsSL http://debian.yeasoft.net/add-btsync-repository.sh)"
sudo apt-get update
sudo apt-get install btsync-gui -y

# Resilio (btysync NO GUI)
#sudo sh -c 'echo "deb http://linux-packages.getsync.com/btsync/deb btsync non-free" > /etc/apt/sources.list.d/btsync.list'
#wget -qO - http://linux-packages.getsync.com/btsync/key.asc | sudo apt-key add -
#sudo apt-get update
#sudo apt-get install btsync
#sudo service btsync start



############# Gaming #############

# Steam
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install steam -y

# PlayOnLinux
sudo apt-get install playonlinux -y



############# Rice #############

```
```
#!/bin/bash
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                                                  ,,    ,,       #
#      `7MMF'                      mm            `7MM  `7MM       #
#        MM                        MM              MM    MM       #
#        MM  `7MMpMMMb.  ,pP"Ybd mmMMmm  ,6"Yb.    MM    MM       #
#        MM    MM    MM  8I   `"   MM   8)   MM    MM    MM       #
#        MM    MM    MM  `YMMMa.   MM    ,pm9MM    MM    MM       #
#        MM    MM    MM  L.   I8   MM   8M   MM    MM    MM       #
#      .JMML..JMML  JMML.M9mmmP'   `Mbmo`Moo9^Yo..JMML..JMML.     #
#                                                                 #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Ubuntu 16.04 Post-Installation "Batteries Loaded" Script        #
# Please, do not blindly run this script.                         #
# Read it, modify it, and then use it as you wish.                #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #



############# Preparations #############

# make the usual directories
mkdir ~/bin
mkdir ~/scripts
mkdir ~/src

# add Gopaths
mkdir ~/src/go
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
echo 'export GOPATH=$HOME/src/go' >> ~/.bashrc

# Set PATH and update .bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:~/bin:~/scripts' >> ~/.bashrc
source ~/.bashrc



############# Aliases #############

# upgrade - does it all
echo 'alias upgrade="sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoremove -y && sudo apt-get autoclean -y"' >> ~/.bashrc 

# Opens a file with whatever program would open by double clicking on it in a GUI file explorer.
# Usage: try someDocument.doc
echo "alias try='gnome-open'" >> ~/.bashrc 

# History search (use: hs sometext)
echo "alias hs='history | grep $1'" >> ~/.bashrc 

# toxic - run the toxic CLI client
echo 'alias toxic="cd ~/bin/toxic/ && ./run_toxic.sh"' >> ~/.bashrc 

# push 'n' pop dem directories (a stack for 'cd')
echo "alias +='pushd'" >> ~/.bashrc
echo "alias -- -='popd'" >> ~/.bashrc
echo "alias ?='dirs -v'" >> ~/.bashrc

# Delete current directory (ask for permission)
echo "alias deldir='find . -mindepth 1 -delete'">> ~/.bashrc

# update bashrc
source ~/.bashrc



############# User applications #############

# toxic - cli tox client
cd ~
wget https://build.tox.chat/view/Clients/job/toxic_build_linux_x86-64_release/lastSuccessfulBuild/artifact/toxic_build_linux_x86-64_release.tar.xz
dtrx toxic_build_linux_x86-64_release.tar.xz
mv toxic_build_linux_x86-64_release ~/bin/toxic
rm toxic_build_linux_x86-64_release.tar.xz

```
This is scumbag territory, no doubt. However, there is something inside each of us which at least appreciates cleverness. The cracks in the system are there. We are all deeply manipulable. Obviously, I don't intentionally engage in this behavior. I'm not condoning it either. As an analogy, I can appreciate Nazi blitzkrieg without actually attaching any positive normative force to it. These ideas can be hilarious and intriguing to think about. 

Aphorisms, Truisms, and Social Facts:

*Sometimes it's easier to ask for forgiveness than to ask for permission.
* Look like you belong.
** Corollary: look busy.
** It's easy to trespass with maintenance crew gear, an orange safety jacket, a clipboard, etc.
* The first person to talk loses.
** Humans have a hard time dealing with silence, social awkwardness, etc. 
** As an aside, direct multi-second eye contact is a strong social catalyst
* People will remember not what you said but how you made them feel.
* Most people like talking about themselves so ask lots of questions about them.
* When a group of people laugh, people will instinctively look at the person they feel closest to in that group.
* Always be honest so when you have to lie, people will believe you.
* You can judge the character of a person by how they treat people who can do absolutely nothing for them.
* The key to confidence is walking into a room and assuming everyone already likes you.

Getting a job:

*Get a burner phone and use yourself as a reference on job applications. 
*If you have gaps in your résumé, fill your work history with fake freelance computer work or renovations.
** International work and references you control may help
* Use tiny, white font (or black on black lines/objects) to pack keywords into your résumé in order to trigger automated parsing/searching 
** From what I understand, they are getting better at catching this.
* For interviews, the Primacy Effect: schedule interviews early, since items are more memorable if they are presented earlier. 

Saving money (i.e. theft):

* Continental breakfasts at hotels are there for the eating.
* Most paid car parks have a 'lost ticket' button which is the maximum daily fee. If you feel like parking for a week or so, just press that button instead of paying for the week.
* For a show/game/etc., buy cheap tickets, research empty/unused/unsold expensive tickets, and act like you belong where you don't.
* If something you own breaks, just buy a replacement and return the broken one to the store.
** Watch for serials, make sure they have relaxed return policies, etc.
* Similarly, liberal return policies can essentially act as free rental policies.
* Get free food at any fast food restaurant by calling or pulling up and saying they forgot a burger or fry in your order
* Complaints in the service industry (whether in person or over the phone) will often result in having your service comped. 
* Self-checkout is exactly what it sounds like.

Saving Time:

* Want something on Craigslist from another town but dont want to travel? Ask them to meet you half way, but claim to live in a place twice the distance that you actually do from them. You live at the midpoint now.
* Print out your own handicap permit.

Social Engineering and psychological hacks:

* At a crowded bar, and can't get a seat? Go up to the hottest woman there, and hit on her. She'll leave in disgust, and you can take her seat.
* Unexpected, raw, open aggression, particularly for one-time meetings, causes flight mechanics. 
** You can also use it privately and be two-faced in public settings. That will drive them insane.
* Simply say "Thank you to compliments" and freely offer compliments when it benefits you.
* If someone doesn't completely answer a question, just keep eye contact and don't say anything. They will eventually complete the thought.
* If you want to make someone do something make them chose between two things (a.k.a False Dichotomy).
** False compromise does something very similar. Take a more extreme position than you need, and act like you've compromised when taking up your original position.
* When walking into a crowd, don't make eye contact with oncoming people. Look past everyone, and they'll move out of your way.
* If you want someone to do something, ask it in question form rather than giving it as an imperative order. 
* If you want to convince someone it's not the facts that matter but the confidence with which they are presented.
* Saying someone's name improves their opinion of you. 
* Repeating back what someone says in a different way ("so what you're saying is,") after they say it makes them think you are a good listener and a good person.
* Touch someone's right arm when suggesting they should do something for you, they're more likely to do it.
* If you really want something from someone, frame it as an offer rather than a request.
* Foot-in-the-door/gradual commitment phenomenon: people are more likely to agree to do a task for you if you ask them to do something simpler first.
** This is a form of false compromise
* If you get yourself to be really happy and excited to see other people, they will react the same to you.
* If you have a warm hand when you shake somebody's hand, you immediately become a more desirable person to get along with.
* People have a certain image of themselves and will fight tooth and nail to cling to it. You can avoid insulting someone by not saying anything that shows you perceive them differently than what they're trying to present.
* Romance: Look up the false attribution of arousal. Basically, if you want to make someone like you, get their heart rate going.
* Attractiveness: Wearing red. For women, the color red makes them exponentially more attractive.
* Seeking Approval: Body mirroring. Works well for interviews.
* In debates, do not state or stance or background (since this induces your audience to see you as biased), instead just give your argument.
* Reminding people of their death will make them more likely to follow a charismatic leader.
* The placebo effect is actually more powerful than some medications. 
* Pay attention to people's feet. If you approach two people in the middle of a conversation, and they only turn their torsos and not their feet, they don't want you to join in the conversation.


Work hacks:

* If you want to sound sick when calling into work, lie on your back while hanging your head over the edge of the bed. You will sound congested.
* Many employers legally cannot call you into work if you claim to be intoxicated.
* Shit at work, not at home.
**Just don't shit yourself out of a job.
* Live-booting drives, USB-Wireless adapter, any source of interwebs, and a smart desktop appearance allows you to own most machines without detection
** There are definite exceptions. You'd have to know what you are doing.




* Soda-water Carbonation system/machine
From my standpoint: 

//Virtue is Knowledge//

[[<=>]]

//[Virtue] is [Wisdom] is [A Unique, Normative Kind of Practical Knowledge]//

[[<=>]]

//[Virtue (for me)] is [Wisdom (for me)] is [Knowledge (for me is my habiturally trained [[intuitions networks|Intuition Networks]]) in our [[fastmind|Fastmind]]]//

[[<=>]]

//Virtue is Intuition//

Or, perhaps Virtue isn't really knowledge, it's a very special kind of knowledge. Virtue requires developing excellence/mastery embedded in the Intuition networks of our fastmind. This is our moral psychology. 

This is incredibly in line with the literature. The Triune Greek Philosopher Gods were fucking geniuses. They were incredibly in touch with who they were to have deduced what they did with what little evidence they had.

<<<
[[RPIN]]: ....or....that is the natural state of memetic evolution. You are just getting in tune with the ancient beast inside you (that set of intuitions we are born with from evolution, embedded in ), the oldschool natural way, but now you know far more about these beasts and should take up a different position that people who lived thousands of years ago.
<<<
I've decided the best (and unfortunately weakest) definition of Vocation I can find is that which we will do for free, but especially that which requires sacrifice or may not eventually result in our happiness. 
Since Plato, we’ve known that democracy sucks, but we’ve also seen a solid, practical case made for it simply in virtue of not having a better option actually available to us. Tyranny of tyrants, oligarchies, and majorities in democracies will always be a problem. 

This separation between the legal and moral realms is odd. Some people want to paint it as two kinds of normativity (that just sounds fucking stupid though). Ought is ought. There is either a unified normative theory or nothing. 

Weird things come out of this split. Censoring, as a practice, can be done morally. Practically and politically, however, it will be abused. Hence, even those things which we might morally wish to censor may need to be left untouched so that we can protect those sorts of speech which are necessary to a healthy, informed public.

Anyways, I would absolutely love to ban most people from voting. Fuck people. Most of us are retarded. It would be best, in some hypothetical way, to make sure everyone passed certain tests to allow them to vote (you need to be smart, informed, moral, etc.). Imagine how a small, well-educated voting base would perform (sounds like I’m trying to describe the ideal congress)? Awesomely, right? But, who is going to design these tests and implement them? How can such a thing not be abused (like the censorship issue)? Eh, it can’t. Basically, I don’t think we can have a political system other than democracy just because there will always be some pieces of shit/corrupt elites which will abuse the system.

So, everyone has a “legal” right to vote. That doesn’t mean everyone has a “moral” right to vote. I think most people are immoral when they are so arrogant to think they have the right to vote (hell, I don’t even know if I’m qualified to vote). 
''How did you first find out about VPNs?''

(I’m giving you more than you asked for in this section, but I don’t want to deceive you with a shallow
answer.)

I want to be clear about this question. The majority of people who use VPNs don't even know what a
VPN really is. What do you mean by VPN? (I believe there are valuable comp-sci and philosophical
questions about what even counts as a VPN or a functional network for that matter. I’ll set those aside
for now though.) Let me try to give a quick account of the standard term.

VPN stands for Virtual Private Network. Roughly, a VPN is a secure private network which sits on top of
or operates through unsecure networks. In most cases, a VPN is used to extend a private network (like a
home or corporate network) over a public one (like the internet). In a way, a VPN can be used to create
a virtualized WAN. Standard VPN tools use a cryptographically secure tunnel between a client and
server, enabling the client to remotely participate in the server's LAN. You might imagine this as running
a secure, digital LAN cable from your client over the internet to the server’s LAN. Obviously, there are
many uses for this, and the ability to proxy is just one of them.

In my opinion, the majority of people who use VPN's in non-commercial settings, however, only use
them as a secure tunnel to a server which acts as a proxy to the clearnet. Users seeking the proxy
function of a VPN are provided two significant features: 1) a degree of privacy, namely middlemen (like
ISPs) cannot modify or meaningfully inspect the encrypted information passed between the VPN client
and server, and 2) a degree of anonymity, since users connecting to third party internet services are able
to masquerade as coming from the server’s IP rather than their own.

VPNs, however, are used for far more than proxying. Thus, I wonder if you are really asking about proxy
services here.

If so, I first encountered proxy services (which weren't standard VPNs) in the 90s, learning about
penetration testing. That said, I often prefer VPNs to other proxy techniques because good VPN
protocols/tools are open source, heavily field tested, reliable, fast (5-10% throughput overhead, with a
reasonable increase in latency), widely available, and, most importantly, they make it really easy to force
all of your internet traffic through the VPN tunnel (there are exceptions). In the anonymity+privacy arms
race we face in the digital era, VPNs have been one of the few efficient, effective, and yet easy to use
tools available to the masses.

VPNs are not perfect, but they are often good enough. I think a VPN is often a cost-efficient and effort-
efficient way to gain significant privacy and anonymity for many users. I feel morally obligated to say
this: Anyone with significant privacy or anonymity needs (i.e. getting caught would result in major fines,
going to jail, or worse) should NOT rely upon just a VPN! Individuals should evaluate their risks and
understand what their tools buy them (we can't afford to be illiterate in these matters). In many cases,
an openVPN service will suffice. Users might also benefit from rolling their own VPN (via a VPS or
dedicated server) rather than relying upon a third party service.

I'm not even sure when I first encountered a standard VPN, but I know I used a VPN to play LAN games
over the internet with friends as a teenager. I also used VPNs to grab files from my home computer from
my dad's workplace. These VPNs were not used for the sake of proxying.The first paid VPN service I used for the sake of proxying was about ten years ago. I found out about these VPN proxy services because I had been searching for a method to provide privacy against Comcast's packet inspection, primarily to prevent their routing algorithm from throttling my torrent connections (one of the first and worst violators of net neutrality principles which ISPs used to follow), and to provide anonymity against trackers and other swarm participants as just a bonus (pirates weren't hunted down in the same way back then, so it was just a bonus).

''How did you get involved with VPNs and the TOR network?''

For standard VPNs: gaming, penetration testing, and pirating. Searching the internet and reading books
is how I first understood anything about them.

As far as I’m concerned, Tor is a VPN. It’s a really specialized kind of VPN with a well-designed
architecture and protocol for a variety of threat models. When it comes to anonymity+privacy, Tor is a
sledgehammer. No other single tool is as effective at handling so many problems that users face. For
example, Tor is one of the few tools available when you can’t afford to trust a VPN provider. Tor is not
perfect (even if it is better than standard VPNs). Again, I feel morally obligated to say: Anyone with
significant privacy or anonymity needs (i.e. getting caught would result in major fines, going to jail, or
worse) should NOT rely upon just Tor!

I don’t remember when I first heard about Tor. I think I stumbled upon it on 4chan and/or some tech
news sites many years ago. I tried it out for fun, but, for the longest time, it wasn’t much more than a
toy for me. I didn’t become strongly invested in Tor as an instrument of freedom and human rights until
maybe 7 years ago.

''What made you interested in additional levels of online security and anonymity? Why do you use
VPNs and other online privacy tools?''

I’ve been interested in privacy and anonymity since I was twelve. I read many non-fiction books and
articles on hacking, cryptography, the history of US intelligence agencies, censorship, etc. as a teenager.
Fiction also opened my eyes. After reading 1984 and Animal Farm, I dove into Orwell's work, and others.
Reading tech news sites, following forums and other social media sites, and talking with people have
helped cultivate my interest in privacy and anonymity as well.

These issues really struck me even harder when I moved to Thailand. I got to see first-hand how
censorship plays out in Thailand (and I only now see how incredibly effective the wealthy and powerful
aristocracy of first-world Western nations are at censoring and controlling the flow of information). I
was able to see the real moral value of piracy there as well, and it’s an experience that has led to my
rejection of the moral basis of Anglo-American intellectual property regimes. For both censorship and
piracy, standard VPNs, Tor, i2p, etc. have been invaluable to me.

Over time, I’ve come to see how important anonymity and privacy tools are for people in all nations.
These tools are social, political, educational, and economic equalizers and mobilizers. Many parts of our
lives require or are vastly improved by having access to anonymous and/or private information
exchanges. These tools help overcome censorship and enable us to subvert politically and sociallycoercive forces. These tools are necessary for overcoming global class warfare and the oppression of the
poor and disenfranchised. I strongly believe that people have a human right to freely access non-private
information and to use their minds as they fit, and these are crucial tools for the people in what I believe
is the primary digital war of the information age.

''Can you expand on your involvement with TOR?''

I started by donating money to foundations for it. Eventually, I realized that I could hunt around for
better deals on VPSs and contribute directly to the network myself. So, I’ve run relays, bridges, and exit-
relays for years. I can’t afford much, but I do what I can. At one point, about 1% of Tor traffic went
through my relays. Unfortunately, I can’t run an exit node anymore. It’s a dangerous and difficult thing
to do on someone else’s servers.

''Do you think that Americans are becoming more conscious of online security?''

Maybe. It depends on what you mean by “becoming more conscious” and by “online security.”
Here’s a shitty, simple, and honest answer to what you probably mean by that question: Some
Americans, yeah, but the masses, not much. It’s a complex issue.

Improving one’s technical aspects of computer security practices is hard work. It requires literacy and
effort to implement. There is a risk/reward problem that acts as a barrier to the adoption of
improvements in security practices.

As an example of this complexity, from my reading and experience, I don’t believe that Millennials are
any more computer literate than older generations. Their technical security practices are just as bad as
older generations. I believe younger generations, however, have a different ethos and value privacy and
anonymity more highly than older generations. It often doesn’t play out with privacy and anonymity
through standard technical means, though. It plays out in more practical and social ways, through what
they say online, the kinds of communities they join, how they compartmentalize their digital lives, etc.
This is a kind of security practice with a certain kind of awareness.

Do you mean to ask whether or not I think VPN usage is on the rise? I’m pretty sure it is just a fact that it
is on the rise. More and more people are joining the technical arms race. Why do they use them? Some
for piracy, others to masquerade as coming from the US or other origins (content can be censored and
blocked by nation or area), others for professional reasons, etc.

''Were you surprised at Edward Snowden’s revelations? Did they impact the way you browse, or were
you already deep into extra security before?''

I was not surprised. I’m not trying to sound conceited. I think I’ve been paying attention for a while,
though (besides history and it repeating itself, we’ve had many public hints), and I’ve a minimal enough
technical knowledge and imagination to make an educated guess about the US government’s capacities
and practices.There’s a ton more than just “the way I browse” at stake here. I use the internet for a lot more than browsing http sites.

Part of the impact is that I’m more willing to talk about the issues with people, and I feel even more
vigilantly aware of how it affects our lives. A lot of people would have considered the lesson and claims
from those revelations as a conspiracy theory or something irrelevant to their lives before. Now we can
have a somewhat more open discussion about it.

I still think there are many barriers to the changes we need, and I am not hopeful that we’ll do anything
about it. I don’t think most people are technically literate enough to understand what’s happening
(which isn’t their fault), and I think they are busy doing other things with their lives (understandably).
Further, even for those who understand these problems, many people have just given up on securing
their privacy and anonymity, as if the loss is inevitable or a deep inconvenience.

For example, I don’t even use a VPN or Tor to protect and mask my everyday traffic. It’s just not worth it
for me. I’ve got a 150mbit connection, and I’m not willing to sacrifice my bandwidth or add 250ms
(which can easily add seconds to each complete connection) for my everyday stuff. I want that
anonymity and privacy, but the cost is too high.

There are other things I do, however, which aren’t a sacrifice for me. With a decent enough computer,
having the full complement of privacy extensions in my browser doesn’t require any performance
sacrifices. I stay away from mobile as much as I can for a multitude of security reasons (I cannot
recommend it enough). I’m selective in my ISP (as selective I can be with the very few options available).
I try to be more mindful and supportive.

''Do you think the US is still better than most countries regarding online privacy since there are no
mandatory data retention laws?''

I think the US is among the worst, if not the worst. Plenty of nations do awful things to their people, but
few are as good at hiding or misdirecting away from it as the wealthy and powerful interests of the US.
Also, there is a difference between what laws are on the books and what is actually practiced.
Further, this isn’t just a nation-state problem. Many significant adversaries do not have political borders,
multi-national corporations being a solid example.

''Do you think governmental attempts to crack down on VPNs and encryption will be successful?''

Yes, to some large extent. This is a tricky question in that the answer is both technical and political. On
the technical side, take China and their nationwide firewall as an example. They are only getting better
at it, too. Many governments are working their way toward having the technical capacities to control the
flow of information, including the disruption or prevention of VPNs, encryption, etc. I have no doubt the
US government is capable, and I think they probably will to some extent.I hope governments won’t succeed. I hope we find a way to win the arms race as the 99%. I don’t think we will win, though, at least not on a large scale. There will always be a remnant that exist through obscurity and steganography.

''What is your opinion on the recently passed USA FREEDOM act?''

Lol. It’s a sign of hopelessness and farce. There’s no way to say this nicely or politely. It was a
demonstration of the aristocracy’s rhetoric and false compromises, as well as our inability to do
anything about the military-industrial-congressional complex of our nation. That it has any support from
the populace demonstrates how uneducated and/or brainwashed they are.
```
sudo apt-get update
sudo apt-get install vsftpd -y
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
```



WASM tiddlywiki. You could closesource that. 

Learn Rust. Profit. I need to learn Rust with my daughter. 

* Fully decentralized 
The following methods can acquire the latest official version of this wiki:<<ref "1">>

* Visit [[https://h0p3.xyz/|https://h0p3.xyz]] in a web browser.<<ref "2">>
** Grabbed http://philosopher.life/ as well. Haven't setup https yet. 
* Join the [[Resilio|https://www.resilio.com/individuals/]] (formerly btsync) swarm with read-only key at: [[B4OWUSIS36KT27PXSJIYYTTL5MYPOCL7W|https://link.getsync.com/#f=var-www-html&sz=73E6&s=3E5S6FV4LRD7SS2TUEYTN4ZDEFT5SB6X&i=CFC2UQTLPYQFCSDLXLA3KH7Q2XAGGNBNO&p=CCJG3IT7Z63BKGMTMHF5IH5QARYUCPH4]]
* [[Contact]] me and I can send it to you however you wish.

This wiki changes. For posterity's sake, I keep a daily snapshot collection. You can join the Resilio swarm for it with read-only key at: [[BY7DL6VWCYLOEGXQUWEHH7LNT5EK6UCLL|https://link.getsync.com/#f=h0p3.xyz&sz=44E6&s=DBJ2FIZ5WDCRJ24HINZNVFFUDKGH3AU7&i=CNMB6FJQ34QBT5STXDV5WKVWISGVGY3NO&p=CCJG3IT7Z63BKGMTMHF5IH5QARYUCPH4]]<<ref "3">>

As a sidenote, I'm sure it would annoy many computational minimalists that I willingly store virtually the entire site in a single self-editing html file. I'll grant that text files alone have something going for them, but this is a very special tool. This wiki is incredibly portable, functional, and malleable. I consider Tiddlywiki to be a skeuomorphic feat of software engineering. How many virtually complete websites with this degree of functionality and content can you download in a few megabytes?<<ref "4">> Exactly. I think there is profound minimalist beauty to it.

The following sites are my family's wikis:

* 1uxbox's wiki: [[http://kokonut.life]]
** Resilio read-only key: BP5NMZQF25EICLU27RAWM3AIXRWSNL2CM
* j3d1h's wiki: [[http://jedihacker.life]]
** Resilio read-only key: BDCX3UO5NOBGPGT2LFZU2527IMXKCOY3T
*k0sh3k's wiki: [[http://bookwyrm.life]]
** Resilio read-only key: B3LKP7KPMNMNWRF75CKLTRB3EIJJTLCNM


--------------------------

<<footnotes "1" "I used to have more methods. But, I believe this was fun yet irrelevant, at least for now.">>

<<footnotes "2" "To guarantee you receive the latest edition of this wiki, clear your browser cache or use private/incognito mode. While I don't force redirects, you can and should access the h0p3.xyz site using HTTPS.">>

<<footnotes "3" "Hear this O Lord, God of Existence, may this not be a record of my descent into madess.">>

<<footnotes "4" "Which is the standard size of any webpage on the web anyways, but you can't multi-threaded download this one.">>
Don't we love this section? Let's pat ourselves on the back.

A strong habit and meme that permeates our family is having the wisdom to recognize how often and to what degree we’ve failed to be intelligent or wise over the course of our lives; we evaluate ourselves and see our limits in an honest way that others often do not and very often cannot. Sometimes we are too critical, and sometimes we think too highly of ourselves or thoughts. In my opinion, having the humility to consistently recognize this flaw in ourselves has been one of our family’s greatest assets (and sometimes source of pain).

Our overexcitable sensitivity to the world around us is the first step in a psychological equation describing why we are relatively smart (let’s keep patting ourselves on the back). That sensitivity, to being wrong for example, has led to our intermittent ability to be humble enough to honestly evaluate ourselves. It is the fundamental, evolutionarily selected-for, underlying physiological explanation of our intelligence.

Being smart means our sensitivity causes us to generate very specialized, highly information entropic, yet deeply patterned ideas, beliefs, and inferences. Essentially, being smart means we have very specified reality maps, and it makes sense that we are mathematically more likely to clash, find incongruence, or feel incompatible.
This is a template. It's a generalized gameplan and not an exact schedule. This is about contemplating the overall everyweekliness structure of our lives. Obviously, we must be flexible. It's the kind of thing we naturally keep in our heads, but it is also something worth writing down for more objective analysis. We may need to change it. When I get out of my Pipefitting program, I may be forced to travel for long periods of time. We will need to think about and plan around these kinds of generalized structures. I can certainly do it by hand in my head, but it may be easier, more efficient, and less stressful if we wrote it down for everyone.

* Sunday - The Day of Practical Idealism
** Church
** DCK Meditation
** Reflective Writing
** Family Walk
** Family Book Supper
** Family Meeting
** Chores
* Monday
** School/Work
** Chores
* Tuesday
** School/Work
** Chores
* Wednesday
** School/Work
** Chores
* Thursday
** School/Work
** Chores
* Friday
** School/Work
** Chores
* Saturday - The Day of Ideal Pragmatism
** Make our public library run
** Grocery shopping
** Additional errands
** Clean house (those non-daily chores) & daily chores
** Budget analysis
** Reflective Writing
** Family Saturday Project
** School Accountability and Direction Shaping Meeting
[[Super Mario Bros.]] the movie is weirdcore. So is [[The Fifth Element]].
Despite my life falling apart in the past few years, my family's lives have improved significantly since the move. Actually, I feel like my life has been coming together too. That has been hope-inducing and purpose-giving to me. I need to figure out what I'm going to do now. 

The reason I have to live right now is the happiness of my children. I must pursue that purpose with zeal. I can't let that flame die out. Of course, if my childrens' happiness is my telos, then I will have many instrumental values through the necessary conditions for their happiness. [[What is necessary and what is sufficient for eudaimonia?]]

How can I give my children my best? What is best for them? How can I make them happy? Who are they, who will they be, and what do they need? What is my vision for my children? How are the most likely to achieve the highest average utility? 

<<<
[[KIN]]: Watch out, we do not know that [[Eudaimonia]] [[<=>]] Max (Personal or Global) [[Utility]]
<<<

My first practical thought: I'm going to help them become computer wizards and systems-gods.<< ref "1">> They could be jedi-hackers. But, of course, my first thought is too narrow. It is really only a gateway to a broader set of things my children need for the future. They have tobe  philosophical too. They need to find love, to be challenged in the right ways, to figure out their own goals, etc. Achieving happiness is not simple. I need to create [[eudaimonic lifehackers|Eudaimonic Lifehacker]].

Academically, I must help them to:

* become proficient in practical life skills
** Basic accounting and managing their personal finances
*** Do they have a basic understanding of economic, financial, and monetary concepts and principles?
***Do they instinctively look towards with the world in a utilitarian mindset (the only moral perspective which relies heavily upon the frontal lobes)? 
**** Do they practice self-control, planning, and delayed gratification?
**** How much do they use reason to dictate their financial (or even life in general) choices?
** Home economics
*** Can they troubleshoot problems in objects around the home?
*** Do they cook, clean, and organize their home? 
**** Can they make their home a palace they enjoy habitating?
*** Can they gracefully handle having other people in their home (in various contexts)?
* acquire a formal trade skill
* habituate constructive social skills
* round out their education with laser-focused depth in humanities
** I have a very strong point of view in the humanities. It is part of my art and craft in philosophy; the root of the humanities just is my techne.
* become language learners
* become effective self-reflectors




May they be jedi-lifehackers. When they decide to leave my nest, they will have a very practical tool for the [[uberworld|The Uberworld]]. 

How can I raise jedi eudaimonic lifehackers? What is the virtuous character?

They need to learn:

* how to learn
** broadly: what to learn, why, how, from whom, in the right way, at the right time, and so on and so forth
** how to practice
** how to curate information
*** learning which information to curate and why
*** learning how to build their curation toolset
** to develop and tune a bullshit detector
** how to organize and reassess their reality maps
* to consistently engage in the growth cycle of: taking healthy risks, getting hurt (while sometimes succeeding to varying degrees), and learning from their mistakes 
**i.e. to habituatally improve upon their risk taking algorithm in the rewards system of their mind
**to fail over and over and over, and to not give up
** to see the costs of being the kind of person who gives up easily (to be motivated to avoid it)
** to learn how to pick their battles and goals well, and how to mentally land on their feet after they fall
*** to accept failure, to roll with those punches, and to move on
** to constantly analyze their work+life goals
* to work hard, fast, and efficiently
** to convert work into games they find fun and interesting
** to automate work, to offload the heavy-lifting, to passive gain income
** to see the value in their work, to see its limits and potential
*to see their future selves as part of their authentic self. 
**They must recognize and identity with their 4th-dimensional identity. 
**They must plan and think about who they are becoming, because that just is them. 
** They must learn to empathize with themselves, to talk to themselves, to care about who they are. 

Of course, I need to be a much better role-model in this respect. How can I hope for them to succeed if they don't a blueprint to follow?

I can't teach them or motivate them (or help them learn to teach and motivate themselves) without empathy. I have to understand them to teach and motivate them. My goal is to empathize with my children. I must develop reliable, accurate, and rich theories of their minds, and consistently elect to fire off my mirror-neurons to put myself in the hypothetical world generated by the programmatic details of my theory of their minds. I need to get to know them as well as they know themselves, or I at least need to do my best. I can't understand their individual needs or tailor my parenting to them without empathy. 

They need me to empathize with them, that's what loving them is all about. To guide them wisely requires the resources and love to develop a habit which trains me to gutterally enjoy (to like) empathizing with them in all contexts, since after all, that is the only way in which I will have the virtuous disposition, perception, and gutteral reflexes to be a an excellent (arete) parent (MacIntyre's virtue of the practice).

On a different note, I now see that I have to help my parents develop reliable, accurate, and rich theories of my mind, and that can only be done if I can do the same for them in a bootstrapping process. It can't be all on them to find their way through my desert. I have to lead them down my very odd network of thoughts. It is my responsibility to engage them in this way. They need my help to empathize with me. 

Alright, so I have answered "What's next?" or "what it is I'm going to do now" with educating my children correctly and helping my parents understand me. Both of these, fundamentally, are about learning how to be more empathic. I must trust in empathy. I must trust my [[Kantian Intuition Network]] (KIN), and I must do it regardless of the conclusions of my [[Redpill Intuition Network]] (RIN). It is a kind of faith, but even RIN must accept that the bottom of epistemology is obviously faith, it is the only solution to [[the foundation problem|Epistemic Foundation]]. 

''KIN'': RIN, can't you see 

Metamodernism and Positive Disintegration

---------------------------------

<<footnotes "1" "My goal is not to be a kingmaker. My goal is find the highest utility for my children possible.">>
* Gondola
** Unlike so many before him, he does not purport to be anything he isn't, he simply bears witness to the world as it is.
* Wojack / Feels Man
** Represents feelings such as melancholy, regret or loneliness.
** Perhaps sub-type Smug Wojak in some respects.
Being rational sometimes grants utility. Being perfectly rational always grants you the best utility option (which doesn't necessarily grant you utility, but only the best of the options). Failing to consistently be perfectly rational sometimes, or failing to be fully rational in an instance, doesn't always grant you the best utility option (utility outcome prediction errors or selecting the option with the highest utility errors [seems deeply dysfunctional to do] have those kinds of results). People aren't always picking what maximizes utility. 

People can be burned by trying to be rational. They can be humiliated and embarrassed of who they were and what they used to believe. They can see that people 


I'm not a professional because I don't make a living by thinking, reading, and writing about what the academic world considers academic philosophy. I don't publish in peer-reviewed journals or write books with that audience in mind. 

Don't get me wrong, I am capable of thinking at that level. I regularly do. I've got the training but not the rubber-stamp seal of approval.<<ref "1">> That isn't to say I don't respect academic philosophy or the degree. I do. I am still proud of the high praise I have received from my professors. Their opinions mean a lot to me. I am profoundly affected by what I have learned. Academic education has transformed me. 

Unfortunately. there is something missing in academic philosophy. It is a popularity contest corrupted by capitalism which has left behind and suppressed the pursuit of //systematic philosophy//.<<ref "2">> Academic philosophy is still spinning its wheels in post-modern deconstructionism, and that's probably because there is no foundation we can all rationally accept (I don't know if this dooms the CI or not, but I think there is a way out). The goal of being an academic might be to find a very tiny spot to leave your mark or to push the bleeding-edge of the public sphere of knowledge. Who wouldn't like to be famous for what they think? But, that isn't ultimately what I'm after. When I'd talk to my peers and teachers over the years about this issue, they would give me a puzzled look. Understandably, I suppose, since I'm not buying what they do.

Philosophy is deeply practical to me. It is a framework or lens through which I interpret the world. I'm here to be philosophical about my life. I'm doing philosophy for myself, not for others.<<ref "3">> That isn't to say what I'm doing shouldn't be or isn't useful to others, but it does mean that my work doesn't fit nicely into the topics du jour then "I'm out."<<ref "4">> Some people are lucky enough to have opinions that are popular, that coincide with the intuitions of others so effectively that they are readily accepted into the fold. I am a misfit with terrible social skills. That's okay though. I'm still a philosopher.

-----------------

<<footnotes "1" "I'm exceedingly grateful for the opportunities I've been given. I won the lottery back-to-back-to-back to be paid to go to school to learn a discipline which is generally considered esoteric, useless, and irrelevant by the world at large.">>

<<footnotes "2" "I'm not the only ex-academic philosopher who thought this. That doesn't mean we are correct. And, of course, market-based academics does generate valuable work in many ways. Markets are as imperfect as the people in them though.">>

<<footnotes "3" "That sounds really selfish. I think my philosophical views obviously have impact on the people around me. What I believe affects what I practice and how I behave. This is a doxa->praxis.">>

<<footnotes "4" "Project Runway: Heidi Klum's voice, please.">>
We all want to be empathic .
Structure, Code, etc.

* Import/make a calendar
* Center the Tiddlers, shrink the width, but scale to screen size

Content:

* Import relevant bookmark work
* Import relevant Reddit work
* Interpret Less Wrong
* Interpret Daoism
* Interpret https://meaningness.com/
* Interpret The Stack
* Interpret XKCD and SMBC
* Interpret http://tvtropes.org
* Evaluate other Internet Rabbit Holes

Love it or hate, Windows has arguably the richest and most backwards compatible software ecosystem to date. It's nice to see older tools retaining their usefulness, and surprisingly, many remain the best or only tool of their kind for the lineage of Windows versions. Unfortunately, a few of these tools must be pirated. 

Administration, Local File Control, and OS mods:


* 3DP Chip
* 7-zip
* CCleaner
* Classic Shell
* Dexpot
* Everything
* Find and Replace
* Gamma Panel
* Intel Burntest
* Hiren's Boot Disk (I suggest automounting)
* HP USB Disk Storage Format Tool
* Huge Small File
* HWinfo
* KMSpico
* Poweriso
* Process Explorer
* RBtray
* Revo Uninstaller
* Rufus
* Teracopy
* XYplorer




Automation:

*Advanced BAT to EXE Converter
*Autohotkey
*Filebot
*Folder Monitor
*Pulover's Macro Creator
* Resilio
* Synkron




Development and Production:

*Python 2.7 and 3.5
*Sublime Text 2
*Java 8



Media:

*Calibre
*Gimp
* Kodi
* Microsoft Office
*Sumatra PDF
*VLC media player



Op Sec:

*GNUpg
*Hashtab
*Kee Pass
* Open VPN
* Proxy Searcher
* PWGen
* Quick Hash
* Softether VPN Client (including vpngate server list)
* Truecrypt 7.1a
* Windscribe (sometimes a free commercial VPN is worth having)



Piracy:

*aMule
*Apex DC++
*Ares
* qBittorrent
* SABnzbd
* Shareaza
* Soulseek QT



Remote Access:

*Filezilla Secure
*No Machine
* Teamviewer



Social Tools:

*Hexchat
*Pidgin
*qTox
*Retroshare


Web and Web-like Tools :

* Google Chrome (hate that I use it, but sometimes you need it)
*i2p
* Mozilla Firefox
* Tor Browser Bundle
* Zeronet Bundle



Virtualization:

* Nox
* Sandboxie
* Virtualbox
* VMWare Workstation
* Dyadic meta-accuracy: Thinking about how other people think about you.
I worry you think that my only or best way out of my depression is to reconvert to Christianity. Like you think is some spiritual problem played out in a physical dimension. Like this is a spiritual warfare taking its toll on me. As if the only way to be free and happy is to accept Christ again. 
I think you did not understand the minds of your children in important ways. I think it also really hard to understand the minds of your children, since they were not neurotypical. I think you technically had the ability to learn and repond to these problems, and you didn't. I also think you had so many other pressures in your life as you were raising us that you couldn't empathize with us. If generally believed you did have the time, energy, resources, and life-direction to do it.